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;
posted @ 2019-12-13 12:04  萧叶秋  阅读(3122)  评论(0编辑  收藏  举报