MySQL8.0配置MGR
环境
CentOS 7
MySQL 8.0
数据库节点:
192.168.6.151 node1 server-id为1
192.168.6.152 node2 server-id为2
192.168.6.153 node3 server-id为3
安装MySQL8.0
yum localinstall -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm yum install -y mysql-community-server systemctl start mysqld systemctl status mysqld systemctl enable mysqld grep 'temporary password' /var/log/mysqld.log mysql -u root -p
修改密码
set global validate_password.policy=0; set global validate_password.length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; flush privileges; exit;
配置Host
vim /etc/hosts
192.168.6.151 node1 192.168.6.152 node2 192.168.6.153 node3
修改My.cnf配置文件
在node1节点,/etc/my.cnf 修改
[mysqld] datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock symbolic-links = 0 log-error = /var/log/mysqld.log pid-file = /var/run/mysqld/mysqld.pid #开启GTID,必须开启 gtid_mode=ON #强制GTID的一致性 enforce_gtid_consistency=ON #binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row binlog_format=row #server-id必须是唯一的 server-id = 1 #MGR使用乐观锁,所以官网建议隔离级别是RC,减少锁粒度 transaction_isolation = READ-COMMITTED #因为集群会在故障恢复时互相检查binlog的数据, #所以需要记录下集群内其他服务器发过来已经执行过的binlog,按GTID来区分是否执行过. log-slave-updates=1 #binlog校验规则,5.6之后的高版本是CRC32,低版本都是NONE,但是MGR要求使用NONE binlog_checksum=NONE #基于安全的考虑,MGR集群要求复制模式要改成slave记录记录到表中,不然就报错 master_info_repository=TABLE #同上配套 relay_log_info_repository=TABLE #组复制设置 #记录事务的算法,官网建议设置该参数使用 XXHASH64 算法 transaction_write_set_extraction = XXHASH64 #相当于此GROUP的名字,是UUID值,不能和集群内其他GTID值的UUID混用,可用uuidgen来生成一个新的, #主要是用来区分整个内网里边的各个不同的GROUP,而且也是这个group内的GTID值的UUID loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446' #IP地址白名单,默认只添加127.0.0.1,不会允许来自外部主机的连接,按需安全设置 loose-group_replication_ip_whitelist = '127.0.0.1/8,192.168.6.0/24' #是否随服务器启动而自动启动组复制,不建议直接启动,怕故障恢复时有扰乱数据准确性的特殊情况 loose-group_replication_start_on_boot = OFF #本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口 loose-group_replication_local_address = '192.168.6.151:33081' #需要接受本MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口 loose-group_replication_group_seeds = '192.168.6.151:33081,192.168.6.152:33081,192.168.6.153:33081' #开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启, loose-group_replication_bootstrap_group = OFF #是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了 loose-group_replication_single_primary_mode = ON #多主模式下,强制检查每一个实例是否允许该操作,如果不是多主,可以关闭 loose-group_replication_enforce_update_everywhere_checks = on
将node1的文件发送到node2和node3
rsync -e "ssh -p22" -avpgolr /etc/my.cnf root@192.168.6.152:/etc/ rsync -e "ssh -p22" -avpgolr /etc/my.cnf root@192.168.6.153:/etc/
修改server-id和loose-group_replication_local_address的相关值
重启mysql
systemctl restart mysqld
安装插件
mysql -uroot -p123456
install PLUGIN group_replication SONAME 'group_replication.so'; show plugins;
配置账号
SET SQL_LOG_BIN=0; SET GLOBAL validate_password.policy=0; SET GLOBAL validate_password.length=1; CREATE USER repl@'%' IDENTIFIED BY 'repl'; GRANT REPLICATION SLAVE ON *.* TO repl@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
启动MGR单主模式
在node1节点,启动引导,进入mysql服务端
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; SELECT * FROM performance_schema.replication_group_members;
在node2\node3节点,进入mysql服务端
START GROUP_REPLICATION; SELECT * FROM performance_schema.replication_group_members;
切换到MGR多主模式
在所有数据库节点,执行
stop group_replication; set global group_replication_single_primary_mode=OFF; set global group_replication_enforce_update_everywhere_checks=ON;
在node1节点,执行
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
在node2、node3节点,执行
START GROUP_REPLICATION;
查看MGR信息
SELECT * FROM performance_schema.replication_group_members;
故障切换
多主模式
在node3上模拟故障
systemctl stop mysqld
在其它节点,如node1上,查询MGR信息
可以看到其它节点正常进行同步。
在node3节点故障恢复
systemctl start mysqld
需要手动激活该节点的组复制功能(注意配置文件my.cnf中相关设置
START GROUP_REPLICATION;
单主模式
切换回单主模式
所有数据库节点停止MGR
stop group_replication; set global group_replication_enforce_update_everywhere_checks=OFF; set global group_replication_single_primary_mode=ON;
选择node1节点,作为主库
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
其它节点(node2、node3),执行
START GROUP_REPLICATION;
查询MGR状态
SELECT * FROM performance_schema.replication_group_members;
在主节点node1模拟故障,在node2查询MGR状态
可以看到主节点挂了,通过选举程序从从库节点中选择一个作为主节点。
node1故障恢复之后,需要手动激活该节点的组复制功能
START GROUP_REPLICATION;