1. 程式人生 > 實用技巧 >MySQL MGR原理及部署

MySQL MGR原理及部署

轉載自:https://www.cnblogs.com/sallyluo/p/11760304.html

MySQL 5.7 MGR

1、背景

主從複製,一主多從,主庫提供讀寫功能,從庫提供只讀功能。當一個事務在master 提交成功時,會把binlog檔案同步到從庫伺服器上落地為relay log給slave端執行,這個過程主庫是不考慮從庫是否有接收到binlog檔案,有可能出現這種情況,當主庫commit一個事務後,資料庫發生宕機,剛好它的binlog還沒來得及傳送到slave端,這個時候選任何一個slave端都會丟失這個事務,造成資料不一致情況。 為了避免出現主從資料不一致的情況,MySQL引入了半同步複製,新增多了一個從庫反饋機制,即半同步複製。這個有兩種方式設定:

  • 主庫執行完事務後,同步binlog給從庫,從庫ack反饋接收到binlog,主庫提交commit,反饋給客戶端,釋放會話;
  • 主庫執行完事務後,主庫提交commit ,同步binlog給從庫,從庫ack反饋接收到binlog,反饋給客戶端,釋放會話;

但是,雖然滿足了一主多從,讀寫分析,資料一致,但是,依舊有兩個弊端:

  • 寫操作只能在master上;
  • 如果master宕機,需要人為選擇新主並重新給其他的slave端執行change master;

為了解決一系列問題,官方推出了MySQL Group Replication,從group replication釋出以後,就有3種方法來實現MySQL的高可用叢集:

  • 非同步複製
  • 半同步複製
  • group replication

2、Group Replication原理

MySQL Group Replication有兩種模式,單主模式single-primary mode和多主模式multi-primary mode,在同一個group內,不允許兩種模式同時存在,並且若要切換到不同模式,必須修改配置後重新啟動叢集。

1、單主模式

在單主模式下,只有一個節點可以讀寫,其他節點提供只讀服務。單主模式下,該引數 _ 必須被設定為 FALSE ,當主節點宕掉,自動會根據伺服器的server_uuid變數和group_replication_member_weight變數值,選擇下一個slave誰作為主節點,group_replication_member_weight的值最高的成員被選為新的主節點,該引數預設為50,建議可以在節點上設定不同值;在group_replication_member_weight值相同的情況下,group根據資料字典中 server_uuid排序,排序在最前的被選擇為主節點。

  • 單主模式中發現當前的主伺服器,該值VARIABLE_VALUE為例項節點的server_uuid:

select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';

2、多主模式

在mysql多主模式下,在組複製中通過Group Replication Protocol協議及Paxos協議,形成的整體高可用解決方案 同時增加了certify的概念,負責檢查事務是否允許提交,是否與其它事務存在衝突,Group Replication是由多個節點共同組成一個數據庫叢集,每個節點都可以單獨執行事務,但是read-write(rw)的操作只有在組內驗證後才可以commit,Read-only (RO)事務是不需要驗證可以立即執行,當一個事務在一個節點上提交之前,會在組內自動進行原子性的廣播,告知其他節點變更了什麼內容/執行了什麼事務,然後為該事物建立一個全域性的排序,最終,這意味著所有的伺服器都以相同的順序接收相同的事務集。因此,所有伺服器都按照相同的順序應用相同的變更集,因此它們在組中保持一致。 在多主模式下,該組的所有成員都設定為讀寫模式,在多主模式下,不支援SERIALIZABLE事務隔離級別,且不能完全支援級聯外來鍵約束。


3、配置要求和限制

  • inndb儲存引擎;
  • 每個表需要定義顯式主鍵;
  • 隔離級別:官網建議READ COMMITTED級別,不支援SERIALIZABLE隔離級別;
  • 不建議使用級聯外來鍵;
  • IPv4網路;
  • auto_increment_increment和auto_increment_offset的配置;
  • log-bin = ROW;
  • log_slave_updates = ON;
  • 開啟GTID;
  • 安裝引擎:group_replication.so;

4、搭建Mysql Group Replication

  • 基礎資訊如下:
IPportserver_idserver_uuid
172.17.0.37(A) 3306 1001 b13df29e-90b6-11e8-8d1b-525400fc3993
172.17.0.48(B) 3306 1002 1fa7b3ca-9475-11e8-a217-5254004e7cfe
172.17.0.2 (C) 3306 1003 81d824f1-90ba-11e8-a83d-52540043d75a
  • my.cnf配置檔案:

#172.17.0.37(A):

[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock

character_set_server=utf8
init_connect='SET NAMES utf8'
lower_case_table_names = 1
# Disabling symbolic-links is rmended to prevent assorted security risks
symbolic-links=0
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid

# Group Replication
server_id = 1001
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction ='XXHASH64'
loose-group_replication_group_name = 'b13df29e-90b6-11e8-8d1b-525400fc3996'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '172.17.0.37:10061'
loose-group_replication_group_seeds ='172.17.0.37:10061,172.17.0.2:10063,172.17.0.48:10062'
loose-group_replication_bootstrap_group = off
group_replication_ip_whitelist = '172.17.0.37,172.17.0.2,172.17.0.48'

report_host='172.17.0.37'
log_timestamps='system'
plugin-dir=/usr/local/mysql/plugin



--------------------------------------------------------------------------------
172.17.0.48(B):

[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock

character_set_server=utf8
init_connect='SET NAMES utf8'
lower_case_table_names = 1
# Disabling symbolic-links is rmended to prevent assorted security risks
symbolic-links=0
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid

# Group Replication
server_id = 1002
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction ='XXHASH64'
loose-group_replication_group_name = 'b13df29e-90b6-11e8-8d1b-525400fc3996'
loose-group_replication_start_on_boot = off

loose-group_replication_local_address = '172.17.0.48:10062'
loose-group_replication_group_seeds ='172.17.0.37:10061,172.17.0.2:10063,172.17.0.48:10062'
loose-group_replication_bootstrap_group = off
group_replication_ip_whitelist = '172.17.0.37,172.17.0.2,172.17.0.48'

log_timestamps='system'
report_host='172.17.0.48'
plugin-dir=/usr/local/mysql/plugin


--------------------------------------------------------------------------------
172.17.0.2 (C):

[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
character_set_server=utf8
init_connect='SET NAMES utf8'
lower_case_table_names = 1
# Disabling symbolic-links is rmended to prevent assorted security risks
symbolic-links=0
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid

# Group Replication
server_id = 1003
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW

transaction_write_set_extraction ='XXHASH64'
loose-group_replication_group_name = 'b13df29e-90b6-11e8-8d1b-525400fc3996'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '172.17.0.2:10063'
loose-group_replication_group_seeds ='172.17.0.37:10061,172.17.0.2:10063,172.17.0.48:10062'

loose-group_replication_bootstrap_group = off
group_replication_ip_whitelist = '172.17.0.37,172.17.0.2,172.17.0.48'

log_timestamps='system'
report_host='172.17.0.2'
plugin-dir=/usr/local/mysql/plugin

  • 建立複製賬號:
A、B、C:
grant replication slave on *.* to rpl_user@'%' identified by 'rpl_pass';
  • 安裝引擎:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';

show plugins;

1、單主模式(set global groupreplicationsingleprimarymode =ON):

  • 配置Group:
172.17.0.37:

mysql> set global group_replication_single_primary_mode=on;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.07 sec)

mysql> start group_replication;
Query OK, 0 rows affected, 1 warning (2.08 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)



172.17.0.48和172.17.0.2:
mysql> set global group_replication_single_primary_mode=on;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.05 sec)

mysql> start group_replication;
Query OK, 0 rows affected (5.81 sec)



172.17.0.37:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> show variables like '%read_on%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)


mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | b13df29e-90b6-11e8-8d1b-525400fc3993 |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | b13df29e-90b6-11e8-8d1b-525400fc3993 |
+----------------------------------+--------------------------------------+
1 row in set (0.01 sec)

mysql> show variables like '%group_replication_member_weight%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| group_replication_member_weight | 80    |
+---------------------------------+-------+
1 row in set (0.00 sec)


172.17.0.48:

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> show variables like '%read_on%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | ON    |
| super_read_only       | ON    |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)


mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | b13df29e-90b6-11e8-8d1b-525400fc3993 |
+----------------------------------+--------------------------------------+
1 row in set (0.01 sec)

mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | 1fa7b3ca-9475-11e8-a217-5254004e7cfe |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%group_replication_member_weight%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| group_replication_member_weight | 50    |
+---------------------------------+-------+
1 row in set (0.00 sec)






172.17.0.2:

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> show variables like '%read_on%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | ON    |
| super_read_only       | ON    |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)


mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | b13df29e-90b6-11e8-8d1b-525400fc3993 |
+----------------------------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | 81d824f1-90ba-11e8-a83d-52540043d75a |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%group_replication_member_weight%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| group_replication_member_weight | 100   |
+---------------------------------+-------+
1 row in set (0.01 sec)

單主故障處理

(1)非主資料庫掛掉
172.17.0.48:
[root@VM_0_48_centos ~]# service mysqld stop
Shutting down MySQL............. SUCCESS!


172.17.0.37/172.17.0.2:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | b13df29e-90b6-11e8-8d1b-525400fc3993 |
+----------------------------------+--------------------------------------+

172.17.0.48:
mysql> use sissi_01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_sissi_01 |
+--------------------+
| tab                |
+--------------------+
1 row in set (0.00 sec)

mysql> select * from tab;
+----+------+
| id | name |
+----+------+
|  1 | NULL |
|  2 | NULL |
|  7 | NULL |
|  8 | NULL |
|  9 | NULL |
| 10 | NULL |
| 13 | aa   |
| 20 | aa   |
| 27 | aa   |
| 41 | bb   |
| 42 | cc   |
| 47 | ddd  |
| 54 | ee   |
| 61 | ff   |
| 68 | gg   |
| 75 | hh   |
| 76 | hh   |
| 77 | hh   |
| 78 | ii   |
| 79 | ggw  |
| 80 | cccc |
| 81 | coco |
| 84 | kk   |
| 90 | kk2  |
| 96 | kk4  |
+----+------+
25 rows in set (0.00 sec)

mysql> insert into tab select 97,'tencent';
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0
mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
+----+---------+
26 rows in set (0.00 sec)


172.17.0.2:
mysql> select * from tab;
ERROR 1046 (3D000): No database selected
mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
+----+---------+
26 rows in set (0.00 sec)

172.17.0.48:
[root@VM_0_48_centos ~]# service mysqld start
Starting MySQL. SUCCESS!
mysql> select * from performance_schema.replication_group_members;
+---------------------------+-----------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+-----------+-------------+-------------+--------------+
| group_replication_applier |           |             |        NULL | OFFLINE      |
+---------------------------+-----------+-------------+-------------+--------------+
1 row in set (0.00 sec)

mysql> set global group_replication_single_primary_mode=on;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.11 sec)

mysql> start group_replication;
Query OK, 0 rows affected (3.27 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
+----+---------+
26 rows in set (0.00 sec)
(2)主資料庫掛掉
172.17.0.37:
[root@VM_0_37_centos ~]# service mysqld stop
Shutting down MySQL............ SUCCESS!

172.17.0.2:
mysql> show variables like '%group_replication_member_weight%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| group_replication_member_weight | 100   |
+---------------------------------+-------+
1 row in set (0.01 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

mysql> show variables like '%read_on%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.01 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | 81d824f1-90ba-11e8-a83d-52540043d75a |
+----------------------------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | 81d824f1-90ba-11e8-a83d-52540043d75a |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> insert into sissi_01.tab select 98 ,'sng001';
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0
mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
+----+---------+
27 rows in set (0.00 sec)




172.17.0.48:
mysql> show variables like '%group_replication_member_weight%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| group_replication_member_weight | 50    |
+---------------------------------+-------+
1 row in set (0.01 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

mysql> show variables like '%read_on%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | ON    |
| super_read_only       | ON    |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | 81d824f1-90ba-11e8-a83d-52540043d75a |
+----------------------------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | 1fa7b3ca-9475-11e8-a217-5254004e7cfe |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
+----+---------+
27 rows in set (0.00 sec)


172.17.0.37:
[root@VM_0_37_centos ~]# service mysqld start
Starting MySQL. SUCCESS!
mysql> select * from performance_schema.replication_group_members;
+---------------------------+-----------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+-----------+-------------+-------------+--------------+
| group_replication_applier |           |             |        NULL | OFFLINE      |
+---------------------------+-----------+-------------+-------------+--------------+
1 row in set (0.00 sec)

mysql> set global group_replication_single_primary_mode=on;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.07 sec)

mysql> start group_replication;
Query OK, 0 rows affected (2.93 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
+----+---------+
27 rows in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+--------------------------------------+
| VARIABLE_NAME                    | VARIABLE_VALUE                       |
+----------------------------------+--------------------------------------+
| group_replication_primary_member | 81d824f1-90ba-11e8-a83d-52540043d75a |
+----------------------------------+--------------------------------------+
1 row in set (0.00 sec)


#### 2、多主模式(set global group_replication_single_primary_mode =OFF):

172.17.0.37/2/48:
mysql> set global group_replication_single_primary_mode =OFF;
Query OK, 0 rows affected (0.00 sec)



172.17.0.37:

mysql> set global group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start group_replication;
Query OK, 0 rows affected (2.09 sec)

mysql> set global group_replication_bootstrap_group=Off;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+----------------+
| VARIABLE_NAME                    | VARIABLE_VALUE |
+----------------------------------+----------------+
| group_replication_primary_member |                |
+----------------------------------+----------------+
1 row in set (0.00 sec)

mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)

mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
| 99 | sng002  |
+----+---------+
28 rows in set (0.00 sec)


172.17.0.2:
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> start group_replication;
Query OK, 0 rows affected (3.26 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+----------------+
| VARIABLE_NAME                    | VARIABLE_VALUE |
+----------------------------------+----------------+
| group_replication_primary_member |                |
+----------------------------------+----------------+
1 row in set (0.00 sec)

mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)

mysql> insert into sissi_01.tab select 98 ,'sng002';
ERROR 1062 (23000): Duplicate entry '98' for key 'PRIMARY'
mysql> insert into sissi_01.tab select 99 ,'sng002';
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
| 99 | sng002  |
+----+---------+
28 rows in set (0.00 sec)


172.17.0.48:
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.05 sec)

mysql> start group_replication;
Query OK, 0 rows affected (5.80 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from performance_schema.global_status WHERE VARIABLE_NAME like '%group_replication%';
+----------------------------------+----------------+
| VARIABLE_NAME                    | VARIABLE_VALUE |
+----------------------------------+----------------+
| group_replication_primary_member |                |
+----------------------------------+----------------+
1 row in set (0.00 sec)

mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.00 sec)

mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
| 99 | sng002  |
+----+---------+
28 rows in set (0.00 sec)

多主故障處理

172.17.0.48:
[root@VM_0_48_centos ~]# service mysqld stop
Shutting down MySQL............ SUCCESS!

mysql> insert into sissi_01.tab select 99 ,'sng002';
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0



172.17.0.2:
mysql> select * from sissi_01.tab;
+----+---------+
| id | name    |
+----+---------+
|  1 | NULL    |
|  2 | NULL    |
|  7 | NULL    |
|  8 | NULL    |
|  9 | NULL    |
| 10 | NULL    |
| 13 | aa      |
| 20 | aa      |
| 27 | aa      |
| 41 | bb      |
| 42 | cc      |
| 47 | ddd     |
| 54 | ee      |
| 61 | ff      |
| 68 | gg      |
| 75 | hh      |
| 76 | hh      |
| 77 | hh      |
| 78 | ii      |
| 79 | ggw     |
| 80 | cccc    |
| 81 | coco    |
| 84 | kk      |
| 90 | kk2     |
| 96 | kk4     |
| 97 | tencent |
| 98 | sng001  |
| 99 | sng002  |
+----+---------+
28 rows in set (0.00 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)


172.17.0.37:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)

mysql> insert into sissi_01.tab select 100 ,'sng003';
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from sissi_01.tab;
+-----+---------+
| id  | name    |
+-----+---------+

|  80 | cccc    |
|  81 | coco    |
|  84 | kk      |
|  90 | kk2     |
|  96 | kk4     |
|  97 | tencent |
|  98 | sng001  |
|  99 | sng002  |
| 100 | sng003  |
+-----+---------+
29 rows in set (0.00 sec)



172.17.0.48:
[root@VM_0_48_centos ~]# service mysqld start
Starting MySQL. SUCCESS!


mysql> set global group_replication_single_primary_mode =OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start group_replication;
Query OK, 0 rows affected (2.72 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 1fa7b3ca-9475-11e8-a217-5254004e7cfe | 172.17.0.48 |        3306 | ONLINE       |
| group_replication_applier | 81d824f1-90ba-11e8-a83d-52540043d75a | 172.17.0.2  |        3306 | ONLINE       |
| group_replication_applier | b13df29e-90b6-11e8-8d1b-525400fc3993 | 172.17.0.37 |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from sissi_01.tab;
+-----+---------+
| id  | name    |
+-----+---------+

|  80 | cccc    |
|  81 | coco    |
|  84 | kk      |
|  90 | kk2     |
|  96 | kk4     |
|  97 | tencent |
|  98 | sng001  |
|  99 | sng002  |
| 100 | sng003  |
+-----+---------+
29 rows in set (0.00 sec)

補充:模擬一個節點和兩個節點掛恢復是一樣的:

set global group_replication_single_primary_mode =OFF;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';

start group_replication;