如何将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清晰地看到。

在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模式。

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

首先停止复制

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

可以加入第二个节点了。

同样设置单主模式参数为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)

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

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

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

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

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java呓语

第16章、复制

观察到服务器版本略有差异,应用在生产环境时最好将MySQL的版本保持一致。最不济也要保证前两位(5.7)版本保持一致,不要出现主(5.7)从(5.1)这种跨版本...

782
来自专栏数据和云

数据库链:Database Link与GLOBAL_NAMES参数的关系

编辑手记:最近大讲堂中很多朋友在讨论DB Link的问题,我们精选一些文章与大家分享这方面的知识。 当GLOBAL_NAMES参数设置为TRUE时,使用DATA...

2597
来自专栏北京马哥教育

用 Python 脚本实现对 Linux 服务器的监控

目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件)、 glances(资...

4026
来自专栏blog

快速安装 Helm

Helm 是 Kubernetes 的包管理器,可以帮我们简化 kubernetes 的操作,一键部署应用。假如你的机器上已经安装了 kubectl 并且能够操...

1982
来自专栏性能与架构

体验 MySQL InnoDB Cluster

Mysql高可用环境的搭建比较麻烦,这使很多人都不去搭建高可用环境,等到有问题时再说 最近Mysql的动作很快,新版本的发布频繁,推出很多新的好用功能及插件,其...

5288
来自专栏Porschev[钟慰]的专栏

Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门

简介   MongoDB   开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序;高伸缩性;   NoSQL毕竟还处于发展阶段...

3357
来自专栏Hadoop实操

如何在CDH集群的非元数据库节点安装MySQL5.7.12

在CDH集群中默认使用的MySQL版本是操作系统自带的版本,一般操作系统自带的MySQL版本都会比较低,对于企业已有应用可能会用较新的MySQL版本,使用集群中...

3546
来自专栏大内老A

[WCF权限控制]从两个重要的概念谈起:Identity与Principal[上篇]

在安全领域,认证和授权是两个重要的主题。认证是安全体系的第一道屏障,守护着整个应用或者服务的第一道大门。当访问者叩门请求进入的时候,认证体系通过验证对方提供凭证...

1949
来自专栏LeoXu的博客

[翻译]Android教程-保存数据-保存文件

http://developer.android.com/training/basics/data-storage/files.html

643
来自专栏玄魂工作室

CTF实战20 渗透测试-后渗透攻击

一般情况下Linux的本地提权要用nc反弹出来,因为Linux下提升权限后得到的是交互式shell,需反弹才能进行下一步命令的执行

1284

扫码关注云+社区