MySQL通过mysqlshell部署MGR

2023年 11月 24日 67.2k 0

本文将从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

MySQL-通过mysql-shell部署MGR-1

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

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

JS > dba.configureInstance()

MySQL-通过mysql-shell部署MGR-2

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

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

注意!再说一遍,该操作需要在每个MGR节点执行,也就是说每个mysql单实例上都需要创建这个最小化用户。

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

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

登录
mysqlsh --uri mgr@192.168.14.11:3306

校验
JS > dba.checkInstanceConfiguration()

MySQL-通过mysql-shell部署MGR-3

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

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

登录
mysqlsh --uri mgr@192.168.14.11@3306

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

MySQL-通过mysql-shell部署MGR-4

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

MySQL-通过mysql-shell部署MGR-5

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

10、添加节点

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

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

MySQL-通过mysql-shell部署MGR-6

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

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

MySQL-通过mysql-shell部署MGR-7

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

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

MySQL-通过mysql-shell部署MGR-8

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

模拟主节点宕机

kill 主节点数据库

查看MGR状态

MySQL-通过mysql-shell部署MGR-1

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

节点恢复

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

MySQL-通过mysql-shell部署MGR-10

彩蛋

使用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,收到回复后会跟大家分享

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论