Administrator
Administrator
发布于 2025-08-15 / 52 阅读
0
0

MySQL多主多从(GR集群)配置-Docker

MySQL版本:8.0.x(本次测试版本8.0.43)

库表:表必须为InnoDB,必须有主键

最少三个主节点组成GR集群,开启多主(Multi-Primary),每个节点都可以读和写。

每个主节点下可挂多个从节点,做备份和读扩展。(可选)

本文的三个节点在DOCKER的同一个网关下,在局域网内。

1.配置多主

1.1)每个主节点配置my.cnf

每一台修改server_id、loose-group_replication_local_address,group_replication_group_seeds和group_replication_group_name在第一台时确定好之后其它主节点相同。

[mysqld]
server_id=101  # 每台唯一
log_bin=binlog
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
plugin_load_add='group_replication.so'

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"   # 生成一个UUID,每一台都相同
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="10.0.0.1:33061"   # 每一台填自己的IP+33061
loose-group_replication_group_seeds="10.0.0.1:33061,10.0.0.2:33061,10.0.0.3:33061"   #集群所有应用IP+33061,每一台相同

loose-group_replication_single_primary_mode=OFF
loose-group_replication_enforce_update_everywhere_checks=ON

super_read_only=OFF   # 关闭只读,也就是可读可写

1.2)第一台(引导节点)

第三行可选,如果有证书的话就可以不执行,因为默认的认证插件caching_sha2_password要求必须配置SSL证书,这里依然用不安全的认证方式用于测试。

CREATE USER repl@'%' IDENTIFIED BY 'StrongPass!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'%';
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass!';
FLUSH PRIVILEGES;

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

SELECT * FROM performance_schema.replication_group_members;

最后一行显示当前集群列表,现在应该只有一台,MEMBER_STATE字段应该是ONLINE

1.3)其它主节点

repl和StrongPass!是第一台中添加的账号和密码

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='StrongPass!'
  FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;

SELECT * FROM performance_schema.replication_group_members;

1.4)MYSQL关闭或重启后恢复工作

第一台引导节点:

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

其它主节点:

START GROUP_REPLICATION;

2.配置只读从节点

2.1)my.cnf

[mysqld]
server_id=104              #每个MYSQL应用唯一
log_slave_updates=ON
read_only=ON               
super_read_only=ON         
log_bin=binlog
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
plugin_load_add='group_replication.so'

loose-group_replication_group_name="4fdf3ad9-7cbe-d9ee-1da9-2be2a6f8f5e3"   # 和主节点的集群UUD相同
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="172.18.0.5:33061"     #从节点的IP+33061
loose-group_replication_group_seeds="172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061"   #主节点集群
loose-group_replication_enforce_update_everywhere_checks=ON

2.2)配置复制通道

通道名称master1可自定义。

可以连接一个主节点,也可以连接多个主节点。

CHANGE REPLICATION SOURCE TO 
  MASTER_HOST='任意一个主节点的IP', 
  MASTER_USER='repl', 
  MASTER_PASSWORD='StrongPass!',
  MASTER_AUTO_POSITION=1
  FOR CHANNEL 'master1'; 

CHANGE REPLICATION SOURCE TO 
  MASTER_HOST='任意一个主节点的IP', 
  MASTER_USER='repl', 
  MASTER_PASSWORD='StrongPass!',
  MASTER_AUTO_POSITION=1
  FOR CHANNEL 'master2'; 

2.3)启动从节点复制

START SLAVE FOR CHANNEL 'master1';
START SLAVE FOR CHANNEL 'master2';

2.4)查看状态

show slave status;

代理层

ProxySQL:https://wjhblog.cn/archives/proxysql-shu-ju-ku-dai-li-zhong-jian-ceng-zhi-yi


评论