总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《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系统运维指南》

更多推荐