MySQL-通过mysql-shell部署MGR

本文将从0到1介绍在centos7通过mysql-shell部署MGR

前言

1、什么是mysql-shell
MySQL Shell 是 MySQL 的高级客户端和代码编辑器,除了提供的 SQL 功能外,与 mysql 类似,MySQL Shell 还提供脚本 JavaScript 和 Python 的功能,包括 API 使用 MySQL。

2、什么是MGR
MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。

文件主要介绍通过mysql-shell部署MGR,而关于MGR本身,将在后续文章中为大家介绍。

部署流程

1、关闭防火墙、关闭防火墙、关闭防火墙

如果忘记关闭防火墙后续操作会遇到重重坎坷。

2、上传mysql-shell软件包、修改环节变量

这里用的是
mysql-shell-8.0.26-linux-glibc2.12-x86-64bit.tar.gz

解压重命名后配置环节变量(/etc/profile中添加)
export PATH=/opt/mysqlsh/bin:$PATH

3、生成uuid(用于MGR配置)

[root@mgr1 bin]# cat /proc/sys/kernel/random/uuid
7b180eea-76b6-4fc1-8dd6-7c30557491f6

4、安装mysql(添加MGR重要参数),其他参数根据大家情况来

mysql同样安装8.0.26版本

这里为大家提供MGR重要参数,其他参数可自定义
##########################MGR####################
#通过ip来配置MGR,所以这里禁用dns解析
skip_name_resolve
master_info_repository=TABLE
relay_log_info_repository=TABLE
default_authentication_plugin=mysql_native_password
binlog_checksum=NONE
#加载MGR插件
plugin_load_add=‘group_replication.so’
binlog_transaction_dependency_tracking=WRITESET
transaction_write_set_extraction=XXHASH64
#刚刚生成的uuid,所有节点相同
loose-group_replication_group_name=“c357ce5e-4666-4921-b1ef-b1a24c0bbdf2”
#故障后是否自动拉起
loose-group_replication_start_on_boot=OFF
#MGR内部通信端口
loose-group_replication_local_address= “192.168.14.11:33061”
loose-group_replication_group_seeds= “192.168.14.11:33061,192.168.14.12:33061,192.168.14.13:33061”
#是否自动初始化组复制
loose-group_replication_bootstrap_group=OFF
loose-group_relication_ip_whitelist=“192.168.14.11,192.168.14.12,192.168.14.13”
report_host=192.168.14.11
report_port=3306
disabled_storage_engines=“MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY”

5、此时部署MGR的初始条件已经完成

  • 各个服务器节点都安装并启动好了mysql
  • my.cnf配置好了MGR相关参数
  • 各个服务器节点网络通信正常,防火墙关闭

6、通过mysql-shell登录mysql(所有节点执行)

注意:如果各个节点上都装了mysql-shell则可以同时执行,如果仅在一个节点装了mysql-shell也可以依次在同一节点执行。

使用root用户登录mysql-shell
mysqlsh -S /data/soft/mysql/tmp/mysql.sock root@localhost

在这里插入图片描述

第一次登陆后会询问“是否记住密码”,我们选择记住,下次登录不用输密码

7、MGR先前准备(所有节点)

JS > dba.configureInstance()

该步骤目的主要是为了创建一个最小化用户,用于MGR工作

这里选择【2】会自动完成创建,完成后可直接通过mysql.user表查看

注意!该步骤必须在所有单实例mysql上执行,目的是在每个mysql实例上都创建一个最小化用户

8、MGR引导检查(所有节点)

退出该会话,并使用刚刚新注册的用户登录

登录
mysqlsh --uri mgr@192.168.14.11:3306

校验
JS > dba.checkInstanceConfiguration()

在这里插入图片描述

该步骤的目的是通过检查配置文件来校验是否符合MGR的部署条件。
如果出现端口错误,节点配置错误等,这里都会提示错误内容。
如果返回“ok”,表示成功。

9、通过mysql-shell创建MGR集群(选择任意一个节点执行,该节点将成为主节点)

登录
mysqlsh --uri mgr@192.168.14.11@3306

创建名为test的集群
JS > var cluster = dba.createCluster(‘test’)

在这里插入图片描述

检查集群状态
JS > cluster.status()

在这里插入图片描述

可以看到,此时MGR的主节点已经创建好了

10、添加节点

如果此时退出了刚刚的会话则需要重新进入集群,否则省略该步骤
mysqlsh --uri mgr@192.168.14.11@3306
JS > var cluster = getCluster(‘test’)

添加节点
JS > cluster.addInstance(‘mgr@192.168.14.12’)

在这里插入图片描述

这里添加的方式选择clone,相当于直接全量克隆主节点的数据,然后加入集群。
需要注意的是:如果被添加的节点中本身有数据,则会被覆盖掉。

再次查看MGR状态
JS > cluster.status()

在这里插入图片描述

可以看到已经变成一主一从的MGR集群了

以同样的方式再添加一个节点
JS > cluster.addInstance(‘mgr@192.168.14.13’)

在这里插入图片描述

到此,一主两从的MGR都搭建完成了

模拟主节点宕机

kill 主节点数据库

查看MGR状态

在这里插入图片描述

看到,主节点宕机后,其中一个从节点自动升为了主,而另一个从节点变成了新主的从

节点恢复

当主节点恢复运行后,他将以新的从节点身份加入原MGR集群,同时会自动重构缺失的数据

在这里插入图片描述

彩蛋

使用mysql-shell构建MGR集群时,在创建集群、节点加入集群后会根据mysql-shell内部的规则改变MGR的通信端口。忽略配置文件的通信端口,变成默认的33061端口。

示例:
如果部署MGR时没有使用默认的33061端口

查看MGR集群内节点
mysql [(none)]>select @@group_replication_group_seeds;
±------------------------------------------------ --------------------------------+
| @@group_replication_group_seeds |
±------------------------------------------------ --------------------------------+
| 192.168.14.11:33069,192.168.14.12:33062,192.168.14.13:33063

实际本节点的端口情况
mysql [(none)]>SELECT @@group_replication_local_address;
±---------------------------------+
| @@group_replication_local_address |
±---------------------------------+
| 192.168.14.11:33061 |
±---------------------------------+

猜测是mysql-shell忘记更新启动节点(第一次构建时的主节点)group_replication_group_seeds的参数内容,导致查询出来的结果看起来有歧义。
目前已经向官方提供了bug,收到回复后会跟大家分享

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值