【MySQL】MGR高可用搭建

2022/3/9 19:15:08

本文主要是介绍【MySQL】MGR高可用搭建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

 

部署过程中各种问题可参考的解决方案

我遇见的搭建问题,解决方案参考下面诸多博主的帖子

 

1、MGR部署后如何测试单点故障情况

https://www.cnblogs.com/diantong/p/11048767.html

 

2、找不到Group组端口如何解决

https://www.cnblogs.com/naocanzhishen/p/13540861.html

服务日志描述:

2022-03-08T16:22:11.029417Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error testing to the local group communication engine instance.'
2022-03-08T16:22:11.089494Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33061'

 

3、使用已经安装MYSQL的克隆虚拟机,导致实例ID一致问题

https://blog.csdn.net/fly43108622/article/details/86089449

服务日志描述:

'There is already a member with server_uuid a655ee5b-9ee6-11ec-b685-000c290bdef1. The member will now exit the group.'

 

4、节点Recovering状态如何解决

https://blog.csdn.net/heroicpoem/article/details/106340155

 

MGR搭建流程

集群的机器需要配置区分的主机名,并且在Host配置对应的映射

1、配置主机名

# 一号机器
echo centos7-1 > /etc/hostname

# 二号机器
echo centos7-2 > /etc/hostname

# 三号机器
echo centos7-3 > /etc/hostname

 

2、配置域名映射(所有机器配置)

vim /etc/hosts

# 根据自己的机器IP进行设定
192.168.177.11 centos7-1
192.168.177.12 centos7-2
192.168.177.13 centos7-3

 

上述步骤完成后,使用ping命令测试一下是否能够ping通

以此检查网路状态和配置是否生效

 

确认主从关系

主从架构
centos7-1 主库 - A
centos7-2 从库 - B
centos7-3 从库 - C

 

 

然后以此配置各自的MYSQL配置文件(my.cnf)

 

1、主库配置追加这些配置项

MGR需要一个组群端口,所以这里使用的是33061端口

下面一项是加上了从库的地址和端口一起配置

# - - - - - - - - -[ 主库追加配置 ] - - - - - - - - - - - # 
server_id=1 
gtid_mode=ON 
enforce_gtid_consistency=ON 
binlog_checksum=NONE 
transaction_write_set_extraction=XXHASH64 
default_authentication_plugin=mysql_native_password 
plugin_dir=/usr/lib64/mysql/plugin 
loose-group_replication_recovery_use_ssl=ON 
loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
loose-group_replication_start_on_boot=OFF 
loose-group_replication_local_address="192.168.177.11:33061" 
loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" 
loose-group_replication_bootstrap_group=OFF 

2、从库1的配置项

# - - - - - - - - -[ 从库1追加配置 ] - - - - - - - - - - - # 
server_id=2
plugin_dir=/usr/lib64/mysql/plugin 
default_authentication_plugin=mysql_native_password
gtid_mode=ON 
enforce_gtid_consistency=ON
binlog_checksum=NONE
loose-group_replication_recovery_get_public_key=ON 
loose-group_replication_recovery_use_ssl=ON 
loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="192.168.177.12:33061" 
loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" 
loose-group_replication_bootstrap_group=OFF

3、从库2的配置项

# - - - - - - - - -[ 从库2追加配置 ] - - - - - - - - - - - # 
# 设置唯一的服务器编号
server_id=3
plugin_dir=/usr/lib64/mysql/plugin 
default_authentication_plugin=mysql_native_password
gtid_mode=ON 
enforce_gtid_consistency=ON
binlog_checksum=NONE

# 这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥 
loose-group_replication_recovery_get_public_key=ON 
loose-group_replication_recovery_use_ssl=ON 
loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
loose-group_replication_start_on_boot=OFF

# 设置本机地址
loose-group_replication_local_address="192.168.177.13:33061" 
loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061" 
loose-group_replication_bootstrap_group=OFF

 

各个配置参数说明:

# 使用mysql_native_password密码策略,防止navicat连不上mysql8  
default_authentication_plugin=mysql_native_password 

# 设置MySQL插件所在目录,因为MGR基于插件,所以必须设置插件路径  
plugin_dir=/usr/lib64/mysql/plugin 

# 服务器编号,Master=1 
server_id=1 

# 开启binlog的GTID模式
gtid_mode=ON 

# 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行 
enforce_gtid_consistency=ON 

# 关闭binlog校验 
binlog_checksum=NONE 

# 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 17
transaction_write_set_extraction=XXHASH64 

# 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。 
loose‐group_replication_recovery_use_ssl=ON 

# 该服务器的实例所在复制组的名称,必须是有效的 UUID,所有节点必须相同。 
loose‐group_replication_group_name="bbbbbbbb‐bbbb‐cccc‐dddd‐eeeeeeeeeeee" 

# 确定服务器是否应该在服务器启动期间启动组复制。 
loose‐group_replication_start_on_boot=OFF 2425 

# 大坑2:
# 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。 
# 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换 
# 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可 
loose‐group_replication_local_address="n0:24901" 

# 用于建立新成员到组的连接组成员列表。 
# 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。 
# 同样采用n0~n2的主机名替代 
loose‐group_replication_group_seeds="n0:24901,n1:24901,n2:24901" 

# 配置此服务器为引导组,这个选项必须仅在一台服务器上设置, 
# 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。 
loose‐group_replication_bootstrap_group=OFF 

 

配置完成后重启各自的服务

# 所有配置完成后重启服务
systemctl restart mysqld

 

关闭Linux安全服务(全部机器执行)

# 关闭SELinux
setenforce 0

# 重启
reboot

 

安装此依赖,并开发声明的33061端口(全部机器执行)

yum install -y policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 33061

 

登录每一个库实例,执行下列SQL

-- 创建副本账号
CREATE USER 'REPL'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 

-- 赋予所有库的主从同步副本权限
GRANT REPLICATION SLAVE ON *.* TO 'REPL'@'%';

-- 清空BIN日志
RESET MASTER;

-- 安装MGR插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';

-- 检查是否安装成功
SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'group_replication';
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
| PLUGIN_NAME       | PLUGIN_VERSION | PLUGIN_STATUS | PLUGIN_TYPE       | PLUGIN_TYPE_VERSION | PLUGIN_LIBRARY       | PLUGIN_LIBRARY_VERSION | PLUGIN_AUTHOR      | PLUGIN_DESCRIPTION        | PLUGIN_LICENSE | LOAD_OPTION |
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
| group_replication | 1.1            | ACTIVE        | GROUP REPLICATION | 1.4                 | group_replication.so | 1.10                   | Oracle Corporation | Group Replication (1.1.0) | GPL            | ON          |
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
1 row in set (0.02 sec)

 

进行组网数据同步

首先主库开始进行副本组初始化

# - - - - - - - - -[ 主库操作 ] - - - - - - - - - - - # 
# 我们在 primary.cnf 配置文件中
# 把 group_replication_bootstrap_group 参数设置成 OFF,
# 在 primary 服务器启动时并不会直接启动复制组,
# 通过下面的命令动态的开启复制组是我们的集群更安全。

-- 开启复制组
SET GLOBAL group_replication_bootstrap_group=ON; 
START GROUP_REPLICATION; 
SET GLOBAL group_replication_bootstrap_group=OFF;

注意开启组副本SQL后的返回信息

检查服务是否报错

-- 检查日志
tail ‐f /var/log/mysqld.log

 

然后从库开始加入到 主库初始化的副本中

# - - - - - - - - -[ 从库1 & 从库2 操作 ] - - - - - - - - - - - # 
#指定主从账户与指定通信频道 
CHANGE MASTER TO 
    MASTER_USER="REPL", 
    MASTER_PASSWORD="123456" 
FOR CHANNEL 'group_replication_recovery'; 

#开启组网数据同步 
START GROUP_REPLICATION;

 

检查组副本的状态:

# 验证是否加入, 当所有节点为ONLINE状态时,才算成功
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | a655ee5b-9ee6-11ec-b685-000c290bdef1 | centos7     |        3306 | ONLINE       | PRIMARY     | 8.0.27         | XCom                       |
| group_replication_applier | b1ae5b39-9efd-11ec-b67d-000c29dd2622 | centos7     |        3306 | RECOVERING   | SECONDARY   | 8.0.27         | XCom                       |
| group_replication_applier | b552f59c-9efd-11ec-b52d-000c29eb138a | centos7     |        3306 | RECOVERING   | SECONDARY   | 8.0.27         | XCom                       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.02 sec)

所有节点成员均为ONLINE状态才表示MGR部署成功

像上面的RECOVERING状态,需要翻看该节点的服务日志,检查错误原因

-- 检查日志
tail ‐f /var/log/mysqld.log

 



这篇关于【MySQL】MGR高可用搭建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程