MYSQL MBR组复制

MGR简介

MGR(MySQL Group Replication)是MySQL官方在MySQL 5.7.17版本中以插件形式推出的主从复制高可用技术,它基于原生的主从复制,将各节点归入到一个组中,通过组内节点的通信协商(组通信协议基于Paxos算法),实现数据的强一致性、故障探测、冲突检测、节点加组、节点离组等等功能

一、环境准备

192.168.222.130    MGR-node1 (master1)   Centos7.7
192.168.222.120    MGR-node2 (master2)   Centos7.7
192.168.222.110    MGR-node3 (master3)   Centos7.7
192.168.222.100    ProxySQL-node         Centos7.7

更改主机名:

[root@localhost ~]# hostnamectl --static set-hostname MGR-node1
[root@localhost ~]# hostnamectl --static set-hostname MGR-node2
[root@localhost ~]# hostnamectl --static set-hostname MGR-node3
[root@localhost ~]# hostnamectl --static set-hostname ProxySQL-node

为了方便实验,关闭所有节点的防火墙

[root@MGR-node1 ~]# systemctl stop firewalld
[root@MGR-node1 ~]# firewall-cmd --state
not running
  
[root@MGR-node1 ~]# cat /etc/sysconfig/selinux |grep "SELINUX=disabled"
SELINUX=disabled
[root@MGR-node1 ~]# setenforce 0      
setenforce: SELinux is disabled
[root@MGR-node1 ~]# getenforce       
Disabled

特别要注意一个关键点: 必须设置好各个mysql节点的主机名,并且保证能通过主机名找到各成员!

必须要在每个节点的/etc/hosts里面做主机名绑定,否则后续将节点加入group组会失败!报错RECOVERING!!
[root@MGR-node1 ~]# vim /etc/hosts
192.168.222.130    MGR-node1 
192.168.222.120    MGR-node2 
192.168.222.110    MGR-node3 
192.168.222.100    ProxySQL-node 

二、安装mysql数据库

安装MySQL yum资源库

[root@MGR-node1 ~]# yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装MySQL yum资源库

[root@MGR-node1 ~]# yum install -y mysql-community-server

启动MySQL服务器和MySQL的自动启动

[root@MGR-node1 ~]# systemctl start mysqld
[root@MGR-node1 ~]# systemctl enable mysqld

查看默认登录密码

[root@MGR-node1 ~]# cat /var/log/mysqld.log|grep 'A temporary password'

使用默认密码登录

[root@MGR-node1 ~]# mysql -uroot -p'默认密码' 

设置密码策略,并修改密码

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
  
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
  
mysql> set password=password("123456");
Query OK, 0 rows affected, 1 warning (0.00 sec)
  
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

如果出现以下错误,修改密码策略

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
  
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

三、MGR组复制环境部署 (多写模式)

MGR-node1节点操作

[root@MGR-node1 ~]# cp /etc/my.cnf /etc/my.cnf.bak
[root@MGR-node1 ~]# >/etc/my.cnf
[root@MGR-node1 ~]# vim /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:
server_id = 1
gtid_mode = on
enforce_gtid_consistency = on
    
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
        
#binlog
log_bin = mysql-bin
log-slave-updates = 1
binlog_format = row
sync-master-info = 1
sync_binlog = 1
       
#relay log
skip_slave_start = 1
    
transaction_write_set_extraction=XXHASH64     
loose-group_replication_group_name="5db40c3c-180c-11e9-afbf-005056ac6820"    
loose-group_replication_start_on_boot=off   
loose-group_replication_local_address= "192.168.222.130:24901"
loose-group_replication_group_seeds= "192.168.222.130:24901,192.168.222.120:24901,192.168.222.110:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off     
loose-group_replication_enforce_update_everywhere_checks=on   
loose-group_replication_ip_whitelist="192.168.222.0/24,127.0.0.1/8" 

重启mysqld服务

[root@MGR-node1 ~]# systemctl restart mysqld

登录数据库进行操作

[root@MGR-node1 ~]# mysql -p123456
............
mysql> SET SQL_LOG_BIN=0; 
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY 'slave@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> reset master;
Query OK, 0 rows affected (0.19 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='slave@123' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.33 sec)


mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name            | Status  | Type        | Library       | License |
+----------------------------+----------+--------------------+----------------------+---------+
...............
...............
| group_replication     | ACTIVE  | GROUP REPLICATION | group_replication.so | GPL            |
+----------------------------+----------+--------------------+----------------------+---------+
46 rows in set (0.00 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.34 sec)

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME       | MEMBER_ID              | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 5f1d9a71-cc1c-11ea-9e38-000c29aed1ed | MGR-node1  |    3306 | ONLINE    |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)

比如要保证上面的group_replication_applier的状态为 ONLINE 才对!

创建一个测试库

mysql> CREATE DATABASE kevin CHARACTER SET utf8 COLLATE utf8_general_ci;   
Query OK, 1 row affected (0.03 sec)
 
mysql> use kevin;
Database changed

mysql> create table if not exists haha (id int(10) PRIMARY KEY AUTO_INCREMENT,name varchar(50) NOT NULL);
Query OK, 0 rows affected (0.24 sec)
 
mysql> insert into kevin.haha values(1,"wangshibo"),(2,"guohuihui"),(3,"yangyang"),(4,"shikui");   
Query OK, 4 rows affected (0.07 sec)
Records: 4 Duplicates: 0 Warnings: 0
 
mysql> select * from kevin.haha;
+----+-----------+
|   id   | name  |
+----+-----------+
| 1 | wangshibo  |
| 2 | guohuihui  |
| 3 | yangyang   |
| 4 | shikui     |
+----+-----------+
4 rows in set (0.00 sec)

MGR-node2节点操作

这里操作基本上与node1相同,注意server-id和ip

[root@MGR-node2 ~]# cp /etc/my.cnf /etc/my.cnf.bak
[root@MGR-node2 ~]# >/etc/my.cnf
[root@MGR-node2 ~]# vim /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:
server_id = 2
gtid_mode = on
enforce_gtid_consistency = on
    
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
        
#binlog
log_bin = mysql-bin
log-slave-updates = 1
binlog_format = row
sync-master-info = 1
sync_binlog = 1
       
#relay log
skip_slave_start = 1
    
transaction_write_set_extraction=XXHASH64     
loose-group_replication_group_name="5db40c3c-180c-11e9-afbf-005056ac6820"    
loose-group_replication_start_on_boot=off   
loose-group_replication_local_address= "192.168.222.120:24901"
loose-group_replication_group_seeds= "192.168.222.130:24901,192.168.222.120:24901,192.168.222.110:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off     
loose-group_replication_enforce_update_everywhere_checks=on   
loose-group_replication_ip_whitelist="192.168.222.0/24,127.0.0.1/8" 

重启数据库

[root@MGR-node2 ~]# systemctl restart mysqld

登录数据库进行操作

[root@MGR-node2 ~]# mysql -uroot -p'123456'
.........
mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY 'slave@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> reset master;
Query OK, 0 rows affected (0.17 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='slave@123' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.21 sec)

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.20 sec)

mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name            | Status  | Type        | Library       | License |
+----------------------------+----------+--------------------+----------------------+---------+
.............
.............
| group_replication     | ACTIVE  | GROUP REPLICATION | group_replication.so | GPL            |
+----------------------------+----------+--------------------+----------------------+---------+
46 rows in set (0.00 sec)
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (6.25 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 3de17984-cc1e-11ea-a335-000c294029b6 | MGR-node2   |        3306 | ONLINE       |
| group_replication_applier | 45e70b80-cc1e-11ea-8a02-000c2994d056 | MGR-node3   |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

查看一下,发现已经将MGR-node1节点添加的数据同步过来了

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kevin              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> select * from kevin.haha;
+----+-----------+
| id | name      |
+----+-----------+
| 1  | wangshibo |
| 2  | guohuihui |
| 3  | yangyang  |
| 4  | shikui    |
+----+-----------+
4 rows in set (0.00 sec)

MGR-node3节点操作

这里和node2节点操作就是一模一样了,注意更改下server-id和加入组时的本机ip就行了

[root@MGR-node3 ~]# cp /etc/my.cnf /etc/my.cnf.bak
[root@MGR-node3 ~]# >/etc/my.cnf
[root@MGR-node3 ~]# vim /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:
server_id = 3
gtid_mode = on
enforce_gtid_consistency = on
    
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
        
#binlog
log_bin = mysql-bin
log-slave-updates = 1
binlog_format = row
sync-master-info = 1
sync_binlog = 1
       
#relay log
skip_slave_start = 1
    
transaction_write_set_extraction=XXHASH64     
loose-group_replication_group_name="5db40c3c-180c-11e9-afbf-005056ac6820"    
loose-group_replication_start_on_boot=off   
loose-group_replication_local_address= "192.168.222.110:24901"
loose-group_replication_group_seeds= "192.168.222.130:24901,192.168.222.120:24901,192.168.222.110:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off     
loose-group_replication_enforce_update_everywhere_checks=on   
loose-group_replication_ip_whitelist="192.168.222.0/24,127.0.0.1/8" 

重启服务

[root@MGR-node3 ~]#systemctl restart mysql

登录mysql进行相关设置操作

[root@MGR-node3 ~]# mysql -uroot-p123456
..........
mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY 'slave@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> reset master;
Query OK, 0 rows affected (0.10 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='slave@123' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.27 sec)

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.04 sec)

mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name            | Status  | Type        | Library       | License |
+----------------------------+----------+--------------------+----------------------+---------+
.............
| group_replication     | ACTIVE  | GROUP REPLICATION | group_replication.so | GPL   |
+----------------------------+----------+--------------------+----------------------+---------+
46 rows in set (0.00 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (4.54 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 3de17984-cc1e-11ea-a335-000c294029b6 | MGR-node2   |        3306 | ONLINE       |
| group_replication_applier | 45e70b80-cc1e-11ea-8a02-000c2994d056 | MGR-node3   |        3306 | ONLINE       |
| group_replication_applier | 5f1d9a71-cc1c-11ea-9e38-000c29aed1ed | MGR-node1   |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

查看下,发现已经将在其他节点上添加的数据同步过来了

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kevin              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from kevin.haha;
+----+-----------+
| id | name      |
+----+-----------+
| 1  | wangshibo |
| 2  | guohuihui |
| 3  | yangyang  |
| 4  | shikui    |
4 rows in set (0.00 sec)

至此,基于MGR组复制模式就完成了

猜你喜欢

转载自blog.csdn.net/m0_46435788/article/details/107523996