Mysql 部署 MGR 集群

0. 参考文章

官方文档:

MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started

博客:

MGR 单主模式部署教程(基于 MySQL 8.0.28) - 墨天轮 (modb.pro)

mysql MGR单主模式的搭建 - 墨天轮 (modb.pro)

MySQL 5.7 基于组复制(MySQL Group Replication) - 运维小结 - 散尽浮华 - 博客园 (cnblogs.com)

1. 前提条件

硬件条件

  • 三台同一局域网内具有互通能力的 Linux 服务器
  • 也可以在同一台 Linux 机器上开三个 Docker

能力前提

  • 会 Mysql 服务端和客户端的安装和使用,会基本的 Mysql 配置

2. 配置过程

2.1 基础环境准备

修改Linux配置文件:

文件路径:/etc/hosts,在其中加入下列三行配置

每行为对应服务器的 IP 地址host name

不要照抄这个配置,需要按照后续介绍查询自己每台机器的配置。

在这里插入图片描述

host name:

每台服务器/机器/Docker有自己的 host name,具体获取方法可能有区别,我使用的是机器默认的 host name,没有做修改,一般是与你终端上显示的名字相同:

比如我这台服务器的 host name 为 dellr740

在这里插入图片描述

IP 地址:

输入以下命令可获取一个列表,其中 192.168 为首的 IP 一般是本机在本地局域网的地址。

ip addr show

在这里插入图片描述

网络连接:

需要确保三台机器之间能够通过上述 IP 相互访问,可以在每台机器上 ping 其它两台机器试试。

ping 192.168.1.4
...

2.2 主节点配置

mysql server 配置文件:

主节点参考配置如下,以下的配置只是MGR相关的配置,mysql 运行的基本配置需要自己设置。

我会对其中关键的参数做解释。

# 不同节点需要调整的配置
server_id=1
loose_group_replication_local_address= "192.168.1.4:33061"

# 需要根据服务器地址进行更改的配置
loose-group_replication_ip_whitelist = "192.168.1.14, 192.168.1.4, 192.168.1.13"
loose_group_replication_group_seeds= "dellr740:33061, east11713:33061, e117:33061"

# 可以直接复制的配置,无需修改
plugin_load_add='group_replication.so'

loose_group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose_group_replication_start_on_boot=off
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
loose_group_replication_bootstrap_group=off
loose_group_replication_recovery_get_public_key=ON

下列两项配置在每台机器上不一样

# 三台机器不同就行
server_id=1

# 本机的 IP 地址,30061不需要更改,这是 MGR 提供给内部互联的端口
loose_group_replication_local_address= "192.168.1.4:33061"

下列两项配置需要根据自己机器的配置进行调整

# 这一项记录三台机器的 IP
loose-group_replication_ip_whitelist = "192.168.1.14, 192.168.1.4, 192.168.1.13"

# 这一项记录三台机器的 host_name:端口,按道理使用ip:端口也是可以的
loose_group_replication_group_seeds= "dellr740:33061, east11713:33061, e117:33061"

下面这项配置表明MGR需要使用此插件,所以需要自己安装 group_replication.so 插件,我是选择的编译安装。

plugin_load_add='group_replication.so'

MGR用户初始化:

启动主节点的 mysql sever,并使用客户端进入 msyql。

输入以下语句创建组复制的用户:

SET SQL_LOG_BIN=0;

CREATE USER rpl_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;

SET SQL_LOG_BIN=1;

输入以下语句开启组复制

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rpl_user', PASSWORD='password';
SET GLOBAL group_replication_bootstrap_group=OFF;

SELECT * FROM performance_schema.replication_group_members;

若开启成功,会显示如下类似数据表

在这里插入图片描述

2.3 从节点配置

mysql server 配置文件:

配置文件同主节点几乎相同,只需要修改其中前两项,保证 IP 地址是本机的,且 server_id 与另外的机器不同即可。

# 不同节点需要调整的配置
server_id=2
loose_group_replication_local_address= "192.168.1.13:33061"

# 需要根据服务器地址进行更改的配置
loose-group_replication_ip_whitelist = "192.168.1.14, 192.168.1.4, 192.168.1.13"
loose_group_replication_group_seeds= "dellr740:33061, east11713:33061, e117:33061"

# 可以直接复制的配置,无需修改
plugin_load_add='group_replication.so'

loose_group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose_group_replication_start_on_boot=off
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
loose_group_replication_bootstrap_group=off
loose_group_replication_recovery_get_public_key=ON

从节点加入集群:

启动从节点的 mysql sever,并使用客户端进入 msyql。

输入以下语句创建组复制的用户:

SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

输入以下语句开启组复制

START GROUP_REPLICATION USER='rpl_user', PASSWORD='password';

SELECT * FROM performance_schema.replication_group_members;

若开启成功,会显示如下类似数据表

在这里插入图片描述


3. 问题汇总

错误信息可以在 mysql 客户端看到一些,也可以在 mysql server 的终端看到(或者是终端输出的错误日志中)

MY-001045

从节点的密码设置与主节点不一致(如果是复制我上述的语句,不会出现这个错误)

MY-002005

主机名和 /etc/hosts中名字不一致,正确的主机名可以用以下语句产生的图中看到。

SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述

ERROR 3098 (HY): The table does notcomply with the requirements by anexternal plugin .

mysql只支持 innodb 作为 MGR 的存储引擎,如果需要使用自己的存储引擎,需要修改 MGR 插件的源码:

plugin/group_replication/src/observer_trans.cc:143

plugin/group_replication/src/asynchronous_channels_state_observer.cc:202

if (param->tables_info[table].db_type != DB_TYPE_INNODB) {
// 暴力改法(不建议但是可行):改成
if (false) {

Debug 模式 MGR 源码报错

编译安装的时候记得把 MGR 插件也编译成 debug 模式就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值