暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

MySQL8.0 MGR 搭建

原创 冯晓宇 2023-10-27
1025

适用范围

MySQL MGR是一个MySQL插件,构建在现有MySQL复制基础架构上。引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案。其提供的多写方案,给我们实现多活方案带来了希望。

方案概述

该方案最终架构采用 MySQL Group Replication三节点集群架构,前端通过MySQL Router做代理负责读写分离与负责均衡,后端三节点MySQL为单主模式,自动负责高可用的故障自动切换功能。
image.png

实施步骤

一、 硬件配置及环境

IP地址 CPU 内存 磁盘 网卡 数据目录
10.0.0.50 32C 64G 2T 万兆 /data
10.0.0.51 32C 64G 2T 万兆 /data
10.0.0.52 32C 64G 2T 万兆 /data

二、安装搭建步骤

1. 配置mysql实例

  • 解压安装软件
[root@mysql local]#tar xf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
[root@mysql local]#mv mysql-8.0.34-linux-glibc2.12-x86_64  mysql
  • 配置mgr参数
[root@mysql local]#vim /etc/my.cnf

添加MGR相关信息并重新启动MySQL

plugin_load                      = 'group_replication.so'
group_replication_ip_whitelist     = "10.0.0.50,10.0.0.51,10.0.0.52"
group_replication_group_name    = 'ec9566ae-5bb7-11ea-b099-cb85388b3444'
group_replication_start_on_boot   = off
group_replication_local_address   = "10.0.0.50:3306"
group_replication_group_seeds    = "10.0.0.50:3306,10.0.0.51:3307,10.0.0.52:3308"
group_replication_bootstrap_group = off

配置文件介绍: 
##表示将加入或者创建的复制组命名为ec9566ae-5bb7-11ea-b099-cb85388b3444 可自定义(通过cat /proc/sys/kernel/random/uuid) 
group_replication_group_name="ec9566ae-5bb7-11ea-b099-cb85388b3444" 
##设置为Server启动时不自动启动组复制 
group_replication_start_on_boot=off 
##绑定本地的10.0.0.50及3306端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问 
group_replication_local_address="10.0.0.50:3306" 
##这些种子服务器进行配置。本设置可以不是全部的组成员服务地址。 
group_replication_group_seeds="10.0.0.50:3306,10.0.0.51:3307,10.0.0.52:3308" 
##配置是否自动引导组 
group_replication_bootstrap_group = off 
##配置白名单,默认情况下只允许本机IP连接到复制组,如果是其他IP则需要配置。 
group_replication_ip_whitelist=”10.30.0.0/16,10.31.0..0/16,10.27.0.0/16″
  • 初始化、启动、登录mysql实例
[root@mysql local]#/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf --initialize --user=mysql
[root@mysql local]#/usr/local/mysql/bin/mysqld_safe  --defaults-file=/etc/my3310.cnf  --user=mysql &
[root@mysql local]#systemctl start mysql3316.service
  • 创建集群管理用户
mysql> set sql_log_bin=0;
mysql> CREATE USER 'mgruser'@'%' IDENTIFIED BY 'password';
mysql> GRANT all ON *.* TO 'mgruser'@'%' with grant option;
mysql> flush privileges;
mysql> set sql_log_bin=1;

2. 使用MySQL Shell进行集群搭建

  • 安装 myshell
[root@mysql local]#tar xf mysql-shell-8.0.34-linux-glibc2.12-x86-64bit.tar.gz
[root@mysql local]#mv mysql-shell-8.0.34-linux-glibc2.12-x86-64bit  myshell
  • 登录myshell
[root@mysql bin]# mysqlsh --uri=mgruser@mysql:3306
  • 集群创建检查
 MySQL  mysql:3306 ssl  JS > dba.checkInstanceConfiguration("mgruser@localhost:3306")

image.png
InnoDB集群使用组复制技术,所以InnoDB中的实例需要满足组复制要求。通过AdminAPI提供的dba.checkInstanceConfiguration() 方法检查实例是否满足要求,如果不满足可以使用 dba.configureInstance() 方法配置实例以满足要求。
image.png

  • 创建集群
 MySQL  mysql:3306 ssl  JS > var cluster=dba.createCluster('gmrCluster')

image.png

  • 添加节点
 MySQL  mysql:3306 ssl  JS > cluster.addInstance('mgruser@10.0.0.50:3307')

image.png

  • 查看集群状态
 MySQL  mysql:3306 ssl  JS > cluster.status()

image.png
至此完成MySQL集群的搭建工作

3. 安装MySQL Router

mysql-router 可实现读写分离,兼容性最好,自动感知节点宕机,准确分配请求

  • 安装mysqlrouter
[root@mysql local]# tar xf mysql-router-8.0.34-linux-glibc2.12-x86_64.tar.xz 
[root@mysql local]# mv mysql-router-8.0.34-linux-glibc2.12-x86_64  myrouter
  • 初始化mysqlrouter
[root@mysql bin]# /usr/local/myrouter/bin/mysqlrouter --bootstrap mgruser@10.0.0.50:3306 --directory /data/myrouter --conf-use-sockets --user=root

image.png

  • 启动mysqlrouter
[root@mysql myrouter]# ./start.sh 

4. MGR的限制

  • 仅支持innodb存储引擎;MGR集群中,只支持innodb存储引擎,能够创建非innodb引擎的表,但是无法写入数据,向非innodb表写数据直接报错。
  • 表必须有主键,或者非Null的唯一键;MGR集群中,只支持innodb引擎的表,并且该表必须有显式的主键,或者非Null的唯一键,否则即使能够创建表,也无法向表中写入数据。
  • 网络限制:MGR 组通信引擎目前仅支持IPv4网络,并且对节点间的网络性能要求较高,低延迟、高带宽的网络是部署MGR集群的基础。
  • MGR忽略表锁和命名锁,在MGR中lock tables、unlock tables、get_lock、release_lock等这些表锁和命名锁将被忽略。
  • MGR多主模式中,默认不支持 SERIALIZABLE 隔离级别。建议使用RC。
  • 多主模式下,对同一个对象进行并发的有冲突的ddl和dml操作导致这种冲突在部分成员节点中无法检测到,最终可能导致数据不一致。
  • 多主模式下,不支持级联约束的外键,可能造成有冲突的操作无法检测。
  • 不支持超大事务。
  • 多主模式下可能导致死锁,比如select …for update在不同节点执行,由于多节点锁无法共享,很容易导致死锁。
  • 不支持复制过滤,如果有节点设置了复制过滤,将影响节点间决议的达成。
  • MGR最多支持9个节点,大于9个节点,将拒绝新节点的加入。

参考文档

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论