我遇见的搭建问题,解决方案参考下面诸多博主的帖子
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
集群的机器需要配置区分的主机名,并且在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)
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
# - - - - - - - - -[ 从库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
# - - - - - - - - -[ 从库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