前言:前面文章讲了MGR的安装以及新节点的加入,今天讲下MGR集群的重启、备份和压测相关。

一、重启

MGR重启类似于ORACLE DG的重启方法,如果我没记错的话,DG重启是先关闭master,再关闭slave,启动时先启动slave,再启动master。那么MGR也是类似,采用滚动重启法来重启,最后关闭的节点最先起来,另外我们可以通过show master status查看哪个节点的数据最新,将数据最新的节点先启动复制,最后需要注意的是,最先启动的节点要设置group_replication_bootstrap_group为ON作为引导节点,总的来说MGR重启还是比较简单的,几个细节注意即可。
下面我们来演示一下节点重启。

关闭

node4:

  1. mysql> shutdown;
  2. Query OK, 0 rows affected (0,00 sec)

node1查看:

  1. root@localhost [performance_schema]>select * from replication_group_members;
  2. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  3. | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
  4. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  5. | group_replication_applier | 948335e8-64ad-11e8-86e7-080027de0e0e | zst1 | 3306 | ONLINE |
  6. | group_replication_applier | c516f6d9-64af-11e8-9952-080027de0e0e | zst2 | 3306 | ONLINE |
  7. | group_replication_applier | c8bbdc5f-64af-11e8-b469-080027de0e0e | zst3 | 3306 | ONLINE |
  8. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  9. 3 rows in set (0.00 sec)

看到node4已经剔除了
如此循环依次关闭node3/node2/node1

启动

我们依次先启动node1,node2,node3,node4的实例
然后在节点1设置group_replication_bootstrap_group为on,启动group replication

  1. root@localhost [performance_schema]>set global group_replication_bootstrap_group=on;
  2. Query OK, 0 rows affected (0.00 sec)
  3. root@localhost [performance_schema]>start group_replication;
  4. Query OK, 0 rows affected (2.02 sec)
  5. root@localhost [performance_schema]>select * from replication_group_members;
  6. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  7. | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
  8. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  9. | group_replication_applier | 948335e8-64ad-11e8-86e7-080027de0e0e | zst1 | 3306 | ONLINE |
  10. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  11. 1 row in set (0.00 sec)

然后依次启动node2/node3/node4组复制

  1. mysql> start group_replication;
  2. Query OK, 0 rows affected (3,14 sec)

最后在节点1查看成员状态

  1. root@localhost [performance_schema]>select * from replication_group_members;
  2. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  3. | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
  4. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  5. | group_replication_applier | 59f7ff4d-679c-11e8-9be4-080027de0e0e | zst3 | 3307 | ONLINE |
  6. | group_replication_applier | 948335e8-64ad-11e8-86e7-080027de0e0e | zst1 | 3306 | ONLINE |
  7. | group_replication_applier | c516f6d9-64af-11e8-9952-080027de0e0e | zst2 | 3306 | ONLINE |
  8. | group_replication_applier | c8bbdc5f-64af-11e8-b469-080027de0e0e | zst3 | 3306 | ONLINE |
  9. +---------------------------+--------------------------------------+-------------+-------------+--------------+
  10. 4 rows in set (0.00 sec)

看到所有节点都已回到集群

二、备份

如果直接在MGR集群的某个节点发起备份,那么可能会导致整个集群性能下降,尤其是在业务高峰期的时候,因此,我们常规的备份方式通过挂载一个新的异步复制的从库,通过备份从库来实现备份的目的。

备份其中一个节点(node2)

  1. mysqldump -uroot -p -S /tmp/mysql3306.sock -A --master-data=2 --single-transaction >/tmp/all.sql

初始化一个MySQL节点后导入备份

  1. source /tmp/all.sql

配置主从关系

  1. change master to master_host='172.28.128.102',master_port=3306,master_user='repl',master_password='repl4slave',master_auto_position=1;

配置备份任务

这里备份有两种方式,可以使用mysqldump也可以使用xtrabackup,可根据实际情况自行选择,这里不赘述,参考xtrabackup实战班

三、压测

我们这里采用sysbench来做压测,sysbench安装参考文章
因为我这里虚拟机资源有限,我把node3、node4下线以后,在node3上的虚拟机上安装sysbench进行压测,这样一来结果稍稍能够准确一些。我这里只贴下OLTP压测的脚本

数据准备

  1. /usr/local/bin/sysbench /usr/local/share/sysbench/oltp_common.lua \
  2. --mysql-host=172.28.128.101 --mysql-user=tpcc --mysql-password=xuclxucl \
  3. --tables=10 --table_size=20000000 --threads=100 --max-requests=0 prepare

测试

  1. /usr/local/bin/sysbench /usr/local/share/sysbench/oltp_read_write.lua \
  2. --mysql-host=172.28.128.101 --mysql-port=3306 --mysql-db=sbtest --mysql-user=tpcc \
  3. --mysql-password=xuclxucl --table_size=20000000 --tables=10 --threads=100 --time=300 \
  4. --report-interval=10 run > /tmp/sysbench.log