总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》
一、部署背景
由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统,而作为基础组件中的rabbitmq 针对不同的客户环境需要多次部署集群,作为一个运维工程师,提升工作效率也是工作中的重要一环。所以我觉得有必要针对 X86_64 + ARM64 CPU架构rabbitmq 3.13.7容器版集群编写自动化部署工具。
| CPU架构 | docker版本 | docker-compose版本 |
|---|---|---|
| X86_64 | 26.1.3 | v2.29.0 |
| ARM64 | 26.1.3 | v2.29.0 |
二、工具介绍
一键部署工具实现功能如下:
1、多架构支持:兼容 x86_64 与 aarch64 CPU 架构。
2、支持单机MySQL部署(1 台主机运行 1 个 mysql 实例)。
3、支持单台主机部署MySQL NDB Cluster(1 台主机运行 1 个管理节点+2个数据节点+2个sql节点)。
4、支持多台主机分布式MySQL NDB Cluster集群(多台主机运行 1 个管理节点+2个数据节点+2个sql节点)。
5、安全通信:全面支持 TLS 加密,所有自动生成的证书有效期为 100 年。
6、持久化能力:配置文件、数据目录及日志目录均支持持久化存储,保障服务可靠性与可恢复性。
7、高度可配置:支持数据目录、日志目录、监听端口、root用户密码。
8、全生命周期管理:提供完整的实例管理功能,包括创建、启动、停止、状态检测及卸载。
如下图所示:


说明:工具使用非常简单,只需要修改变量文件,一分钟就可以快速帮你部署MySQL NDB Cluster集群。
三、工具下载
基于X86_64+ARM64架构CPU使用docker-compose一键离线部署MySQL8.0.43 NDB Cluster容器版集群工具
主控脚本部分内容展示:

四、部署步骤
说明:这里部署的是多机分布式集群。
1、查看帮助命令

2、部署规划
| 宿主机IP | 操作系统 | 内核版本 | 节点说明 |
|---|---|---|---|
| 192.168.0.61 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | ndb-mgm-01管理节点 |
| 192.168.0.62 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | ndb-data-01数据节点 |
| 192.168.0.63 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | ndb-data-02数据节点 |
| 192.168.0.64 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | ndb-sql-01sql节点 |
| 192.168.0.65 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | ndb-sql-02sql节点 |
3、准备一键部署工具包
说明:将一键部署工具包上传到ndb-mgm-01管理节点上。
4、编辑变量文件
说明:以下操作分别在MySQL NDB Cluster集群节点的部署工具包中修改cluster.conf文件,四个节点上cluster.conf文件内容一致。
bash
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# cp cluster.conf.tpl cluster.conf
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# vim cluster.conf
如下图所示:
bash
# 建议填写为当前磁盘最大存储空间目录,如果根(/)目录空间最大,建议填写为/data,如果挂载盘空间最大,建议填写为挂载目录
export BASE_DIR="/data"
# cpu架构,可选值为x86_64和aarch64,根据实际情况修改
export CPU_PLATFROM="aarch64"
# rabbitmq版本,默认不修改
export MYSQL_VERSION="8.0.43"
# mysql是否启用SSL连接,可选值为< yes和no >,<yes表示开启,no表示关闭>,根据实际部署需求修改
export ENABLE_TLS_SSL="no"
# mysql root用户密码,根据实际情况填写
export MYSQL_ROOT_PASSWORD="vCWNJ#k7E93r!rhN"
# mysql数据根目录,默认不修改
export MYSQL_DATA_DIR="${BASE_DIR}/basic-data/mysql-cluster"
################################################################################################################################################
# NDB Cluster集群节点信息
export NDB_MGM_01_NODE_HOST_IP="192.168.0.61" # 管理节点节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export NDB_MGM_01_NODE_HOST_PORT="1186" # 管理节点节点服务端口,不冲突情况下,建议不修改
export NDB_MGM_01_NODE_CONTAINER_HOSTNAME="ndb-mgm-01" # 管理节点节点节点容器主机名,不冲突情况下,建议不修改
export NDB_MGM_01_NODE_CONTAINER_NAME="ndb-mgm-01" # 管理节点节点节点容器名称,不冲突情况下,建议不修改
export NDB_DATA_01_NODE_HOST_IP="192.168.0.62" # 数据节点节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export NDB_DATA_01_NODE_HOST_PORT="2202" # 数据节点节点服务端口,不冲突情况下,建议不修改
export NDB_DATA_01_NODE_CONTAINER_HOSTNAME="ndb-data-01" # 数据节点节点节点容器主机名,不冲突情况下,建议不修改
export NDB_DATA_01_NODE_CONTAINER_NAME="ndb-data-01" # 数据节点节点节点容器名称,不冲突情况下,建议不修改
export NDB_DATA_02_NODE_HOST_IP="192.168.0.63" # 数据节点节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export NDB_DATA_02_NODE_HOST_PORT="2203" # 数据节点节点服务端口,不冲突情况下,建议不修改
export NDB_DATA_02_NODE_CONTAINER_HOSTNAME="ndb-data-02" # 数据节点节点节点容器主机名,不冲突情况下,建议不修改
export NDB_DATA_02_NODE_CONTAINER_NAME="ndb-data-02" # 数据节点节点节点容器名称,不冲突情况下,建议不修改
export NDB_SQL_01_NODE_HOST_IP="192.168.0.64" # SQL节点节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export NDB_SQL_01_NODE_HOST_PORT="3307" # SQL节点节点服务端口,不冲突情况下,建议不修改
export NDB_SQL_01_NODE_CONTAINER_HOSTNAME="ndb-sql-01" # SQL节点节点节点容器主机名,不冲突情况下,建议不修改
export NDB_SQL_01_NODE_CONTAINER_NAME="ndb-sql-01" # SQL节点节点节点容器名称,不冲突情况下,建议不修改
export NDB_SQL_02_NODE_HOST_IP="192.168.0.65" # SQL节点节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export NDB_SQL_02_NODE_HOST_PORT="3308" # SQL节点节点服务端口,不冲突情况下,建议不修改
export NDB_SQL_02_NODE_CONTAINER_HOSTNAME="ndb-sql-02" # SQL节点节点节点容器主机名,不冲突情况下,建议不修改
export NDB_SQL_02_NODE_CONTAINER_NAME="ndb-sql-02" # SQL节点节点节点容器名称,不冲突情况下,建议不修改
5、分发安装包
bash
root@localhost:/data/pkgs# scp -r mysql-ndb-cluster-tools root@192.168.0.62:/data/pkgs
root@localhost:/data/pkgs# scp -r mysql-ndb-cluster-tools root@192.168.0.63:/data/pkgs
root@localhost:/data/pkgs# scp -r mysql-ndb-cluster-tools root@192.168.0.64:/data/pkgs
root@localhost:/data/pkgs# scp -r mysql-ndb-cluster-tools root@192.168.0.65:/data/pkgs
5、执行部署
说明:根据cluster.conf规划,分别在MySQL8.0.43 NDB Cluster集群节点上执行部署。
bash
# 1、在ndb-mgm-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a build -m ndb-mgm-01
# 2、在ndb-data-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a build -m ndb-data-01
# 3、在ndb-data-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a build -m ndb-data-02
# 4、在ndb-sql-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a build -m ndb-sql-01
# 5、在ndb-sql-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a build -m ndb-sql-02
5、检查集群状态
bash
./op.sh -a check -m ndb-mgm-01
如下图所示:

五、其它操作
5.1、启动
说明:分别在对应主机节点上执行。
bash
# 1、在ndb-mgm-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a start -m ndb-mgm-01
# 2、在ndb-data-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a start -m ndb-data-01
# 3、在ndb-data-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a start -m ndb-data-02
# 4、在ndb-sql-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a start -m ndb-sql-01
# 5、在ndb-sql-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a start -m ndb-sql-02
5.2、停止
说明:分别在对应主机节点上执行。
bash
# 1、在ndb-mgm-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a stop -m ndb-mgm-01
# 2、在ndb-data-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a stop -m ndb-data-01
# 3、在ndb-data-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a stop -m ndb-data-02
# 4、在ndb-sql-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a stop -m ndb-sql-01
# 5、在ndb-sql-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a stop -m ndb-sql-02
5.3、检查
说明:分别在对应主机节点上执行。
bash
# 1、在ndb-mgm-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a check -m ndb-mgm-01
# 2、在ndb-data-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a check -m ndb-data-01
# 3、在ndb-data-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a check -m ndb-data-02
# 4、在ndb-sql-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a check -m ndb-sql-01
# 5、在ndb-sql-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a check -m ndb-sql-02
5.4、卸载
说明:分别在对应主机节点上执行。
bash
# 1、在ndb-mgm-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a clear -m ndb-mgm-01
# 2、在ndb-data-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a clear -m ndb-data-01
# 3、在ndb-data-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a clear -m ndb-data-02
# 4、在ndb-sql-01节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a clear -m ndb-sql-01
# 5、在ndb-sql-02节点
root@localhost:/data/pkgs/mysql-ndb-cluster-tools# ./op.sh -a clear -m ndb-sql-02
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》