关于mysql:3-安装部署MGR集群-深入浅出MGR

32次阅读

共计 7125 个字符,预计需要花费 18 分钟才能阅读完成。

  • GreatSQL 社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。

[toc]

本文介绍如何利用 GreatSQL 8.0.25 构建一个三节点的 MGR 集群。

1. 装置筹备

筹备好上面三台服务器:

IP 端口 角色
172.16.16.10 3306 mgr1
172.16.16.11 3306 mgr2
172.16.16.12 3306 mgr3

确保三个节点间的网络是能够互通的,并且没有针对 3306 和 33061 端口的防火墙拦挡规定。

下载 GreatSQL 二进制文件包,下载地址:https://gitee.com/GreatSQL/Gr…

本文以 CentOS x86_64 环境为例,下载的二进制包名为:GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64.tar.xz,放在 /usr/local 目录下并解压缩:

$ cd /usr/local
$ tar xf GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64.tar.xz
$ cd GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64
$ ls
bin    COPYING-jemalloc  include  LICENSE         LICENSE-test  mysqlrouter-log-rotate  README.router  run    support-files
cmake  docs              lib      LICENSE.router  man           README                  README-test    share  var

2. 初始化 MySQL Server

首先筹备好 /etc/my.cnf 配置文件:

#/etc/my.cnf
[mysqld]
user = mysql
basedir=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64
datadir=/data/GreatSQL
port=3306
server_id=103306
log-bin
log_slave_updates=1
gtid_mode=ON
enforce_gtid_consistency=ON

本文仅以能失常启动 MySQL Server 和部署 MGR 为目标,所以这份配置文件极为简略,如果想要在正式场合应用,能够参考这份配置文件。

先初始化 MySQL Server:

$ mkdir -p /data/GreatSQL && chown -R mysql:mysql /data/GreatSQL
$ /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure

留神 :不要在生产环境中应用 --initialize-insecure 选项进行初始化装置,因为这么做的话,超级管理员 root 账号默认是空明码,任何人都能够应用该账号登录数据库,存在平安危险,本文中只是为了演示不便才这么做。

启动 MySQL Server:

$ /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64/bin/mysqld --defaults-file=/etc/my.cnf &

如果不出意外,则能失常启动 MySQL Server。用同样的办法也实现对另外两个节点的初始化。

此外,倡议把 GreatSQL 退出零碎 systemd 服务中,方便管理。具体方法能够参考这篇文章:将 GreatSQL 增加到零碎 systemd 服务。

3. 初始化 MGR 第一个节点

接下来筹备初始化 MGR 的第一个节点,也称之为 疏导节点

批改 /etc/my.cnf,减少以下几行和 MGR 相干的配置参数:

plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
group_replication_local_address= "172.16.16.10:33061"
group_replication_group_seeds= "172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061"
report-host=172.16.16.10

选项 report-host 的作用是向 MGR 其余节点报告本节点应用的地址,防止某个服务器上有多个主机名时,可能无奈正确找到对应关系而使得 MGR 无奈启动的问题。此外,设置了 report-host 后,批改 /etc/hosts 系统文件退出各节点的地址及主机名这个步骤就不是必须的了。

另外,留神下面配置的端口写的是 33061 而不是 3306,这是为 MGR 服务指定专用的通信端口,区别于 MySQL 失常的读写服务端口。这里的 33061 端口号能够自定义,例如写成 12345 也能够,留神该端口不能被防火墙拦挡。

利用这份配置文件,重启 MySQL Server,之后就应该能看到曾经胜利加载 group_replicaiton 插件了:

mysql> show plugins;
...
+---------------------------------+----------+--------------------+----------------------+---------+
| Name                            | Status   | Type               | Library              | License |
+---------------------------------+----------+--------------------+----------------------+---------+
...
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
...

如果没正确加载,也能够登入 MySQL Server 自行手动加载这个 plugin:

myqsl> install plugin group_replication soname 'group_replication.so';

接下来,创立 MGR 服务专用账户,并筹备配置 MGR 服务通道:

# 每个节点都要独自创立用户,因而这个操作没必要记录 binlog 并复制到其余节点
mysql> set session sql_log_bin=0;
mysql> create user repl@'%' identified by 'repl';
mysql> GRANT BACKUP_ADMIN, REPLICATION SLAVE ON *.* TO `repl`@`%`;
#创立完用户后持续启用 binlog 记录
mysql> set session sql_log_bin=1;

#配置 MGR 服务通道
#通道名字 group_replication_recovery 是固定的,不能批改
mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

接着执行上面的命令,将其设置为 MGR 的疏导节点(只有第一个节点须要这么做)后即可间接启动 MGR 服务:

mysql> set global group_replication_bootstrap_group=ON;

mysql> start group_replication;

揭示 :当整个 MGR 集群重启时,第一个启动的节点也要先设置为疏导模式,而后再启动其余节点。除此外,请勿设置疏导模式。

而后,查看 MGR 服务状态:

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 4ebd3504-11d9-11ec-8f92-70b5e873a570 | 172.16.16.10 |        3306 | ONLINE       | PRIMARY     | 8.0.25         |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+

好了,第一个节点初始化实现。

4. 持续设置另外两个节点

持续应用上面这份 /etc/my.cnf 配置文件模板:

#my.cnf
[mysqld]
user = mysql
basedir=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64
datadir=/data/GreatSQL
port=3306
server_id=113306
log-bin
log_slave_updates=1
gtid_mode=ON
enforce_gtid_consistency=ON

#mgr
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
group_replication_local_address= "172.16.16.11:33061"
group_replication_group_seeds= "172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061"
report-host=172.16.16.11

揭示 :下面的几个选项中,server_idgroup_replication_local_addressreport_host 这三个选项要批改为正确的值。在一个 MGR 集群中,各节点设置的 server_idserver_uuid 要是惟一的,然而 group_replication_group_name 的值要一样,这是该 MGR 集群的惟一标识。

重启 MySQL Server 实例后(report-host 是只读选项,须要重启能力失效),创立 MGR 服务专用账号及配置 MGR 服务通道:

mysql> set session sql_log_bin=0;
mysql> create user repl@'%' identified by 'repl';
mysql> GRANT BACKUP_ADMIN, REPLICATION SLAVE ON *.* TO `repl`@`%`;
mysql> set session sql_log_bin=1;

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';

接下来即可间接启动 MGR 服务(除了第一个节点外,其余节点都不须要再设置疏导模式):

mysql> start group_replication;

再次查看 MGR 节点状态:

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 4ebd3504-11d9-11ec-8f92-70b5e873a570 | 172.16.16.10 |        3306 | ONLINE       | PRIMARY     | 8.0.25         |
| group_replication_applier | 549b92bf-11d9-11ec-88e1-70b5e873a570 | 172.16.16.11 |        3306 | ONLINE       | SECONDARY   | 8.0.25         |
| group_replication_applier | 5596116c-11d9-11ec-8624-70b5e873a570 | 172.16.16.12 |        3306 | ONLINE       | SECONDARY   | 8.0.25         |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+----------------+

看到下面这个集群共有 3 个节点处于 ONLINE 状态,其中 172.16.16.10PRIMARY 节点,其余两个都是 SECONDARY 节点,也就是说以后这个集群采纳 单主 模式。如果采纳多主模式,则所有节点的角色都是 PRIMARY

5. 向 MGR 集群中写入数据

接下来咱们连贯到 PRIMARY 节点,创立测试库表并写入数据:

$mysql -h172.16.16.10 -uroot -Spath/mysql.sock
mysql> create database mgr;
mysql> use mgr;
mysql> create table t1(c1 int unsigned not null primary key);
mysql> insert into t1 select rand()*10240;
mysql> select * from t1;
+------+
| c1   |
+------+
| 8078 |
+------+

再连贯到其中一个 SECONDARY 节点,查看刚刚在 PRIMARY 写入的数据是否能够看到:

$mysql -h172.16.16.11 -uroot -Spath/mysql.sock
mysql> use mgr;
mysql> select * from t1;
+------+
| c1   |
+------+
| 8078 |
+------+

确认能够读取到该数据。

到这里,就实现了三节点 MGR 集群的装置部署。

参考资料、文档

  • MySQL 8.0 Reference Manual
  • 数据库内核开发 – 温正湖
  • Group Replication 原理 – 宋利兵

免责申明

因集体程度无限,专栏中不免存在错漏之处,请勿间接复制文档中的命令、办法间接利用于线上生产环境。请读者们务必先充沛了解并在测试环境验证通过前方可正式施行,防止造成生产环境的毁坏或侵害。

Enjoy GreatSQL :)

文章举荐:

GreatSQL 季报(2021.12.26)
https://mp.weixin.qq.com/s/FZ…

技术分享 |sysbench 压测工具用法浅析
https://mp.weixin.qq.com/s/m1…

故障剖析 | linux 磁盘 io 利用率高,剖析的正确姿态
https://mp.weixin.qq.com/s/7c…

技术分享 | 闪回在 MySQL 中的实现和改良
https://mp.weixin.qq.com/s/6j…

万答 #20,索引下推如何进行数据过滤
https://mp.weixin.qq.com/s/pt…

对于 GreatSQL

GreatSQL 是由万里数据库保护的 MySQL 分支,专一于晋升 MGR 可靠性及性能,反对 InnoDB 并行查问个性,是实用于金融级利用的 MySQL 分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr…

GitHub:
https://github.com/GreatSQL/G…

Bilibili:
https://space.bilibili.com/13…

微信 &QQ 群:
可搜寻增加 GreatSQL 社区助手微信好友,发送验证信息“加群”退出 GreatSQL/MGR 交换微信群

QQ 群:533341697
微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0