导读:本期聚焦于小伙伴创作的《Docker单机部署MySQL MGR三节点集群完整配置教程与验证指南》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Docker单机部署MySQL MGR三节点集群完整配置教程与验证指南》有用,将其分享出去将是对创作者最好的鼓励。

一、环境准备与网络规划

在单机环境下通过Docker模拟3个节点的MySQL Group Replication (MGR) 集群,我们需要准备Docker环境,并规划容器的网络和端口,以避免冲突。

本次实验的网络与端口规划如下:

  • 节点1 (mgr1):容器IP 172.18.0.2,宿主机映射端口 3301,MGR通信端口 33061

  • 节点2 (mgr2):容器IP 172.18.0.3,宿主机映射端口 3302,MGR通信端口 33061

  • 节点3 (mgr3):容器IP 172.18.0.4,宿主机映射端口 3303,MGR通信端口 33061

二、创建Docker自定义网络

为了让三个MySQL容器能够通过固定的主机名相互通信,我们需要创建一个自定义的bridge网络。

docker network create --subnet=172.18.0.0/16 mgr-net

三、准备配置文件与数据目录

在宿主机上为每个节点创建配置文件目录和数据目录。

mkdir -p /data/mgr1/conf /data/mgr1/data
mkdir -p /data/mgr2/conf /data/mgr2/data
mkdir -p /data/mgr3/conf /data/mgr3/data

接下来为每个节点编写 my.cnf 配置文件。以下是节点1的配置,请将其保存在 /data/mgr1/conf/my.cnf

[mysqld]
server_id=1
log_bin=mysql-bin
binlog_format=ROW
binlog_checksum=NONE
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot=OFF
group_replication_local_address="mgr1:33061"
group_replication_group_seeds="mgr1:33061,mgr2:33061,mgr3:33061"
group_replication_bootstrap_group=OFF

节点2和节点3的配置与此类似,分别保存在对应的 conf 目录下,只需修改以下两项参数:

  • 节点2:server_id=2group_replication_local_address="mgr2:33061"

  • 节点3:server_id=3group_replication_local_address="mgr3:33061"

四、启动MySQL容器

分别启动三个MySQL容器,将配置文件和数据目录挂载进去,并指定IP、主机名和端口映射。此处使用 MySQL 8.0 镜像。

docker run -d --name mgr1 --net=mgr-net --ip=172.18.0.2 -p 3301:3306 -v /data/mgr1/conf:/etc/mysql/conf.d -v /data/mgr1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0

docker run -d --name mgr2 --net=mgr-net --ip=172.18.0.3 -p 3302:3306 -v /data/mgr2/conf:/etc/mysql/conf.d -v /data/mgr2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0

docker run -d --name mgr3 --net=mgr-net --ip=172.18.0.4 -p 3303:3306 -v /data/mgr3/conf:/etc/mysql/conf.d -v /data/mgr3/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0

五、初始化MGR集群

首先,我们需要在主节点 (mgr1) 上进行初始化操作。进入mgr1容器的MySQL命令行:

docker exec -it mgr1 mysql -uroot -proot

在mgr1的MySQL命令行中执行以下SQL,创建复制用户并启动MGR引导:

SET SQL_LOG_BIN=0;
CREATE USER repl@'%' IDENTIFIED WITH mysql_native_password BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

接着,分别进入从节点 (mgr2 和 mgr3) 容器的MySQL命令行:

docker exec -it mgr2 mysql -uroot -proot

在mgr2和mgr3的MySQL命令行中执行以下SQL,加入集群(注意不要执行引导命令):

SET SQL_LOG_BIN=0;
CREATE USER repl@'%' IDENTIFIED WITH mysql_native_password BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
START GROUP_REPLICATION;

六、验证集群状态与数据同步

在任意节点的MySQL命令行中执行以下SQL,查看集群成员状态:

SELECT * FROM performance_schema.replication_group_members;

如果三个节点的 MEMBER_STATE 都为 ONLINE,则说明集群搭建成功。

我们还可以在主节点创建数据库和表来测试同步。如果你想通过宿主机命令行快速导入SQL文件进行测试,可以使用如下重定向方式(注意小于号需要转义):

docker exec -i mgr1 mysql -uroot -proot < /path/to/your/test.sql

通过上述步骤,你就可以在单台服务器上利用Docker快速搭建一个3节点的MySQL MGR集群,非常适合用于本地开发与架构测试验证。

MySQL MGR集群部署Docker容器化Group Replication高可用数据库集群配置

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。