mysql组复制之多主模式(全同步)

组复制之多主模式

组复制是一种可用于实现容错系统的技术。 复制组是一个通过消息传递相互交互的 server 集群。通信层提供了原子消息(atomicmessage)和完全有序信息交互等保障机制,实现了基于复制协议的多主更新
复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。句话说,对于任何 RW 事务,提交操作并不是由始发 server 单向决定的,而是由组来决定是否提交。准确地说,在始发 server 上,当事务准备好提交时,该 server 会广播写入值(已改变的行)和对应的写入集(已更新的行的唯一标识符)。然后会为该事务建立一个全局的顺序。最终,这意味着所有 server 成员以相同的顺序接收同一组事务。因此,所有 server 成员以相同的顺序应用相同的更改,以确保组内一致。
在不同 server 上并发执行的事务可能存在冲突。 根据组复制的冲突检测机制,对两个不同的并发事务的写集合进行检测。如在不同的 server 成员执行两个更新同一行的并发事务,则会出现冲突。排在最前面的事务可以在所有 server 成员上提交,第二个事务在源serevr上会滚,并在组中的其他 server 上删除。 这就是分布式的先提交当选规则。
最后,组复制是一种 share-nothing 复制方案,其中每个 server 成员都有自己的完整数据副本。
下图描述了 MySQL 组复制协议,并通过将其与 MySQL 复制(MySQL 半同步复制)进行比较,
可以看到一些差异。 需要注意的是,这个图片中不包含一些基本共识和 Paxos 相关的信息。
图解:
在这里插入图片描述
实验环境:

主机 ip
server3(master) 172.25.5.3
server4(master) 172.25.5.4
server5(master) 172.25.5.5

furewalld and selinux disabled

配置

配置前把以前有过mysql配置的把mysql回到初态(把mysql主机mysql服务关掉再把/var/lib/mysql的文件删掉)
server3:

[root@server3 mnt]# vim /etc/my.cnf
server_id=1
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="39e01315-35df-46ed-adfe-ab9bf59e2126"  ### uuid  可用uuidgen命令生成
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="172.25.5.3:24901"
loose-group_replication_group_seeds="172.25.5.3:24901,172.25.5.4:24901,172.25.5.5:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="127.0.0.1,172.25.5.0/24"
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF

[root@server3 mnt]# systemctl start mysqld  ##开启mysql服务

[root@server3 mnt]# cat /var/log/mysqld.log |grep password  ##查看初始密码
[root@server3 mnt]# mysql -p   ##登陆mysql
mysql> alter user root@localhost identified by 'Asimov+123';##初始化修改密码
mysql> SET SQL_LOG_BIN=0;    #关闭二进制日志
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Asimov+123';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;   #启动二进制日志
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Asimov+123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; 
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
mysql> SELECT * FROM performance_schema.replication_group_members; #需注意本地解析,若解析不对,则会一直显示RECOVERING状态
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | b8ba4ec7-380d-11e9-9524-525400002cfa | server3     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

Server4:
若是之前安装过数据库就删除所有数据,若没有安装过直接安装mysql即可

[root@server4 lib]# vim /etc/my.cnf  (和server3基本一致)
server_id=2
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="39e01315-35df-46ed-adfe-ab9bf59e2126"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="172.25.5.4:24901"
loose-group_replication_group_seeds="172.25.5.3:24901,172.25.5.4:24901,172.25.5.5:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="127.0.0.1,172.25.5.0/24"
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF

[root@server4 lib]# systemctl start mysqld  开启mysql

[root@server4 lib]# cat /var/log/mysqld.log |grep password  ##查看初始密码
[root@server4 lib]# mysql -p     ##登陆数据库
mysql> alter user root@localhost identified by 'Asimov+123';  ##修改密码
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Asimov+123';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Asimov+123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> reset master
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 6bc52e9a-380f-11e9-868c-525400db3958 | server4     |        3306 | ONLINE       |
| group_replication_applier | b8ba4ec7-380d-11e9-9524-525400002cfa | server3     |        3306 | ONLINE       |
| group_replication_applier | f532cdfa-380f-11e9-a732-5254001d5e32 | server5     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

Server5(若是之前安装过数据库就删除所有数据,若没有安装过直接安装mysql即可)
和server4配置基本一致,就是配置文件server_id和loose-group_replication_local_address改一下即可

[root@server5 plugin]# vim /etc/my.cnf
server_id=3
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="39e01315-35df-46ed-adfe-ab9bf59e2126"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="172.25.5.5:24901"
loose-group_replication_group_seeds="172.25.5.3:24901,172.25.5.4:24901,172.25.5.5:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="127.0.0.1,172.25.5.0/24"
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF

[root@server5 plugin]# systemctl start mysqld

mysql> alter user root@localhost identified by 'Asimov+123';
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'Asimov+123';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Asimov+123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> reset master;
mysql> START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members; ##查看模块是否完成
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 6bc52e9a-380f-11e9-868c-525400db3958 | server4     |        3306 | ONLINE       |
| group_replication_applier | b8ba4ec7-380d-11e9-9524-525400002cfa | server3     |        3306 | ONLINE       |
| group_replication_applier | f532cdfa-380f-11e9-a732-5254001d5e32 | server5     |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+

测试

在server3插入数据:
在server4和server5均能同步到

mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO t1 VALUES (1, 'Luis');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM t1;
+----+------+
| c1 | c2   |
+----+------+
|  1 | Luis |
+----+------+

猜你喜欢

转载自blog.csdn.net/weixin_43407305/article/details/87913240