vlambda博客
学习文章列表

Mysql MGR单主模式的简单配置

[
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数据库初始化配置
]


编辑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#多主模式下,强制检查每一个实例是否允许该操作


[
Mysql MGR配置
]


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;”


验证是否加入成功

Mysql MGR单主模式的简单配置


可以看到,一个单主模式的MGR已经配置成功。下面来做一些同步验证。


同步验证:

主库操作

主库(192.168.100.111)建库建表,并插入数据:

Mysql MGR单主模式的简单配置

Mysql MGR单主模式的简单配置


备库验证

192.168.100.112


192.168.100.110

可以看到,在主库执行的操作均在组内其他节点得以回放,验证成功。

[
总结展望  ]

篇幅有限,关于MGR的简单介绍只能到这里,更多关于MGR特性的演示,只能后续再给大家呈现了,希望有兴趣的小伙伴一起交流学习。