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


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

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

2、部署规划
| 宿主机IP | 操作系统 | 内核版本 | 节点说明 |
|---|---|---|---|
| 192.168.0.61 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | 主innodb cluster集群 |
| 192.168.0.62 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | 副本innodb cluster集群 |
| 192.168.0.63 | Ubuntu 22.04.5 LTS (Jammy Jellyfish) | 5.15.0-124-generic | router节点 |
说明:由于资源有限,这里将在一台机器上部署主innodb cluster集群,包括primary-master、primary-slave1、primary-slave2实例。在另外一台主机部署副本innodb cluster集群,包括repilica-master、repilica-slave1、repilica-slave2实例。如果你的资源足够,可分开部署这些实例。
3、准备一键部署工具包
说明:将一键部署工具包上传到repilca-slave2节点上。
4、编辑变量文件
说明:以下操作分别在Mysql InnoDB ClusterSet集群节点的部署工具包中修改cluster.conf文件,三个节点上cluster.conf文件内容一致。
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# cp cluster.conf.tpl cluster.conf
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# vim cluster.conf
如下图所示:
# 建议填写为当前磁盘最大存储空间目录,如果根(/)目录空间最大,建议填写为/data,如果挂载盘空间最大,建议填写为挂载目录
export BASE_DIR="/data"
# cpu架构,可选值为x86_64和aarch64,根据实际情况修改
export CPU_PLATFROM="aarch64"
# mysql版本,默认不修改
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"
#############################################################################################################################################################
# InnoDB ClusterSet 主集群节点信息
export MYSQL_PRIMARY_MASTER_HOST_IP="192.168.0.61" # 主集群master节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_PRIMARY_MASTER_HOST_PORT="3301" # 主集群master节点服务端口,不冲突情况下,建议不修改
export MYSQL_PRIMARY_MASTER_CONTAINER_HOSTNAME="mysql-primary-master" # 主集群master节点节点容器主机名,不冲突情况下,建议不修改
export MYSQL_PRIMARY_MASTER_CONTAINER_NAME="mysql-primary-master" # 主集群master节点节点容器名称,不冲突情况下,建议不修改
export MYSQL_PRIMARY_SLAVE1_HOST_IP="192.168.0.61" # 主集群slave1节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_PRIMARY_SLAVE1_HOST_PORT="3302" # 主集群slave1节点服务端口,不冲突情况下,建议不修改
export MYSQL_PRIMARY_SLAVE1_CONTAINER_HOSTNAME="mysql-primary-slave1" # 主集群slave1节点容器主机名,不冲突情况下,建议不修改
export MYSQL_PRIMARY_SLAVE1_CONTAINER_NAME="mysql-primary-slave1" # 主集群slave1节点容器名称,不冲突情况下,建议不修改
export MYSQL_PRIMARY_SLAVE2_HOST_IP="192.168.0.61" # 主集群slave2节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_PRIMARY_SLAVE2_HOST_PORT="3303" # 主集群slave2节点服务端口,不冲突情况下,建议不修改
export MYSQL_PRIMARY_SLAVE2_CONTAINER_HOSTNAME="mysql-primary-slave2" # 主集群slave2节点容器主机名,不冲突情况下,建议不修改
export MYSQL_PRIMARY_SLAVE2_CONTAINER_NAME="mysql-primary-slave2" # 主集群slave2节点容器名称,不冲突情况下,建议不修改
# InnoDB ClusterSet 副本集群节点信息
export MYSQL_REPLICA_MASTER_HOST_IP="192.168.0.62" # 副本集群master节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_REPLICA_MASTER_HOST_PORT="3311" # 副本集群master节点服务端口,不冲突情况下,建议不修改
export MYSQL_REPLICA_MASTER_CONTAINER_HOSTNAME="mysql-replica-master" # 副本集群master节点节点容器主机名,不冲突情况下,建议不修改
export MYSQL_REPLICA_MASTER_CONTAINER_NAME="mysql-replica-master" # 副本集群master节点节点容器名称,不冲突情况下,建议不修改
export MYSQL_REPLICA_SLAVE1_HOST_IP="192.168.0.62" # 副本集群slave1节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_REPLICA_SLAVE1_HOST_PORT="3312" # 副本集群slave1节点服务端口,不冲突情况下,建议不修改
export MYSQL_REPLICA_SLAVE1_CONTAINER_HOSTNAME="mysql-replica-slave1" # 副本集群slave1节点容器主机名,不冲突情况下,建议不修改
export MYSQL_REPLICA_SLAVE1_CONTAINER_NAME="mysql-replica-slave1" # 副本��群slave1节点容器名称,不冲突情况下,建议不修改
export MYSQL_REPLICA_SLAVE2_HOST_IP="192.168.0.62" # 副本集群slave2节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_REPLICA_SLAVE2_HOST_PORT="3313" # 副本集群slave2节点服务端口,不冲突情况下,建议不修改
export MYSQL_REPLICA_SLAVE2_CONTAINER_HOSTNAME="mysql-replica-slave2" # 副本集群slave2节点容器主机名,不冲突情况下,建议不修改
export MYSQL_REPLICA_SLAVE2_CONTAINER_NAME="mysql-replica-slave2" # 副本集群slave2节点容器名称,不冲突情况下,建议不修改
# MySQL router节点信息
export MYSQL_ROUTER_HOST_IP="192.168.0.63" # router节点宿主机ip地址,建议填写内网ip地址,根据实际情况填写
export MYSQL_ROUTER_CONTAINER_HOSTNAME="mysql-router" # router节点容器主机名,不冲突情况下,建议不修改
export MYSQL_ROUTER_CONTAINER_NAME="mysql-router" # router节点容器名称,不冲突情况下,建议不修改
export MYSQL_ROUTER_RW_PORT="6446" # 读写端口,不冲突情况下,建议不修改
export MYSQL_ROUTER_RO_PORT="6447" # 只读端口,不冲突情况下,建议不修改
export MYSQL_ROUTER_HTTP_SERVER_PORT="8443" # 内置REST API 管理端口,不冲突情况下,建议不修改
#############################################################################################################################################################
# MySQL InnoDB ClusterSet 主集群和副本集群(服务器配置账户及密码),所有节点配置账户及密码相同
export MYSQL_INNODB_CLUSTER_CONFIG_USER="ic_admin"
export MYSQL_INNODB_CLUSTER_CONFIG_PASS="ZJ#cN19FGiVJ"
# MySQL InnoDB ClusterSet 主集群和副本集群(集群管理账户及密码),所有节点管理账户及密码相同
export MYSQL_INNODB_CLUSTER_MANAGEMENT_USER="cluster_admin"
export MYSQL_INNODB_CLUSTER_MANAGEMENT_PASS="3a#hwE2WLlFu"
# MySQL InnoDB ClusterSet 主集群和副本集群(MySQL路由器账户及密码),所有节点路由器账户及密码相同
export MYSQl_INNODB_CLUSTER_ROUTER_USER="mysql_router"
export MYSQl_INNODB_CLUSTER_ROUTER_PASS="BN7m5#9apsKt"
5、分发安装包
root@localhost:/data/pkgs# scp -r mysql-innodb-clusterset-tools root@192.168.0.61:/data/pkgs
root@localhost:/data/pkgs# scp -r mysql-innodb-clusterset-tools root@192.168.0.63:/data/pkgs
6、执行部署
说明:根据cluster.conf规划,分别在MySQL8.0.43 InnoDB Clusterset集群节点上执行相应部署。
# 1、在replica-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m replica-slave2
# 2、在replica-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m replica-slave1
# 3、在replica-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m replica-master
# 4、在primary-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m primary-slave2
# 5、在primary-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m primary-slave1
# 6、在primary-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m primary-master
# 7、在router节点
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a build -m router
7、检查集群状态
./op.sh -a check -m primary-master
如下图所示:

五、其它操作
5.1、启动
说明:分别在对应主机节点上执行。
# 1、在replica-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m replica-slave2
# 2、在replica-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m replica-slave1
# 3、在replica-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m replica-master
# 4、在primary-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m primary-slave2
# 5、在primary-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m primary-slave1
# 6、在primary-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m primary-master
# 7、在router节点
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a start -m router
5.2、停止
说明:分别在对应主机节点上执行。
# 1、在replica-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m replica-slave2
# 2、在replica-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m replica-slave1
# 3、在replica-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m replica-master
# 4、在primary-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m primary-slave2
# 5、在primary-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m primary-slave1
# 6、在primary-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m primary-master
# 7、在router节点
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a stop -m router
5.3、检查
说明:分别在对应主机节点上执行。
# 1、在replica-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m replica-slave2
# 2、在replica-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m replica-slave1
# 3、在replica-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m replica-master
# 4、在primary-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m primary-slave2
# 5、在primary-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m primary-slave1
# 6、在primary-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m primary-master
# 7、在router节点
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a check -m router
5.4、卸载
说明:分别在对应主机节点上执行。
# 1、在replica-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m replica-slave2
# 2、在replica-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m replica-slave1
# 3、在replica-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m replica-master
# 4、在primary-slave2节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m primary-slave2
# 5、在primary-slave1节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m primary-slave1
# 6、在primary-master节点主机
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m primary-master
# 7、在router节点
root@localhost:/data/pkgs/mysql-innodb-clusterset-tools# ./op.sh -a clear -m router
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》
更多推荐
所有评论(0)