请选择 进入手机版 | 继续访问电脑版

12360技术网 - 专业IT技术发表平台

 立即注册  找回密码
查看: 9470|回复: 6

PXC、MGR、MGC集群之新建、备份、恢复操作步骤

[复制链接]

19

主题

24

帖子

182

积分

注册会员

Rank: 2

积分
182
发表于 2020-1-16 19:55:02 | 显示全部楼层 |阅读模式
导读
作者:沃趣-罗小波概要:原文包含PXC、MGR、MGC集群之新建、备份、恢复操作步骤详解,因篇幅较长,本文仅节取MGR部分内容。
若想了解完整文章,可至文末获取

对于PXC、MGC、MGR三种MySQL的集群复制架构技术,其实在更早之前,我做过一个视频版的 "PXC、MGC & MGR 原理与实践对比" 系列课程,但有部分同学觉得里边的内容缺少详细操作步骤。所以,今天我就将PXC、MGR、MGC集群之新建、备份、恢复操作的详细步骤整理出来分享给大家,希望能帮助大家更好地玩耍PXC、MGC、MGR


一、原文目录
1、PXC1.1. 集群初始化1.1.1. 第一个节点(init)1.1.2. 第二个节点(sst)1.1.3. 第三个节点(backup recovery)1.2. 集群新增节点1.2.1. 使用备份集恢复1.2.2. 全量SST加入集群1.3. 单节点crash的恢复1.4. 多数节点crash的恢复1.4.1. crash节点数据未丢失且可以原地恢复1.4.2. crash节点数据丢失1.5. 整个集群crash的恢复1.5.1. 使用备份恢复1.5.2. 使用crash节点的datadir数据卷进行恢复2、MGC3、MGR   3.1. 集群初始化     3.1.1. 第一个节点(init)3.1.2. 第二个节点(全量复制)3.1.3. 第三个节点(backup recovery)   3.2. 集群新增节点3.2.1. 使用备份集恢复3.2.2. 全量复制加入集群   3.3. 单节点crash的恢复   3.4. 多数节点crash的恢复3.4.1. crash节点数据未丢失且可以原地恢复3.4.2. crash节点数据丢失   3.5. 整个集群crash的恢复3.5.1. 使用备份恢复3.5.2. 使用crash节点的datadir数据卷进行恢复


二、背景说明服务器环境

  • kvm ip:10.10.30.162/163/164
  • CPU:8 vcpus
  • 内存:16G
  • 磁盘:data 100G flash卡,binlog 100G flash卡

数据库版本

  • MGC:MariaDB 10.2.12
  • MGR:MySQL 5.7.21
  • PXC:Percona-Xtradb-Cluster 5.7.21

sysbench版本

  • sysbench 1.0.7
  • 造数量:8个表,单表500W数据量


PS

  • PXC:为Percona Xtradb Cluster的缩写
  • MGR:为MySQL Group Replication的缩写
  • MGC:为MariaDB Galera Cluster的缩写



三、原文节选:
3、MGR3.1. 集群初始化

3.1.1. 第一个节点(init)


  • 数据库初始化(略)
  • 关键配置
  1. server_id=3306162sync_binlog=10000innodb_flush_log_at_trx_commit = 2binlog-checksum=NONEinnodb_support_xa=OFFauto_increment_increment=3auto_increment_offset=1binlog_row_image=fulltransaction-write-set-extraction=XXHASH64loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"loose-group_replication_single_primary_mode=OFFloose-group_replication_enforce_update_everywhere_checks=ONloose-group_replication_start_on_boot=onloose-group_replication_ip_whitelist='0.0.0.0/0'loose-group_replication_local_address='10.10.30.162:24901'loose-group_replication_group_seeds='10.10.30.162:24901,10.10.30.163:24901,10.10.30.164:24901'loose-group_replication_bootstrap_group=OFFreport_host='node1'
复制代码

  • 配置hosts解析记录(有DNS即系服务的环境无需配置)
  1. [root@localhost ~]# cat /etc/hosts                                                                                                                                                                                            ......10.10.30.162 node1 mysql110.10.30.163 node2 mysql210.10.30.164 node3 mysql3
复制代码

  • 启动节点(非集群方式)
  1. mysqld_safe --defaults-file=/etc/my.cnf &
复制代码

  • 创建复制和备份用户
  1. SET SQL_LOG_BIN=0;CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY 'xtrabackuppass';GRANT SELECT, LOCK TABLES, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD, CREATE TABLESPACE, PROCESS ON *.* TO 'xtrabackup'@'localhost';grant DROP, CREATE, INSERT on mysql.ibbackup_binlog_marker to  'xtrabackup'@'localhost';CREATE USER repl@'%' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO repl@'%' ;SET SQL_LOG_BIN=1;FLUSH PRIVILEGES; 
复制代码

  • 安装插件并配置group replication
  1. INSTALL PLUGIN group_replication SONAME 'group_replication.so';CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';FLUSH PRIVILEGES ;
复制代码

  • 启动集群组复制插件
  1. set global group_replication_bootstrap_group=ON;start group_replication;set global group_replication_bootstrap_group=OFF;
复制代码

  • 检查集群组复制节点状态
  1. #查看状态是否为onlineroot@localhost : (none) 03:39:20> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+1 row in set (0.00 sec)
复制代码
PS:MGR更多的配置参数参考模板链接如下:
https://github.com/Percona-Lab/percona-docker/blob/master/pgr-57/node.cnf
3.1.2. 第二个节点(全量复制)


  • 数据库初始化(略)
  • 关键配置
  1. server_id=3306163sync_binlog=10000innodb_flush_log_at_trx_commit = 2innodb_support_xa=OFFbinlog-checksum=NONEauto_increment_increment=3auto_increment_offset=2binlog_row_image=fulltransaction-write-set-extraction=XXHASH64loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"loose-group_replication_single_primary_mode=OFFloose-group_replication_enforce_update_everywhere_checks=ONloose-group_replication_start_on_boot=onloose-group_replication_ip_whitelist='0.0.0.0/0'loose-group_replication_local_address='10.10.30.163:24901'loose-group_replication_group_seeds='10.10.30.162:24901,10.10.30.163:24901,10.10.30.164:24901'loose-group_replication_bootstrap_group=OFFreport_host='node2'
复制代码

  • 配置hosts解析记录(有DNS即系服务的环境无需配置)
  1. [root@localhost ~]# cat /etc/hosts                                                                                                                                                                                            ......10.10.30.162 node1 mysql110.10.30.163 node2 mysql210.10.30.164 node3 mysql3
复制代码

  • 启动节点(非集群方式)
  1. mysqld_safe --defaults-file=/etc/my.cnf &
复制代码

  • 创建复制和备份用户
  1. SET SQL_LOG_BIN=0;CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY 'xtrabackuppass';GRANT SELECT, LOCK TABLES, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD, CREATE TABLESPACE, PROCESS ON *.* TO 'xtrabackup'@'localhost';grant DROP, CREATE, INSERT on mysql.ibbackup_binlog_marker to  'xtrabackup'@'localhost';CREATE USER repl@'%' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO repl@'%' ;SET SQL_LOG_BIN=1;FLUSH PRIVILEGES; 
复制代码

  • 安装插件并配置group replication
  1. INSTALL PLUGIN group_replication SONAME 'group_replication.so';CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';FLUSH PRIVILEGES ;
复制代码

  • 启动集群组复制插件
  1. reset master;start group_replication;
复制代码

  • 检查集群组复制节点状态
  1. #查看状态是否为onlineroot@localhost : (none) 03:45:24> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | ONLINE      || group_replication_applier | f64f9fb6-2da4-11e8-96bd-525400c33752 | node2      |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+2 rows in set (0.00 sec)
复制代码

  • 查看节点复制延迟与应用情况
  1. root@localhost : (none) 06:48:32> select * from performance_schema.replication_group_member_stats where MEMBER_ID=@@server_uuid\G;*************************** 1. row ***************************                      CHANNEL_NAME: group_replication_applier                          VIEW_ID: 15218000786938271:11                        MEMBER_ID: 0a1e8349-2e87-11e8-8c9f-525400bdd1f2      COUNT_TRANSACTIONS_IN_QUEUE: 287640 # 该字段显示当前接收到的relay log与当前应用到的relay log之间的事务差异        COUNT_TRANSACTIONS_CHECKED: 0          COUNT_CONFLICTS_DETECTED: 0COUNT_TRANSACTIONS_ROWS_VALIDATING: 0TRANSACTIONS_COMMITTED_ALL_MEMBERS: 2d623f55-2111-11e8-9cc3-0025905b06da:1-2,aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-13779 # 该字段显示当前节点应用到的日志对应的GTID    LAST_CONFLICT_FREE_TRANSACTION: 1 row in set (0.02 sec)
复制代码

  • PS:该方式必须保证集群中已有节点的binlog未执行过清理,一旦有清理,新加节点无法通过全量binlog复制来加入集群
3.1.3. 第三个节点(backup recovery)


  • 首先,使用sysbench制造一些测试数据,然后,使用sysbench持续对集群发起oltp压力
  1. # 创建数据库root@localhost : (none) 01:44:33> create database sbtest;Query OK, 1 row affected (0.00 sec)# 使用sysbench造数sysbench --db-driver=mysql --time=180 --threads=8 --report-interval=1 --mysql-socket=/home/mysql/data/mysqldata1/sock/mysql.sock --mysql-port=3306 --mysql-user=qbench --mysql-password=qbench --mysql-db=sbtest --tables=8 --table-size=5000000 oltp_read_write --db-ps-mode=disable prepare# 使用sysbench加压sysbench --db-driver=mysql --time=99999 --threads=8 --report-interval=1 --mysql-socket=/home/mysql/data/mysqldata1/sock/mysql.sock --mysql-port=3306 --mysql-user=qbench --mysql-password=qbench --mysql-db=sbtest --tables=8 --table-size=5000000 oltp_read_write --db-ps-mode=disable run
复制代码

  • 关键配置
  1. server_id=3306164sync_binlog=10000innodb_flush_log_at_trx_commit = 2innodb_support_xa=OFFbinlog-checksum=NONEauto_increment_increment=3auto_increment_offset=3binlog_row_image=fulltransaction-write-set-extraction=XXHASH64loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"loose-group_replication_single_primary_mode=OFFloose-group_replication_enforce_update_everywhere_checks=ONloose-group_replication_start_on_boot=onloose-group_replication_ip_whitelist='0.0.0.0/0'loose-group_replication_local_address='10.10.30.164:24901'loose-group_replication_group_seeds='10.10.30.162:24901,10.10.30.163:24901,10.10.30.164:24901'loose-group_replication_bootstrap_group=OFFreport_host='node3'
复制代码

  • 配置hosts解析记录(有DNS即系服务的环境无需配置)
  1. [root@localhost ~]# cat /etc/hosts                                                                                                                                                                                            ......10.10.30.162 node1 mysql110.10.30.163 node2 mysql210.10.30.164 node3 mysql3
复制代码

  • 在第二个节点上进行备份,并把备份传输到第三个节点上
  1. innobackupex --defaults-file=/etc/my.cnf --slave-info  \--user=xtrabackup --password=xtrabackuppass --no-timestamp \--stream=tar ./ | ssh root@10.10.30.164 "cat - > /archive/backup/backup_`date +%Y%m%d`.tar"
复制代码

  • 使用备份进行恢复
  1. # innobackupex执行apply-log并move-back备份数据到datadir下[root@localhost backup]# tar xvf backup_20180322.tar[root@localhost backup]# innobackupex --apply-log ./[root@localhost backup]# rm -rf /data/mysqldata1/{undo,innodb_ts,innodb_log,mydata,binlog,relaylog,binlog,slowlog,tmpdir}/*[root@localhost backup]# innobackupex --defaults-file=/etc/my.cnf --move-back ./......
复制代码

  • 正常启动节点
  1. chown mysql.mysql /data -Rmysqld_safe --defaults-file=/etc/my.cnf --loose-group_replication_start_on_boot=off &
复制代码

  • 查看备份文件中GTID位置
  1. [root@localhost backup]# cat xtrabackup_binlog_info mysql-bin.000147        103011527      2d623f55-2111-11e8-9cc3-0025905b06da:1-3,aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-87512845
复制代码

  • 登录数据库,执行重设gtid,并重新拉起group replication
  1. root@localhost : (none) 01:38:35> reset master;Query OK, 0 rows affected (0.02 sec)root@localhost : (none) 01:39:25> set global gtid_purged='2d623f55-2111-11e8-9cc3-0025905b06da:1-3,aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-87512845';Query OK, 0 rows affected (0.00 sec)root@localhost : (none) 01:39:53> set global group_replication_start_on_boot=on;Query OK, 0 rows affected (0.00 sec)root@localhost : (none) 01:40:59> start group_replication;Query OK, 0 rows affected (2.66 sec)
复制代码

  • 检查集群组复制节点状态
  1. #查看状态是否为online,root@localhost : (none) 11:16:52> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | ONLINE      || group_replication_applier | 859b114c-2e48-11e8-9eac-525400bdd1f2 | node3      |        3306 | RECOVERING  || group_replication_applier | f64f9fb6-2da4-11e8-96bd-525400c33752 | node2      |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+3 rows in set (0.00 sec)......root@localhost : (none) 01:43:23> select * from performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | ONLINE      || group_replication_applier | 62392979-2e5c-11e8-a389-525400bdd1f2 | node3      |        3306 | ONLINE      || group_replication_applier | f64f9fb6-2da4-11e8-96bd-525400c33752 | node2      |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+3 rows in set (0.00 sec)
复制代码
PS:如果是快照拷贝的数据,需要删除datadir/auto.cnf文件
3.2. 集群新增节点

3.2.1. 使用备份集恢复


  • 无备份时的qps曲线图


  • 有备份时的qps曲线图


PS:
由于在多线程复制下,使用xtrabackup备份读节点高概率会导致发生锁死现象(sysbench 128线程insert操作百分百重现),所以在MGR架构上的备份只能考虑在写节点上备份(备选方案1:在集群上挂一个主从架构的备库,使用xtrabackup的--safe-slave-backup选项在加锁前停止SQL线程来避免锁死现象。备选方案2:假定半夜写压力不高,轮询线程信息,发现备份线程锁请求被锁死时,主动登录数据库kill掉加锁线程并尝试重新备份),锁死现象如下

3.2.2. 全量复制加入集群


  • 参考3.1.2小节
  • 无新节点全量复制加入集群时的qps曲线图


  • 有新节点全量复制加入集群时的qps曲线图



PS:全量复制新加节点会触发流控,导致性能陡降,关闭流控性能可恢复到正常状态,但需要所有节点同时关闭才生效
  1. root@localhost : (none) 06:52:16> set global group_replication_flow_control_mode=DISABLED;Query OK, 0 rows affected (0.01 sec)
复制代码
3.3. 单节点crash的恢复



做一些必要的检查之后,尝试直接以常规方式拉起节点,如果不能正常拉起或者crash节点数据丢失,则通过备份进行恢复(详细步骤参考3.1.3小节)。
3.4. 多数节点crash的恢复


两种方式(针对至少有一个节点的实例可登陆,且集群不可用的情况)

  • 如果crash节点能够原地恢复(带着crash之前的数据直接拉起实例),则集群可以正常恢复到可读写状态(即存活节点恢复到>=N/2+1个,且都正确重新加入到集群中)
  • 如果所有crash节点数据丢失,则无法重新加入集群,此时如果要恢复集群,需要在存活的节点上停止集群复制插件,使其脱离集群变为可读写状态,然后再恢复其他节点(使用xtrabackup备份存活节点数据做恢复)

3.4.1. crash节点数据未丢失且可以原地恢复

<ul class="list-paddingleft-2">
集群存活节点数 select * from performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 0a1e8349-2e87-11e8-8c9f-525400bdd1f2 | node3      |        3306 | ONLINE      || group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | UNREACHABLE  || group_replication_applier | 506759a9-2e83-11e8-b454-525400c33752 | node2      |        3306 | UNREACHABLE  |+---------------------------+--------------------------------------+-------------+-------------+--------------+3 rows in set (0.00 sec)# 尝试读写操作## 读操作root@localhost : (none) 10:15:10> use sbtestDatabase changedroot@localhost : sbtest 10:15:52> select * from sbtest1 limit 1;+----+---------+----------------------------------------------------------------------+-------------------------------------------------------------+| id | k      | c                                                                                                                      | pad                                                        |+----+---------+-----------------------------------------------------------------------+-------------------------------------------------------------+|  1 | 2507307 | 68487932199-96439406143-93774651418-41631865787-96406072701-20604855487-25459966574-28203206787-41238978918-19503783441 | 22195207048-70116052123-74140395089-76317954521-98694025897 |+----+---------+------------------------------------------------------------------------+-------------------------------------------------------------+1 row in set (0.01 sec)## 写操作root@localhost : sbtest 10:25:43> delete from sbtest1 where id=1;  # 写操作被阻塞!!不是报错......[/code]

  • 另起一个mysql客户端,登录第三个节点实例中停止组复制插件
  1. # 存活节点停止组复制插件root@localhost : (none) 11:51:15> stop group_replication;Query OK, 0 rows affected (1 min 27.08 sec)root@localhost : sbtest 11:52:10> set global read_only=1;set global super_read_only=1;Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)# 可以看到未提交事务被回滚root@localhost : sbtest 11:29:02> delete from sbtest1 where id=1;......ERROR 3101 (HY000): Plugin instructed the server to rollback the current transaction.
复制代码

  • 第三个节点(存活节点)重新启动组复制插件
  1. root@localhost : (none) 12:30:20> set global group_replication_bootstrap_group=ON;Query OK, 0 rows affected (0.00 sec)root@localhost : (none) 12:33:25> start group_replication;Query OK, 0 rows affected (2.04 sec)root@localhost : (none) 12:33:29> set global group_replication_bootstrap_group=ON;Query OK, 0 rows affected (0.00 sec)root@localhost : sbtest 12:28:31> set global read_only=0;set global super_read_only=0; Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)
复制代码

  • 现在,直接拉起被强杀的两个节点
  1. mysqld_safe --defaults-file=/etc/my.cnf &
复制代码

  • 查看集群状态
  1. # 其他两个节点的状态已经转为onlineroot@localhost : (none) 12:35:07> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 0a1e8349-2e87-11e8-8c9f-525400bdd1f2 | node3      |        3306 | ONLINE      || group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | ONLINE      || group_replication_applier | 506759a9-2e83-11e8-b454-525400c33752 | node2      |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+3 rows in set (0.00 sec)
复制代码
PS:MGR中一旦出现多数节点crash,即使在datadir中数据未丢失也不能直接拉起crash节点(集群节点内的残留事务造成的数据冲突可能导致整个集群中所有节点的组复制插件异常停止),需要登录到存活节点先把集群复制插件停止,然后重新启动集群复制插件之后,再拉起crash节点
3.4.2. crash节点数据丢失

<ul class="list-paddingleft-2">
集群存活节点数 select * from performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 0a1e8349-2e87-11e8-8c9f-525400bdd1f2 | node3      |        3306 | ONLINE      || group_replication_applier | 2d623f55-2111-11e8-9cc3-0025905b06da | node1      |        3306 | UNREACHABLE  || group_replication_applier | 506759a9-2e83-11e8-b454-525400c33752 | node2      |        3306 | UNREACHABLE  |+---------------------------+--------------------------------------+-------------+-------------+--------------+3 rows in set (0.00 sec)# 尝试读写操作## 读操作root@localhost : (none) 10:15:10> use sbtestDatabase changedroot@localhost : sbtest 10:15:52> select * from sbtest1 limit 1;+----+---------+--------------------------------------------------------------------------------------------+-------------------------------------------------------------+| id | k      | c                                                                                                                      | pad                                                        |+----+---------+---------------------------------------------------------------------------------------------+-------------------------------------------------------------+|  1 | 2507307 | 68487932199-96439406143-93774651418-41631865787-96406072701-20604855487-25459966574-28203206787-41238978918-19503783441 | 22195207048-70116052123-74140395089-76317954521-98694025897 |+----+---------+-----------------------------------------------------------------------------------------------+-------------------------------------------------------------+1 row in set (0.01 sec)## 写操作root@localhost : sbtest 10:25:43> delete from sbtest1 where id=1;  # 写操作被阻塞!!不是报错......[/code]

  • 另起一个mysql客户端,登录第三个节点实例中停止组复制插件
  1. # 存活节点停止组复制插件root@localhost : (none) 11:51:15> stop group_replication;Query OK, 0 rows affected (1 min 27.08 sec)root@localhost : sbtest 11:52:10> set global read_only=1;set global super_read_only=1;Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)
复制代码

  • 第三个节点(存活节点)重新启动组复制插件
  1. root@localhost : (none) 12:30:20> set global group_replication_bootstrap_group=ON;Query OK, 0 rows affected (0.00 sec)root@localhost : (none) 12:33:25> start group_replication;Query OK, 0 rows affected (2.04 sec)root@localhost : (none) 12:33:29> set global group_replication_bootstrap_group=ON;Query OK, 0 rows affected (0.00 sec)root@localhost : sbtest 12:28:31> set global read_only=0;set global super_read_only=0; Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)
复制代码

  • 现在,如果数据量不大,则可以在配置好my.cnf之后直接拉起实例,通过全量binlog复制加入集群(详细步骤可参考3.1.2小节),如果数据量较大,则使用xtrabackup备份方式恢复(详细步骤可参考3.1.3小节)
PS:

  • MGR集群多数节点crash之后,剩下的节点可以对外提供读服务,但不可提供写服务,这与MGC、PXC不同(这两种集群多数节点crash之后,读写服务都不能提供)
  • MGR集群多数节点crash之后,剩下的节点如果接受到写请求,直接阻塞,而不是报错返回,需要客户端自行断开连接,且断开连接之后,在数据库中对应的事务处于COMMIT状态,不能跟随客户端断开而自行回滚,需要人工干预
  • 停止复制插件的方式使得节点脱离集群时,节点当前所有未提交事务会被强制回滚(MGR组复制插件可以stop xxx;start xxx;的方式重启,所以不需要像MGC、PXC那样必须重启实例来重启集群,也就不需要额外的备份操作了)
3.5. 整个集群crash的恢复


  • 两种方式
  • 使用备份恢复
  • 使用crash节点的datadir数据卷进行恢复
3.5.1. 使用备份恢复


  • 详细步骤参考3.1.3小节,第一个节点以集群方式启动,其他节点使用备份恢复数据之后直接拉起
3.5.2. 使用crash节点的datadir数据卷进行恢复


  • 使用crash节点的datadir数据卷进行恢复需要保证至少有一个crash节点的物理机或kvm可访问(容器环境需要保证至少有一个crash节点对应的node可访问)
  • 下面使用sysbench对任意一个节点加压
  1. sysbench --db-driver=mysql --time=3600 --threads=128 --report-interval=1 --mysql-socket=/home/mysql/data/mysqldata1/sock/mysql.sock --mysql-port=3306 --mysql-user=qbench --mysql-password=qbench --mysql-db=sbtest --tables=8 --table-size=5000000 oltp_insert --db-ps-mode=disable run
复制代码

  • 同时强杀所有节点的数据库进程(模拟所有节点同时crash)
  1. [root@localhost ~]# ssh 10.10.30.162 "killall -9 mysqld mysqld_safe 2> /dev/null &";ssh 10.10.30.163 "killall -9 mysqld mysqld_safe &> /dev/null &";ssh 10.10.30.164 "killall -9 mysqld mysqld_safe &> /dev/null &" 
复制代码

  • 以非集群方式启动所有节点,并查看所有节点的GTID
  1. # 第一个节点[root@localhost binlog]# mysqld_safe --defaults-file=/etc/my.cnf --loose-group_replication_start_on_boot=off --super-read-only --read-only &root@localhost : (none) 05:18:00> show master status\G;*************************** 1. row ***************************            File: mysql-bin.000124        Position: 270    Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 0a1e8349-2e87-11e8-8c9f-525400bdd1f2:1-148826,2d623f55-2111-11e8-9cc3-0025905b06da:1-2,aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-648795071 row in set (0.00 sec)# 第二个节点mysqld_safe --defaults-file=/etc/my.cnf --loose-group_replication_start_on_boot=off --super-read-only --read-only &root@localhost : (none) 05:21:04> show master status\G;*************************** 1. row ***************************            File: mysql-bin.000002        Position: 190    Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 0a1e8349-2e87-11e8-8c9f-525400bdd1f2:1-148826,2d623f55-2111-11e8-9cc3-0025905b06da:1-2,aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-648640651 row in set (0.00 sec)......# 第三个节点mysqld_safe --defaults-file=/etc/my.cnf --loose-group_replication_start_on_boot=off --super-read-only --read-only &root@localhost : (none) 05:21:43> show master status\G;*************************** 1. row ***************************            File: mysql-bin.000004        Position: 190    Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 0a1e8349-2e87-11e8-8c9f-525400bdd1f2:1-148826,2d623f55-2111-11e8-9cc3-0025905b06da:1-2,aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-648699151 row in set (0.00 sec)......
复制代码

  • 从上述信息中,可以看到第一个节点的GTID最大(注意这里主要看集群的UUID对应的GTID,而不是节点的UUID对应的GTID号),事务号为64879507,下面在第一个节点中,拉起组复制集群,并开放对外提供读写服务
  1. root@localhost : (none) 12:30:20> set global group_replication_bootstrap_group=ON;Query OK, 0 rows affected (0.00 sec)root@localhost : (none) 12:33:25> start group_replication;Query OK, 0 rows affected (2.04 sec)root@localhost : (none) 12:33:29> set global group_replication_bootstrap_group=ON;Query OK, 0 rows affected (0.00 sec)root@localhost : (none) 05:27:03> select * from performance_schema.replication_group_members where MEMBER_ID=@@server_uuid;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 0a1e8349-2e87-11e8-8c9f-525400bdd1f2 | node1       |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+1 row in set (0.00 sec)root@localhost : sbtest 12:28:31> set global read_only=0;set global super_read_only=0; Query OK, 0 rows affected (0.00 sec)
复制代码

  • 其他节点加入集群,并对外提供读写服务
  1. root@localhost : (none) 12:33:25> start group_replication;Query OK, 0 rows affected (2.04 sec)root@localhost : (none) 05:29:06> select * from performance_schema.replication_group_members where MEMBER_ID=@@server_uuid;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 5d78a458-30d2-11e8-a66f-5254002a54f2 | node2       |        3306 | RECOVERING  |+---------------------------+--------------------------------------+-------------+-------------+--------------+1 row in set (0.00 sec)......root@localhost : (none) 05:30:12> select * from performance_schema.replication_group_members where MEMBER_ID=@@server_uuid;+---------------------------+--------------------------------------+-------------+-------------+--------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+-------------+-------------+--------------+| group_replication_applier | 19f71b6a-30d3-11e8-a724-525400c33752 | node2      |        3306 | ONLINE      |+---------------------------+--------------------------------------+-------------+-------------+--------------+1 row in set (0.00 sec)# 等待集群状态为online之后,开放对外读写服务root@localhost : sbtest 12:28:31> set global read_only=0;set global super_read_only=0; Query OK, 0 rows affected (0.00 sec)
复制代码


写在最后,小编已经把本文完整版与波老师上一篇《MariaDB Galera Cluster(MGC/PXC)重要参数、状态解读大全》两本电子书整理到一起,有兴趣的同学可以扫下方二维码联系助教获取


扫码添加助教



END





扫码加入MySQL技术Q群(群号:529671799)   



戳“阅读原文”了解MGR精品课
                                                                                                                                          
                                                    
  • 点赞                        
  • 收藏                        
  • 分享                                                                                                                        
  •                                                         
                                      
    • 文章举报                           
                                                
                                                                        
                                            
                                                        老叶茶馆_                                                                发布了246 篇原创文章 · 获赞 76 · 访问量 47万+                                                                                            私信                                                            关注
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x




上一篇:RBAC系统经典五张表
下一篇:mysql入门
回复

使用道具 举报

0

主题

11

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
发表于 2020-1-20 16:32:25 | 显示全部楼层
感谢楼主的无私分享![www.12360.co]
回复

使用道具 举报

22

主题

27

帖子

191

积分

注册会员

Rank: 2

积分
191
发表于 2020-1-22 03:44:58 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享![www.12360.co]
回复

使用道具 举报

0

主题

9

帖子

199

积分

注册会员

Rank: 2

积分
199
发表于 2020-1-22 19:14:04 | 显示全部楼层
这东西我收了!谢谢楼主![www.12360.co]
回复

使用道具 举报

0

主题

22

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
发表于 2020-1-22 22:37:53 | 显示全部楼层
楼主,大恩不言谢了![www.12360.co]
回复

使用道具 举报

0

主题

17

帖子

367

积分

中级会员

Rank: 3Rank: 3

积分
367
发表于 2020-1-23 22:34:58 | 显示全部楼层
既然你诚信诚意的推荐了,那我就勉为其难的看看吧![www.12360.co]
回复

使用道具 举报

0

主题

11

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
发表于 2020-1-25 04:37:19 | 显示全部楼层
楼主太厉害了!楼主,I*老*虎*U![www.12360.co]
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

12360技术网

GMT+8, 2020-2-18 07:15 , Processed in 0.279493 second(s), 33 queries .

本网站内容收集于互联网,Www.12360.Co不承担任何由于内容的合法性及健康性所引起的争议和法律责任。 欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。

© 2019-2020 Www.12360.Co

快速回复 返回顶部 返回列表