如何将MySQL GR 设置为多主模式

在MySQL 5.7.17版本中发布的MySQL Group Replication(后文简称为MGR)被很多人称为MySQL复制方案的正规军,可以一举取代现在的MySQL Replication,Semisynchronous replication,甚至是可以取代之前最成功的MySQL集群方案Galera。


MGR有两种模式,一种是Single-Primary,一种是Multi-Primary,单主或者多主。


在前一种模式Single-Primary中,无论集群中有多少个节点,只有一个节点允许写入,其它节点都是只读的,这个允许写入的节点被称为主节点,只有当这个主节点出现问题从集群中被踢出,才会在剩余的节点中选举出另外一个节点成为新的主节点,并且将该节点置为可写模式。这个过程可以通过log清晰地看到。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


在5.7.17的官方文档中有详细地描述如何设置Single-Primary MGR的方法。

Deploying Group Replication in Single-Primary Mode(https://dev.mysql.com/doc/refman/5.7/en/group-replication-deploying-in-single-primary-mode.html)


而在后一种模式Multi-Primary中,所有的节点都是主节点,都可以同时被读写,看上去这似乎更好,但是因为多主的复杂性,在功能上如果设置了多主模式,则会有一些使用的限制,比如不支持Foreign Keys with Cascading Constraints。


在多主模式下,集群中的节点退出集群,也不再会出现重新选举的动作,因为本来所有的节点都是Primary节点。


但是不确认是什么原因,在官方文档中没有单独的章节来描述如何设置集群为Multi-Primary模式。只是在最后语焉不详地提及了一句:Multi-primary mode groups (members all configured with group_replication_single_primary_mode=OFF) 让读者可以知道跟group_replication_single_primary_mode参数有关。


以下为设置Multi-Primary MGR的方法。假设集群之前已经处于Single-Primary模式。


group_replication_single_primary_mode=ON,表示启动了Single-Primary模式,那么修改为OFF就意味着要启动Multi-Primary模式。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


如果MGR已经启动,则无法动态修改该参数

640?wx_fmt=png&wxfrom=5&wx_lazy=1


首先停止复制

root@lh> stop GROUP_REPLICATION;

Query OK, 0 rows affected (8.67 sec) 


设置单主模式参数为off

root@lh > set global group_replication_single_primary_mode=off;

Query OK, 0 rows affected (0.00 sec)


该参数设置为ON,则禁用了在多主模式下一些可能产生未知数据冲突的操作

(root@lh) > set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec) 


设置为第一个准备启动MGR(bootstrap)的节点

root@lh> SET GLOBAL group_replication_bootstrap_group=ON;

Query OK, 0 rows affected (0.00 sec) 


启动复制 

root@lh> START GROUP_REPLICATION;

Query OK, 0 rows affected (1.29 sec) 


 为了防止后续由于意外再启动另外一个复制组,关闭bootstrap参数

root@lh]> SET GLOBAL group_replication_bootstrap_group=OFF;

Query OK, 0 rows affected (0.00 sec) 


此时可以从视图中看到整个集群只有一个节点是ONLINE

640?wx_fmt=png&wxfrom=5&wx_lazy=1


可以加入第二个节点了。

同样设置单主模式参数为off

root@lh> set global group_replication_single_primary_mode=off;

Query OK, 0 rows affected (0.00 sec) 


设置update检查参数为on

root@lh> set global group_replication_enforce_update_everywhere_checks=ON;

Query OK, 0 rows affected (0.00 sec) 


启动复制

root@lh> start group_replication;

Query OK, 0 rows affected (5.42 sec) 


此时检查视图,可以发现集群中已经存在两个节点

640?wx_fmt=png&wxfrom=5&wx_lazy=1


group_replication_primary_member值为空,表示启动的是Multi-Primary Mode,否则该参数显示的是单主模式中的Primary节点。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


同样的方法可以加入第三个节点,在当前版本中MGR最多支持一个集群中拥有9个节点。


如果需要在MySQL重启之后这些参数仍然生效,那么需要将这些参数加入到my.cnf文件中,一个典型的配置了MGR的my.cnf如下所示

640?wx_fmt=png&wxfrom=5&wx_lazy=1



本文出自数据和云公众号,原文链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值