Mysql MGR单主模式的简单配置
基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证,MySQL官方在5.7.17版本正式推出组复制(MySQLGroupReplication,简称MGR),以插件形式提供,实现了分布式下数据的最终一致性,提供了高可用、高扩展、高可靠的MySQL集群服务。
MGR是一种可用于实现容错系统的技术。复制组是一个通过消息传递相互交互的Server集群,由多个Server成员组成,如上图的Master1、Master2、Master3,所有成员独立完成各自的事务。
当客户端发起一个更新事务时,该事务先在本地执行,执行完成之后就要发起对事务的提交操作。在还没有真正提交之前,需要将产生的复制写集(WRITESET)广播出去,复制到其它成员。如果冲突检测成功,组内决定该事务可以提交,其它成员可以应用,否则就回滚。
最终,所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。从MGR复制原理上看,当主节点事务提交时,辅助节点上可能还未重放该事务对应的BINLOG,因此MGR仍属于异步复制。
本次仅配置MGR的单主模式,采用了三台linux虚机:
规划
IP |
SERVER_ID |
服务端口 |
通信端口 |
192.168.100.110 |
1 |
3306 |
10086 |
192.168.100.111 |
2 |
3306 |
10086 |
192.168.100.112 |
3 |
3306 |
10086 |
编辑mysql参数文件,3个节点除了server_id、loose-group_replication_local_address参数不一样外,其他保持一致,因为仅演示,参数仅配置需要的参数。
192.168.100.110:
[mysqld] datadir=/data/data3306 socket=/data/data3306/mysql3306.sock user=mysql log-bin=mysql-bin server-id = 1 port=3306 pid-file=/data/data3306/pid3306.pid innodb-buffer-pool-size=300m basedir=/opt/mysql log-error=/data/data3306/3306.err.log sync_binlog = 1 auto-increment-increment = 2 auto-increment-offset = 1 slave-skip-errors = all explicit_defaults_for_timestamp=ON 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 #super_read_only=ON slave_parallel_type=logical_clock slave_parallel_workers=16 slave_preserve_commit_order=ON transaction_write_set_extraction=XXHASH64 loose-group_replication_single_primary_mode = true loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=off loose-group_replication_local_address= "mysql-master:10086" loose-group_replication_group_seeds= "mysql-master:10086,mysql-slave:10086,Oracle19c:10086" loose-group_replication_bootstrap_group= off loose-group_replication_enforce_update_everywhere_checks = false |
192.168.100.111:
server-id = 2 loose-group_replication_local_address= "mysql-slave:10086" |
192.168.100.110:
server-id = 3 loose-group_replication_local_address= "Oracle19c:10086"——无视乱入的主机名。。。 |
*参数说明
关于GTID及日志信息记录相关参数:
gtid_mode=on打开GTID特性
enforce-gtid-consistency=on
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_format=ROW 必须使用基于行的格式
binlog_checksum=NONE 禁用二进制日志事件校验和
关于MGR相关参数说明:
transaction_write_set_extraction #记录事务的算法
group_replication_start_on_boot#是否随服务器启动而自动启动组复制
group_replication_bootstrap_group#引导组成员的组,这个用于第一次搭建MGR跟重新搭建MGR的时候使用
group_replication_group_name #此GROUP的名字,必须是一个有效的UUID,以此来区分整个内网里边的各个不同的GROUP
group_replication_single_primary_mode#是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读
group_replication_enforce_update_everywhere_checks#多主模式下,强制检查每一个实例是否允许该操作
MGR插件安装(各库均执行)
mysql>INSTALL PLUGIN group_replication SONAME 'group_replication.so'; |
设置复制账号(各库均执行)
SET SQL_LOG_BIN=0; CREATE USER repl@'%' IDENTIFIED BY '123'; GRANT REPLICATION SLAVE ON *.* TO repl@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123' FOR CHANNEL 'group_replication_recovery'; |
启动MGR主库
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; |
其他节点加入MGR
START GROUP_REPLICATION; |
*设置复制账号时,应全部操作不写bin_log,即可不需要使用“setglobal group_replication_allow_local_disjoint_gtids_join=ON;”
验证是否加入成功
可以看到,一个单主模式的MGR已经配置成功。下面来做一些同步验证。
同步验证:
主库操作
主库(192.168.100.111)建库建表,并插入数据:
备库验证
192.168.100.112:
192.168.100.110:
可以看到,在主库执行的操作均在组内其他节点得以回放,验证成功。
篇幅有限,关于MGR的简单介绍只能到这里,更多关于MGR特性的演示,只能后续再给大家呈现了,希望有兴趣的小伙伴一起交流学习。