首页 > 运维 > Linux > MGR(MySQL Group Replication)多/单主集群-mysql5.7.28
2019
12-27

MGR(MySQL Group Replication)多/单主集群-mysql5.7.28

1.介绍

MGR(MySQL Group Replication)是一个MySQL Server插件,可用于创建弹性,高可用MySQL集群方案。有一个内置的组成员服务,在任何给定的时间点,保持组的视图一致并可供所有服务器使用。服务器可以离开并加入组,视图也会相应更新。当成员离开组,故障检测机制会检测到此情况并通知组视图已更改

2.前期规划

mysql5.7.28安装请看这里 传送门

3.环境准备

关掉所有防火墙

配置主机名,按照先前规划,填写/etc/hosts文件(每台主机都要配置)

在MGR_NODE1节点上生成一个UUID,作为MGR组名

再次修改数据库配置文件/etc/my.cnf

我的node1(192.168.6.121)完整配置文件(当前配置文件为多主配置,单主请自行修改上面2个参数)

以上标准版文件需要更改的点有:

server_id:不能与其他MySQL实例重复
loose-group_replication_group_name:通过SELECT UUID()生成一个UUID作为组名
loose-group_replication_local_address:当前节点用于内部通讯的ip:port
loose-group_replication_group_seeds:组内成员通讯的ip:port

参数讲解:

MGR要求的相关参数

组复制相关参数

配置以上后重启数据库

启动首个MGR节点,启动后登入数据库

以下命令是在(121)数据库中执行

查看是否成功

online表示成功

!—关于重启组这里有个坑

然后将primary机器的my.cnf文件分别复制一份到另外两台机器,注意配置文件里一些目录未创建的就创建一下

其他2台机器(122和123)执行如下(多主模式)

查看是否成功

多主模式切换为单主模式

MGR切换模式需要重新启动组复制,因些需要在所有节点上先关闭组复制,设置 group_replication_single_primary_mode=OFF 等参数,再启动组复制。

单主模式切换为多主模式

等待测试

错误:

关于清除binlog日志文件初始化:

测试(多主模式)

在某个节点的数据库内执行(我当前是在122执行的)

在其他节点执行查询代码 查看是否有刚才的新建的数据

查看121节点

查看123节点

到此MGR多主模式集群成功

测试(单主模式) (单主模式只有primary可写,其他节点只读)

1.主节点插入数据查看另外2个节点是否同步

2.查看另外两台机器

续言:MGR监控

组成员信息查看

组成员状态信息

显示有关组复制的信息,例:已经从组接收并在应用程序队列中排队的事务(中继日志)

显示与组复制相关的通道和线程的状态如果有许多不同的工作线程应用事务,那么工作表也可用于监视每个工作线程正在执行的操作

存放从库relay log 信息

显示存放master相关信息

组复制要求与限制

  • 必须是InnoDB存储引擎。数据必须存储在 InnoDB事务存储引擎中。事务以乐观方式执行,然后在提交时检查冲突。如果存在冲突,为了保持整个组的一致性,将回滚一些事务。这意味着需要事务存储引擎。此外, InnoDB还提供了一些附加功能,可以在与Group Replication一起操作时更好地管理和处理冲突
  • 主键。必须使用拥有主键或者等效主键,也就是唯一且非空键
  • IPv4网络。 MySQL Group Replication使用的组通信引擎仅支持IPv4。
  • 网络性能。 MySQL Group Replication旨在部署在服务器实例彼此非常接近的集群环境中。网络延迟和网络带宽都会影响组的性能和稳定性。所有小组成员之间必须始终保持双向通信。如果阻止服务器实例的入站或出站通信(例如,通过防火墙或连接问题),则该成员无法在该组中运行,并且组成员(包括有问题的成员)可能无法报告受影响的服务器实例的正确成员状态

一些限制

  • 启动二进制日志。 设置 –log-bin[=log_file_name]。MySQL Group Replication会复制二进制日志内容,因此二进制日志需要打开才能运行。
  • 二进制日志行格式。 设置–binlog-format=row,查看行格式的二进制日志可以用mysqlbinlog –base64-output=’DECODE-ROWS’ /data/log/binlog.000002或者在数据库内执行
  • 从主库获取的日志提交之后记录到本地binlog日志中,设置–log-slave-updates
  • 启用GTID,设置–gtid-mode=ON
  • 设置–master-info-repository=TABLE 和 –relay-log-info-repository=TABLE。复制应用程序需要将master信息和中继日志元数据写入系统表mysql.slave_master_info和 mysql.slave_relay_log_info系统表。这可确保组复制插件具有一致的可复制性和复制元数据的事务管理
  • 设置 –transaction-write-set-extraction=XXHASH64此标记用于检测冲突。

多线程并行执行事务,相关参数如下

单双主优缺点,参考大佬讲解

最后编辑:
作者:shooter
这个作者貌似有点懒,什么都没有留下。