Mysql搭建mgr单主,多主组复制

安装环境

3台服务器搭建3节点MGR集群,MySQL版本5.7.27,操作系统版本CentOS 7.6。


10.10.10.91  mysql01

10.10.10.92  mysql02

10.10.10.93  mysql03

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


[root@mysql01 ~]# systemctl stop firewalld

[root@mysql01 ~]# systemctl disable firewalld

所有节点的selinux设置为disabled


[root@mysql01 ~]# getenforce

Disabled

配置各主机名和ip映射,所有节点配置一样


[root@mysql01 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.10.10.91  mysql01

10.10.10.92  mysql02

10.10.10.93  mysql03



安装步骤

官网下载5.7安装包  mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz,建立安装目录/mysql和数据目录/data/mysql,解压压缩包

[root@mysql01 ~]#mkdir /mysql

[root@mysql01 ~]#mkdir /data/mysql

[root@mysql01 ~]# cd /softwares/

[root@mysql01 softwares]#tar -zxvf   mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz 

[root@mysql01 softwares]# cd mysql-5.7.27-linux-glibc2.12-x86_64

[root@mysql01 mysql-5.7.28-linux-glibc2.12-x86_64]# cp -rf * /mysql

[root@mysql01 mysql-5.7.28-linux-glibc2.12-x86_64]#chown -R mysql.mysql /mysql /data/mysql




#配置环境变量


vi /root/.bash_profile

# .bash_profile


# Get the aliases and functions

if [ -f ~/.bashrc ]; then

    . ~/.bashrc

fi


# User specific environment and startup programs


#PATH=$PATH:$HOME/bin

PATH=$PATH:$HOME/bin:/mysql/bin:/mysql/lib:/mysql

export PATH



配置完毕后source /root/.bash_profile生效


配置my.cnf


group_replication_group_name是通过select uuid()得来,所有的库唯一

[root@mysql01 mysql]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir=/mysql

port=3306

socket=/data/mysql/mysql.sock

server_id=1

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

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="9431c4f8-5ddd-11eb-a164-000c290381f2"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="10.10.10.91:33061"

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE







[root@mysql02 software]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir=/mysql

port=3306

socket=/data/mysql/mysql.sock

server_id=2

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

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="9431c4f8-5ddd-11eb-a164-000c290381f2"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="10.10.10.92:33061"

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE




[root@mysql03 mysql]# cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir=/mysql

port=3306

socket=/data/mysql/mysql.sock

server_id=3

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

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="9431c4f8-5ddd-11eb-a164-000c290381f2"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="10.10.10.93:33061"

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=FALSE

loose-group_replication_enforce_update_everywhere_checks= TRUE





组复制部分配置参数说明:


group_replication变量使用的loose-前缀是指示Server启用时尚未加载复制插件也将继续启动

transaction_write_set_extraction = XXHASH64

##指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列

loose-group_replication_group_name="01e5fb97-be64-41f7-bafd-3afc7a6ab555"

##表示将加入或者创建的复制组命名为01e5fb97-be64-41f7-bafd-3afc7a6ab555

##可自定义(通过cat /proc/sys/kernel/random/uuid)

loose-group_replication_start_on_boot=off 

##设置为Server启动时不自动启动组复制

loose-group_replication_local_address="10.10.10.91:33061" 

##绑定本地的10.10.10.91及33061端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问

loose-group_replication_group_seeds="10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061"

##本行为告诉服务器当服务器加入组时,应当连接到10.10.10.91:33061,10.10.10.92:33061,10.10.10.93:33061

##这些种子服务器进行配置。本设置可以不是全部的组成员服务地址。

loose-group_replication_bootstrap_group = off 

##配置是否自动引导组

loose-group_replication_ip_whitelist=”10.30.0.0/16,10.31.0..0/16,10.27.0.0/16″

##配置白名单,默认情况下只允许10.10.10.x连接到复制组,如果是其他IP则需要配置。

3.4初始化并启动各数据库节点

/mysql/bin/mysqld --initialize-insecure  --user=mysql --basedir=/data/mysql --datadir=/data/mysql


/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &




[root@mysql01 ~]# mysql -uroot -p -S /data/mysql/mysql.sock

# 所有的节点都执行安装MGR插件

mysql>INSTALL PLUGIN group_replication SONAME 'group_replication.so';


#所有的节点都执行设置复制账号

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER repl@'%' IDENTIFIED BY '123';

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';



# 启动MGR,在主库(10.10.10.91)上执行

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

# 查看MGR组信息

mysql> SELECT * FROM performance_schema.replication_group_members;



# 其他节点加入MGR,在从库(10.10.10.92,10.10.10.93)上执行

mysql> START GROUP_REPLICATION;





启动MGR单主模式

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.10 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 | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01     |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

1 row in set (0.00 sec)

# 查看MGR组信息

mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01     |        3306 | ONLINE       |

| group_replication_applier | d0a8d1e2-5dd4-11eb-91a8-000c29d007eb | mysql02     |        3306 | ONLINE       |

| group_replication_applier | d5b81c98-5dd4-11eb-843a-000c29916c42 | mysql03     |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

3 rows in set (0.00 sec)


可以看到,3个节点状态为online,并且主节点为10.10.10.91,只有主节点可以写入,其他节点只读,MGR单主模式搭建成功。






切换至多主模式

MGR切换模式

需要重新启动组复制,因些需要在所有节点上先关闭组复制,设置 group_replication_single_primary_mode=OFF 等参数,再启动组复制。

# 停止组复制(所有节点执行):

mysql> stop group_replication;

mysql> set global group_replication_single_primary_mode=OFF;

mysql> set global group_replication_enforce_update_everywhere_checks=ON;




mysql> stop group_replication;

Query OK, 0 rows affected (9.51 sec)


mysql> set global group_replication_single_primary_mode=OFF;

Query OK, 0 rows affected (0.00 sec)


mysql> set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec)


mysql> 



# 随便选择某个节点执行

mysql> SET GLOBAL group_replication_bootstrap_group=ON; 

mysql> START GROUP_REPLICATION; 

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;




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.02 sec)


mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

Query OK, 0 rows affected (0.00 sec)




其他节点执行



START GROUP_REPLICATION; 





mysql> SELECT * FROM performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | a1bee14e-5dd4-11eb-9173-000c290381f2 | mysql01     |        3306 | ONLINE       |

| group_replication_applier | d0a8d1e2-5dd4-11eb-91a8-000c29d007eb | mysql02     |        3306 | ONLINE       |

| group_replication_applier | d5b81c98-5dd4-11eb-843a-000c29916c42 | mysql03     |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

3 rows in set (0.00 sec)


mysql> 




参考

https://www.cnblogs.com/kevingrace/p/10470226.html

https://www.cnblogs.com/kevingrace/p/10470226.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章