MySQL 5.7 MGR集群搭建 (详细步骤)

本文详细描述了如何在MySQL中配置单主集群,包括设置InnoDB引擎、主键要求、启用GTID、配置二进制日志、服务器IP地址与主机名映射、群复制参数、账号管理以及MGR插件安装。确保了事务一致性与集群稳定性。
摘要由CSDN通过智能技术生成

一. 基础要求

  • 引擎:必须使用InnoDB,以支持事务和提交时的冲突检查。

  • 主键:每个表必须设置主键,以便在事务冲突检查时进行主键值对比。

  • Binlog:必须开启二进制日志(binlog),并设置为row格式,记录每行的变化。

  • GTID与状态信息:开启GTID,主从状态信息存储在表中(使用--master-info-repository=TABLE--relay-log-info-repository=TABLE),并启用--log-slave-updates以记录从服务器的更新操作。

  • 一致性检测:设置--transaction-write-set-extraction=XXHASH64进行事务写集的一致性检测。

二. 服务器规划

服务器名IP地址MySQL版本系统版本
master192.168.56.1115.7.43CentOS 7
node1192.168.56.1125.7.43CentOS 7

三. 开始搭建集群 (单主集群)

1. 修改各服务器hostname
vi /etc/hostname
2. ip与hostname映射的绑定关系
vi /etc/hosts

 每台服务器添加以下内容:

196.168.56.111 master 
196.168.56.112 node1

重启服务器使配置生效

init 6
3. 添加Mysql参数文件信息
vi /etc/my.cnf

master

# server_id:不能与其他MySQL实例重复
server_id=1
# 开启全局事务。将此选项设置要求 enforce-gtid-consistency设置为ON
gtid_mode=ON
# 强制GTID的一致性
enforce_gtid_consistency=ON
# 禁用二进制日志校验
binlog_checksum=NONE

log_bin=binlog
# 设置从主服务器接受的更新是否写入二进制日志中
log_slave_updates=ON
# 以行格式记录
binlog_format=ROW
# 将master_info元数据保存在系统表中
master_info_repository=TABLE
# 将relay_info元数据保存在系统表中
relay_log_info_repository=TABLE
relay-log-recovery=1

# 此参数是在server收集写集合的同时以便将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。
transaction_write_set_extraction=XXHASH64
# 组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_group_name="aadaaaaa-adda-adda-aaaa-aaaaaaddaaaa"
# 启动mysql时不自动启动组复制
loose-group_replication_start_on_boot=OFF
# 本机IP地址或者映射,33061用于接收来自其他组成员的传入连接
loose-group_replication_local_address= "192.168.56.111:33061"
# 当前主机成员需要加入组时,Server先访问这些种子成员中的一个,然后它请求重新配置以允许它加入组
# 需要注意的是,此参数不需要列出所有组成员,只需列出当前节点加入组需要访问的节点即可。
loose-group_replication_group_seeds= "192.168.56.111:33061,192.168.56.112:33061"
# 是否自动引导组。此选项只能在一个server实例上使用,通常是首次引导组时(或在整组成员关闭的情况下),如果多次引导,可能出现脑裂。
loose-group_replication_bootstrap_group=OFF

node1

# server_id:不能与其他MySQL实例重复
server_id=2
# 开启全局事务。将此选项设置要求 enforce-gtid-consistency设置为ON
gtid_mode=ON
# 强制GTID的一致性
enforce_gtid_consistency=ON
# 禁用二进制日志校验
binlog_checksum=NONE

log_bin=binlog
# 设置从主服务器接受的更新是否写入二进制日志中
log_slave_updates=ON
# 以行格式记录
binlog_format=ROW
# 将master_info元数据保存在系统表中
master_info_repository=TABLE
# 将relay_info元数据保存在系统表中
relay_log_info_repository=TABLE
relay-log-recovery=1

# 此参数是在server收集写集合的同时以便将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。
transaction_write_set_extraction=XXHASH64
# 组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_group_name="aadaaaaa-adda-adda-aaaa-aaaaaaddaaaa"
# 启动mysql时不自动启动组复制
loose-group_replication_start_on_boot=OFF
# 本机IP地址或者映射,33061用于接收来自其他组成员的传入连接
loose-group_replication_local_address= "192.168.56.11:33061"
# 当前主机成员需要加入组时,Server先访问这些种子成员中的一个,然后它请求重新配置以允许它加入组
# 需要注意的是,此参数不需要列出所有组成员,只需列出当前节点加入组需要访问的节点即可。
loose-group_replication_group_seeds= "192.168.56.111:33061,192.168.56.112:33061"
# 是否自动引导组。此选项只能在一个server实例上使用,通常是首次引导组时(或在整组成员关闭的情况下),如果多次引导,可能出现脑裂。
loose-group_replication_bootstrap_group=OFF
4. 添加完成后重启mysql
systemctl restart mysqld

5. 创建组复制账号

所有节点登录mysql并依次执行以下语句(可以自定义复制的账号名与密码,但各节点复制账号必须保持一致):

set sql_log_bin = 0;

create user rpl_user identified with 'mysql_native_password' by
'rpl_123';

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

flush privileges;

set sql_log_bin = 1;

change master to master_user='rpl_user', master_password='rpl_123' for
channel 'group_replication_recovery';

6. 安装MGR插件

所有节点登录mysql并依次执行以下语句:

install plugin group_replication soname 'group_replication.so';

7. 搭建集群

主节点执行(注意一定要设置SELINUX=disabled并开启相应的端口,本文端口为33061否则集群启动会失败):

RESET MASTER;

set global group_replication_bootstrap_group = 1;

start group_replication;

set global group_replication_bootstrap_group = 0;

show master status;

select * from performance_schema.replication_group_members;

slave节点(node1)执行:

# 加入集群
start group_replication;

# 查询当前集群状态
select * from performance_schema.replication_group_members;

成员状态都为ONLINE加入集群成功,搭建完毕

8. 集群添加新子节点

依照上面添加子节点的步骤即可添加新子节点,添加my.cnf配置->创建组复制账号->安装MGR插件->执行start group_replication;加入集群。

如果数据量差的较多,可以先用xtrabackup等备份软件备份恢复一个从节点数据到新的子节点之后加入集群。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MGRMySQL Group Replication)是MySQL 5.7中新增的高可用性解决方案,它基于Paxos协议实现了多主复制,并且支持自动故障检测和自动故障转移。以下是MGR集群搭建详细步骤: 1. 确定集群的节点数和角色,至少需要3个节点。其中,至少需要一个节点作为主节点,其他节点作为从节点。 2. 在每个节点上安装MySQL 5.7及以上版本,并且确保每个节点的MySQL配置文件中启用了MGR插件。 3. 在主节点上创建一个新的MGR组,并且将从节点添加到组中。可以使用以下命令: ``` mysql> SET GLOBAL group_replication_bootstrap_group=ON; mysql> CREATE USER 'mgr_user'@'%' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'mgr_user'@'%'; mysql> START GROUP_REPLICATION; mysql> SET GLOBAL group_replication_bootstrap_group=OFF; ``` 其中,mgr_user是用于MGR组内节点之间的通信的用户名,password是密码。 4. 在从节点上启动MGR组,并且加入到主节点所在的组中。可以使用以下命令: ``` mysql> SET GLOBAL group_replication_bootstrap_group=OFF; mysql> CHANGE MASTER TO MASTER_USER='mgr_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery'; mysql> START GROUP_REPLICATION; ``` 其中,mgr_user和password应该与主节点上设置的相同。 5. 在每个节点上配置MGR的一些参数,比如MGR组的名称、通信端口等等。可以使用以下命令: ``` mysql> SET GLOBAL group_replication_group_name='my_group'; mysql> SET GLOBAL group_replication_local_address='127.0.0.1:33061'; mysql> SET GLOBAL group_replication_group_seeds='127.0.0.1:33061,127.0.0.1:33062,127.0.0.1:33063'; ``` 其中,my_group是MGR组的名称,127.0.0.1:33061是节点的通信地址和端口,group_replication_group_seeds是所有节点的通信地址和端口。 6. 测试MGR集群的可用性。可以通过在主节点上执行一些数据操作,然后在从节点上查看是否同步了这些操作来进行测试。 以上就是MGR集群搭建详细步骤。需要注意的是,在实际应用中,还需要考虑一些高可用性和安全性方面的问题,比如如何自动故障转移、如何进行备份和恢复、如何保护敏感数据等等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值