
GreatSQL从单机到MGR扩展纪实
一、前言
原有的业务系统跑在MySQL主从架构中,高可用通过脚本完成,但存在切换数据丢失和切换不及时风险,调研了高可用更稳定的MGR后,准备入手一试。本篇文章主要记录GreatSQL从单机扩展到MGR的详细过程,遇到的问题及解决方法。
二、基础环境
服务器角色如下
IP | 端口 | 主机名 | 作用 |
172.17.140.25 | 3310 | gdb1 | 原单机 |
172.17.140.24 | 3310 | gdb2 | MGR扩展节点1 |
172.17.139.164 | 3310 | gdb3 | MGR扩展节点2 |
本次验证使用的是GreatSQL8.0.32-24版本,相比MySQL官网的8.0.32,GreatSQL在性能、可靠性、易用性和安全方面,都有不错的提升,可以在后续环境中验证。具体提升点可以参考:GreatSQL简介[https://greatsql.cn/docs/8032/user-manual/2-about-greatsql/2-1-greatsql-brief-intro.html]
通过下面的命令下载GreatSQL8.0.32-24进行测试。
三、单机搭建
3.1 单机搭建
将软件包,上传至172.17.140.25的/opt/software目录,解压安装
结果如下所示
创建必要的目录,并修改属主
创建配置文件/data/dbdata/data3310/my3310.cnf
,配置文件中并没有与MGR相关的参数配置,内容如下
初始化实例,并启动
通过进程信息可以确认,数据库启动完成。
3.2 测试数据构造
连接数据库,修改默认密码,并且创建部分测试数据
四、扩展节点搭建,MGR构建
4.1 扩展节点搭建
按照3.1章节步骤,分别在服务器172.17.140.24、172.17.139.164
上初始化单机实例
4.2 在gdb1、gdb2、gdb3实例中,创建用于MGR同步数据的用户
4.3 安装必要插件
在gdb1、gdb2、gdb3服务器实例中,安装下面插件
4.4 配置并启动MGR
在三个节点中,进行如下参数配置
在三个节点中,对group_replication_local_address进行配置,配置规则见章节5.2 错误2
在已有数据节点gdb1设置引导参数,并且启动mgr
在扩展节点gdb2、gdb3启动mgr
五、日常运维
5.1 节点状态查询
5.2 节点复制通道状态查询
更多运维信息详见https://gitee.com/GreatSQL/GreatSQL-Doc/tree/master/deep-dive-mgr
六、问题处理
6.1 异常1
提示信息:The group_replication_group_name option is mandatory
原因:变量group_replication_group_name必须在每个MGR成员中设置,并且保持一致
解决方法:如果是初始化集群,可以查询一个uuid()的值作为group_replication_group_name的值,如果是已经存在的集群,则到其他MGR节点查询该变量,并且在本节点设置
6.2 异常2
提示信息:[GCS] Invalid hostname or IP address () assigned to the parameter local_node!
原因:变量group_replication_local_address必须在每个MGR成员中设置,并且每个成员的值不一样
解决方法:参数group_replication_local_address设置规则为IP:PORT
,一般是设置为本机IP,然后在实例端口前面加1作为MGR监听端口,即文章中的实例端口为3310,此时MGR监听端口设置为13310
6.3 异常3
提示信息:[GCS] Unable to join the group: peers not configured.
原因:变量group_replication_group_seeds必须在每个MGR成员中设置,并且保持一致
解决方法:设置格式为所有节点的group_replication_local_address值使用逗号拼接上
6.4 异常4
提示信息:performance_schema.replication_group_members中节点状态一直处于RECOVERING,并且在error log中有如下信息
原因: MGR同步数据账户密码设置不正确,导致节点间无法通信
解决方法:通过下面的命令重新设置同步账号信息
6.5 异常5
提示信息:执行start group_replication命令返回失败,在错误日志中存在如下信息
原因:由于新加入的MGR节点存在本地事务,与MGR集群事务冲突,导致无法加入
解决方法有两种:
- 确认集群为新节点,并且本地操作未修改数据,可以直接重置本节点的GTID,再启动即可
- 手动从其他正常节点进行数据clone,clone完成后,实例会自动重启,自动加入mgr组
Enjoy GreatSQL :)
文章转载自公众号:GreatSQL社区
