​在Docker中部署GreatSQL并构建MGR集群

﹏ヽ暗。殇╰゛Y 2022-08-31 00:50 211阅读 0赞

本文首发于 GreatSQL社区 微信公众号。

原创内容未经授权不得随意使用,转载请联系小编并注明来源。

内容提纲

  • 1、安装Docker
  • 2、拉取GreatSQL镜像,并创建容器
    • 2.1 拉取镜像
    • 2.2 创建新容器
    • 2.3 容器管理
    • 2.4 容器销毁
  • 3、构建MGR集群
    • 3.1 创建专用子网
    • 3.2 创建3个新容器
    • 3.3 初始化MGR集群
    • 3.4 启动MGR服务
    • 3.5 写入测试数据
  • 4、利用Docker-compose创建Docker容器

为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL,并且构建一个MGR集群。

本文涉及的运行环境如下:

  1. [root@greatsql]# cat /etc/redhat-release
  2. CentOS Linux release 7.9.2009 (Core)
  3. [root@greatsql]# uname -a
  4. Linux GreatSQL 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

1、安装Docker

直接用yum安装docker,非常省事。

  1. [root@greatsql]# yum install -y docker

之后启动 docker 服务,并设置开机自启动。

  1. [root@greatsql]# systemctl enable docker
  2. [root@greatsql]# systemctl start docker

2、拉取GreatSQL镜像,并创建容器

2.1 拉取镜像

拉取GreatSQL官方镜像:

  1. [root@greatsql]# docker pull greatsql/greatsql
  2. docker pull greatsql/greatsql
  3. Using default tag: latest
  4. Trying to pull repository docker.io/greatsql/greatsql ...
  5. latest: Pulling from docker.io/greatsql/greatsql
  6. ...
  7. Digest: sha256:63eff1b099a75bb4e96b2c5bc7144889f6b3634a6163b56642a71a189183966c
  8. Status: Downloaded newer image for docker.io/greatsql/greatsql:latest

检查是否成功:

  1. [root@greatsql]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. docker.io/greatsql/greatsql latest d1963ef0c403 3 days ago 582 MB

2.2 创建新容器

之后,就可以直接创建一个新的容器了,先用常规方式。

  1. [root@greatsql]# docker run -d \
  2. --name mgr1 --hostname=mgr1 \
  3. -p 3306:3306 -p 33060:33060 -p 33061:33061 \
  4. -e MYSQL_ALLOW_EMPTY_PASSWORD=1 \
  5. -e MYSQL_IBP=1G \
  6. -e MYSQL_MGR_NAME='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1' \
  7. -e MYSQL_MGR_LOCAL='172.17.0.2:33061' \
  8. -e MYSQL_MGR_SEEDS='172.17.0.2:33061,172.17.0.3:33061,172.17.0.4:33061' \
  9. -e MYSQL_INIT_MGR=1 \
  10. -e MYSQL_MGR_USER='repl' \
  11. -e MYSQL_MGR_USER_PWD='repl' \
  12. greatsql/greatsql

几个参数分别解释如下:




















































































参数 必选/可选 默认值 解释
-d 必选 声明以daemon守护进程方式运行,而不是一次性运行
—name mgr1 可选 随机生成 指定容器名,方便后面调用
—hostname mgr1 可选 容器ID 指定容器内的主机名,否则会用容器ID作为主机名
-p 3306:3306 可选 指定容器要暴露的端口号,方便用TCP方式远程连接
-e MYSQL_ALLOW_EMPTY_PASSWORD=1 必选 允许root使用空密码(本案中启用该选项,为了方便),也可以指定密码,或者使用随机密码,下面介绍
-e MYSQL_IBP=1G 可选 128M 设置 innodb_buffer_pool_size 的值
-e MYSQL_MGR_NAME=’aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1’ 可选 aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1 设置MGR集群名
-e MYSQL_MGR_LOCAL=’172.17.0.2:33061’ 可选 172.17.0.2:33061 设置MGR本地节点IP+PORT
-e MYSQL_MGR_SEEDS=’172.17.0.2:33061,
172.17.0.3:33061,
172.17.0.4:33061’
可选 172.17.0.2:33061,172.17.0.3:33061 设置MGR集群各节点列表
-e MYSQL_INIT_MGR=1 可选 0 自动初始化MGR相关工作
-e MYSQL_MGR_USER=’repl’ 可选 repl 设置MGR服务账户名
-e MYSQL_MGR_USER_PWD=’repl’ 可选 repl4MGR 设置MGR服务账户密码

greatsql/greatsql,是镜像名,也可以指定为镜像的ID,例如 d1963ef0c403

如果不想让 root 账户使用空密码,可以把 MYSQL_ALLOW_EMPTY_PASSWORD=1 参数替换成诸如 MYSQL_ROOT_PASSWORD='GreatSQL3#)^' 或者指定随机密码 MYSQL_RANDOM_ROOT_PASSWORD=1 即可。

当启用选项 MYSQL_INIT_MGR=1 时,会自动创建MGR所需的账户,并执行 CHANGE MASTER TO 指定MGR复制通道。

若没有同时指定 MYSQL_MGR_USERMYSQL_MGR_USER_PWD 的话,则采用各自的默认值创建MGR账户。

这就成功创建一个新的容器了,并且会自动完成GreatSQL的初始化并启动。

2.3 容器管理

先确认容器的状态:

  1. [root@greatsql]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 2e277c852f52 d1963ef0c403 "/docker-entrypoin..." 4 minutes ago Up 12 minutes 3306/tcp, 33060-33061/tcp mgr1

看到容器状态是Up的,表示已正常启动了。

再进入容器查看:

  1. [root@greatsql]# docker exec -it mgr1 /bin/bash
  2. [root@mgr1 ~]# mysqladmin ver
  3. mysqladmin Ver 8.0.23-14 for Linux on x86_64 (GreatSQL (GPL), Release 14, Revision)
  4. ...
  5. Server version 8.0.23-14
  6. Protocol version 10
  7. Connection Localhost via UNIX socket
  8. UNIX socket /data/GreatSQL/mysql.sock
  9. Uptime: 11 min 19 sec
  10. Threads: 2 Questions: 2 Slow queries: 0 Opens: 120 Flush tables: 3 Open tables: 36 Queries per second avg: 0.002

看到容器已经完成初始化,并且可以直接无密码登入。

查看MGR账户及相应复制通道:

  1. [root@GreatSQL][(none)]> show grants for repl;
  2. +----------------------------------------------+
  3. | Grants for repl@% |
  4. +----------------------------------------------+
  5. | GRANT REPLICATION SLAVE ON *.* TO `repl`@`%` |
  6. | GRANT BACKUP_ADMIN ON *.* TO `repl`@`%` |
  7. +----------------------------------------------+
  8. [root@GreatSQL][none]> select * from performance_schema.replication_group_members;
  9. +---------------------------+-----------+-------------+-------------+--------------+-------------+----------------+
  10. | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
  11. +---------------------------+-----------+-------------+-------------+--------------+-------------+----------------+
  12. | group_replication_applier | | | NULL | OFFLINE | | |
  13. +---------------------------+-----------+-------------+-------------+--------------+-------------+----------------+

还可以把这个容器当做服务对其进行关闭、启动、重启、挂起等操作:

  1. kill Kill one or more running containers
  2. pause Pause all processes within one or more containers
  3. ps List containers
  4. restart Restart one or more containers
  5. rm Remove one or more containers
  6. start Start one or more stopped containers
  7. stop Stop one or more running containers
  8. unpause Unpause all processes within one or more containers
  9. update Update configuration of one or more containers
  10. wait Block until one or more containers stop, then print their exit codes

可以自行挨个尝试。

2.4 容器销毁

如果想要销毁该容器,需要先停止该容器后,再执行 docker rm [容器ID|容器名] 命令即可:

  1. [root@greatsql]# docker stop mgr1
  2. [root@greatsql]# docker rm mgr1

如果是想销毁某个镜像,运行 docker rmi [镜像ID|镜像名] 命令即可,不过要先确保该镜像目前没有被其他容器所使用后,方可删除:

  1. [root@greatsql]# docker rmi greatsql/greatsql

销毁容器、镜像之后,相应的数据目录也不再需要了,可以执行下面的命令清除:

  1. [root@greatsql]# docker volume prune
  2. WARNING! This will remove all volumes not used by at least one container.
  3. Are you sure you want to continue? [y/N] y
  4. Deleted Volumes:
  5. 5a68a6286361f92430dbc4c1a2d1bd65a2db707274bd4d3dd9d53cdf58a5ac5f
  6. 3ae2211c61187371c312a606e36bc361e549e830ab5896356e7a920266574666
  7. cbbfa248d2fc827d92ceac231b52b61ab7cfe92479f2e84969bd516dd211416f
  8. 1c95278033575062b7f15e3e3f1319290d8dcfc7caba1c50b47592f665ba5456
  9. Total reclaimed space: 13.08 GB

3、构建MGR集群

跨宿主机之间的docker容器网络通信相对麻烦一些,为了简单起见,本次先在单机环境下构建由3个docker容器组成的MGR集群。

3.1 创建专用子网

首先创建一个用于MGR集群的网络:

  1. [root@greatsql]# docker network create mgr-net
  2. [root@greatsql]# docker network ls
  3. NETWORK ID NAME DRIVER SCOPE
  4. 70c3ac08c7a9 bridge bridge local
  5. 3a480a3ec570 host host local
  6. 191d6d902b26 mgr-net bridge local
  7. 1e3e6267dcda none null local

查看这个子网的配置信息:

  1. [root@greatsql]# docker inspect mgr-net
  2. [
  3. {
  4. "Name": "mgr-net",
  5. ...
  6. "Subnet": "172.18.0.0/16", <-- 网段
  7. "Gateway": "172.18.0.1" <-- 网关
  8. ...

3.2 创建3个新容器

分别启动三个docker容器:

  1. [root@greatsql]# docker run -d \
  2. --name mgr1 --hostname=mgr1 --net=mgr-net \
  3. -e MYSQL_ALLOW_EMPTY_PASSWORD=1 \
  4. -e MYSQL_MGR_LOCAL='172.18.0.2:33061' \
  5. -e MYSQL_MGR_SEEDS='172.18.0.2:33061,172.18.0.3:33061,172.18.0.4:33061' \
  6. -e MYSQL_INIT_MGR=1 \
  7. greatsql/greatsql

后面的两个实例,只把 —name 和 —hostname 参数中的mgr1改成mgr2、mgr3,并且把 -e MYSQL_MGR_LOCAL='172.18.0.2:33061' 参数的的IP地址递增,例如 -e MYSQL_MGR_LOCAL='172.18.0.3:33061'

查看容器运行状态:

  1. [root@greatsql]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 1bcd23c6f378 d1963ef0c403 "/docker-entrypoin..." 2 minutes ago Up 2 minutes 3306/tcp, 33060-33061/tcp mgr3
  4. 9d12ab273d81 d1963ef0c403 "/docker-entrypoin..." 2 minutes ago Up 2 minutes 3306/tcp, 33060-33061/tcp mgr2
  5. 56fd564a1789 d1963ef0c403 "/docker-entrypoin..." 4 minutes ago Up 4 minutes 3306/tcp, 33060-33061/tcp mgr1

分别查看3个容器的IP地址:

  1. [root@greatsql]# docker inspect mgr1 | grep IPAddress
  2. "SecondaryIPAddresses": null,
  3. "IPAddress": "172.18.0.2",
  4. "IPAddress": "172.18.0.2",

第一个容器的IP地址是 172.18.0.2,另外两个容器分别是 172.18.0.3172.18.0.4(递增关系)。

因为我启动容器时指定的新创建的网络 mgr-net,所以是 172.18.0.0/24 网段。如果不指定新创建的网络,则默认应该是 172.17.0.0/24 网段,注意区别。

编辑三个容器下的 /etc/hosts 文件,加入所有节点的hostname配置:

  1. 172.18.0.2 mgr1
  2. 172.18.0.3 mgr2
  3. 172.18.0.4 mgr3

提醒:docker容器重启后,容器里的 /etc/hosts 文件内容会重置,所以建议用映射volumes的方式挂进来。

在宿主机上编辑好一个文件 /data/docker/hosts

  1. [root@greatsql]# cat /data/docker/hosts
  2. 127.0.0.1 localhost.localdomain localhost
  3. 127.0.0.1 localhost4.localdomain4 localhost4
  4. ::1 localhost.localdomain localhost
  5. ::1 localhost6.localdomain6 localhost6
  6. 172.18.0.2 mgr1
  7. 172.18.0.3 mgr2
  8. 172.18.0.4 mgr3

在创建docker容器时映射挂载到容器的 /etc/hosts 文件:

  1. [root@greatsql]# docker run -d \
  2. ...
  3. -v /data/docker/hosts:/etc/hosts \
  4. ...
  5. greatsql/greatsql

也可以在创建容器时,直接用 --add-host 指定,例如:

  1. [root@greatsql]# docker run -d \
  2. ...
  3. --add-host "mgr1:172.18.0.2" --add-host "mgr2:172.18.0.3" --add-host "mgr3:172.18.0.4"\
  4. ...
  5. greatsql/greatsql

3.3 初始化MGR集群

接下来准备初始化MGR集群。

选择第一个容器 mgr1 作为 PRIMARY节点,设置该容器的MGR的引导,然后启动MGR服务:

  1. [root@greatsql]# docker exec -it mgr1 /bin/bash
  2. [root@mgr1 ~]# mysql -S/data/GreatSQL/mysql.sock
  3. ...
  4. #设置本节点为MGR引导启动节点,【注意】其他节点无需执行本操作
  5. SET GLOBAL group_replication_bootstrap_group=ON;
  6. #启动MGR服务
  7. START GROUP_REPLICATION;
  8. #启动完MGR服务后,关闭引导参数
  9. SET GLOBAL group_replication_bootstrap_group=OFF;

因为在创建容器时已经完成了创建账户及授权等操作,所以可以直接启动MGR服务。

如果在创建容器时未指定 -e MYSQL_INIT_MGR=1 选项,则还需要手动执行下面的命令创建账户,授权,并创建MGR复制通道:

  1. SET SQL_LOG_BIN=0;
  2. CREATE USER repl IDENTIFIED with mysql_native_password BY 'repl4MGR';
  3. GRANT REPLICATION SLAVE, BACKUP_ADMIN ON *.* TO repl;
  4. CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl4MGR' FOR CHANNEL 'group_replication_recovery';

3.4 启动MGR服务

在另外的两个docker容器里,记住不要设置 group_replication_bootstrap_group=ON,直接启动 MGR服务即可。

查看所有节点都启动后的MGR服务状态:

  1. [root@GreatSQL][(none)]> select * from performance_schema.replication_group_members;
  2. +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
  3. | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
  4. +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
  5. | group_replication_applier | 63b55594-da80-11eb-94bf-0242ac120003 | mgr2 | 3306 | ONLINE | SECONDARY | 8.0.23 |
  6. | group_replication_applier | 6d33eb83-da80-11eb-91ed-0242ac120004 | mgr3 | 3306 | ONLINE | SECONDARY | 8.0.23 |
  7. | group_replication_applier | 7b1e33b1-da7f-11eb-8157-0242ac120002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.23 |
  8. +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

在这个阶段,MGR服务无法启动的常见原因有:

  • 没有在 /etc/hosts中正确设置各节点的 hostname,会提示无法连接远程主机。
  • 利用docker创建的子网超过了RFC 1918定义的保留私有网络地址范围(A 类:10.0.0.0~10.255.255.255,B 类:172.16.0.0~172.31.255.255,C 类:192.168.0.0~192.168.255.255)。
  • 除去在选择作为PRIMARY节点上设置 group_replication_bootstrap_group=ON 外,其他节点上也设置了,会造成启动一个新的PRIMARY节点。
  • 各节点创建MGR账号后,会产生BINLOG,因此要执行 SET SQL_LOG_BIN=0 或者创建账号后再执行 RESET MASTER,否则会提示本地节点比远程节点的事务数更多,无法加入集群。

上述几种场景我都遇到过,可能还有其他更多情况,欢迎补充。

3.5 写入测试数据

这就构建完毕了,可以尝试在 PRIMARY节点 中创建库表并写入测试数据:

  1. #提醒:从这里开始要重新启动binlog记录
  2. [root@GreatSQL][(none)]> SET SQL_LOG_BIN=1;
  3. [root@GreatSQL][(none)]> create database mymgr;
  4. [root@GreatSQL][(none)]> use mymgr;
  5. [root@GreatSQL][(mymgr)]> create table t1(id int primary key);
  6. [root@GreatSQL][(mymgr)]> insert into t1 select rand()*10240;
  7. [root@GreatSQL][mymgr]>select * from t1;
  8. +------+
  9. | id |
  10. +------+
  11. | 3786 |
  12. +------+

4、利用Docker-compose创建Docker容器

如果觉得手工管理麻烦,也可以选用 docker-compose ,它可以更方便的管理docker容器。

先用yum安装docker-compose,并确认版本号:

  1. [root@greatsql]# yum install -y docker-compose
  2. [root@greatsql]# docker-compose --version
  3. docker-compose version 1.18.0, build 8dd22a9

编辑docker-compose的配置文件,其实就是把创建docker容器的命令行参数固化到配置文件而已:

  1. [root@greatsql]# mkdir -p /data/docker-compose
  2. [root@greatsql]# vi /data/docker-compose/compose-mgr.yml
  3. version: '3'
  4. services:
  5. mgr1:
  6. image: greatsql/greatsql
  7. container_name: mgr1
  8. hostname: mgr1
  9. network_mode: bridge
  10. restart: unless-stopped
  11. environment:
  12. TZ: Asia/Shanghai
  13. MYSQL_ALLOW_EMPTY_PASSWORD: 1
  14. MYSQL_INIT_MGR: 1
  15. MYSQL_MGR_LOCAL: '172.17.0.2:33061'
  16. MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061,172.17.0.4:33061'
  17. extra_hosts:
  18. - "mgr1:172.17.0.2"
  19. - "mgr2:172.17.0.3"
  20. - "mgr3:172.17.0.4"
  21. mgr2:
  22. image: greatsql/greatsql
  23. container_name: mgr2
  24. hostname: mgr2
  25. network_mode: bridge
  26. restart: unless-stopped
  27. depends_on:
  28. - "mgr1"
  29. environment:
  30. TZ: Asia/Shanghai
  31. MYSQL_ALLOW_EMPTY_PASSWORD: 1
  32. MYSQL_INIT_MGR: 1
  33. MYSQL_MGR_LOCAL: '172.17.0.3:33061'
  34. MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061,172.17.0.4:33061'
  35. extra_hosts:
  36. - "mgr1:172.17.0.2"
  37. - "mgr2:172.17.0.3"
  38. - "mgr3:172.17.0.4"
  39. mgr3:
  40. image: greatsql/greatsql
  41. container_name: mgr3
  42. hostname: mgr3
  43. network_mode: bridge
  44. restart: unless-stopped
  45. depends_on:
  46. - "mgr2"
  47. environment:
  48. TZ: Asia/Shanghai
  49. MYSQL_ALLOW_EMPTY_PASSWORD: 1
  50. MYSQL_INIT_MGR: 1
  51. MYSQL_MGR_LOCAL: '172.17.0.4:33061'
  52. MYSQL_MGR_SEEDS: '172.17.0.2:33061,172.17.0.3:33061,172.17.0.4:33061'
  53. extra_hosts:
  54. - "mgr1:172.17.0.2"
  55. - "mgr2:172.17.0.3"
  56. - "mgr3:172.17.0.4"

启动三个实例:

  1. [root@greatsql]# docker-compose -f /data/docker-compose/compose-mgr.yml up -d
  2. Name Command State Ports
  3. Creating mgr1 ... done
  4. Creating mgr2 ... done
  5. Creating mgr3 ... done
  6. Creating mgr2 ...
  7. Creating mgr3 ...

查看运行状态:

  1. [root@greatsql]# docker-compose -f /data/docker-compose/compose-mgr.yml up -d
  2. Name Command State Ports
  3. ----------------------------------------------------------------------------
  4. mgr1 /docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp, 33061/tcp
  5. mgr2 /docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp, 33061/tcp
  6. mgr3 /docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp, 33061/tcp

进入被选为PRIMARY节点的容器mgr1,启动MGR服务:

  1. [root@greatsql]# docker exec -it mgr1 bash
  2. [root@mgr1 /]# mysql
  3. ...
  4. [root@GreatSQL][(none)]> set global group_replication_bootstrap_group=ON;
  5. [root@GreatSQL][(none)]> start group_replication;

进入其他SECONDARY节点的容器,直接启动MGR服务:

  1. [root@greatsql]# docker exec -it mgr2 bash
  2. [root@mgr2 /]# mysql
  3. ...
  4. [root@GreatSQL][(none)]> start group_replication;
  5. Query OK, 0 rows affected (2.76 sec)
  6. #查看MGR服务状态
  7. [root@GreatSQL][(none)]>select * from performance_schema.replication_group_members;
  8. +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
  9. | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
  10. +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
  11. | group_replication_applier | f0bd73d4-dbcb-11eb-99ba-0242ac110002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.23 |
  12. | group_replication_applier | f1010499-dbcb-11eb-9194-0242ac110003 | mgr2 | 3306 | ONLINE | SECONDARY | 8.0.23 |
  13. +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

照旧,继续启动mgr3节点,一个三节点的MGR集群就完成了。

GreatSQL-Docker相关文档已经发布到https://gitee.com/GreatSQL/GreatSQL-Docker,欢迎关注。

此外,GreatSQL Docker镜像文件也已发布到 https://hub.docker.com/r/greatsql/greatsql欢迎下载体验。

水平有限,也请各位读者大人帮忙看看哪些可以优化的地方,感谢。

最后要特别感谢近期在折腾docker、ansible中提供帮助的多位朋友,分别是谢恒忠、吕保成、Fan()、Coral、戴先森等(排名不分先后)。

Enjoy GreatSQL & Docker :)


文章推荐:

  • 技术分享 | MGR最佳实践(MGR Best Practice)
  • 技术分享 | 万里数据库MGR Bug修复之路
  • 技术分享 | 将GreatSQL添加到系统systemd服务
  • 自制GreatSQL Docker镜像
  • 金融应用场景下跨数据中心的MGR架构方案(2)
  • 技术分享 | InnoDB Cluster+GreatSQL快速部署MGR集群,并实现读写分离和故障自动转移(超详细)
  • 技术分享 | 利用GreatSQL部署MGR集群,并完成添加新节点 、滚动升级、切主(超详细)
  • 《叶问》33期,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查

  • MySQL 复制延迟 Seconds_Behind_Master 究竟是如何计算的

  • GreatSQL MGR优化参考

  • GreatSQL,打造更好的MGR生态


扫码加入GreatSQL/MGR交流QQ群

3b51cfe0a42d9bacc3a6c5de036be2b0.png

点击文末“阅读原文”直达老叶专栏

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读