一、部署背景
由于业务系统的特殊性,我们需要针对不同的客户环境部署 MySQL主从复制集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了基于ansible自动化工具, 一键远程离线部署MySQL主从复制集群容器版集群,当然也会编写二进制版本,敬请期待吧!
说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?
二、功能简介
1、支持版本 5.6.50、5.7.30、8.0.30
2、支持 1台主机 一键远程部署MySQL单实例。
3、支持 1台主机 一键远程部署MySQL主从复制 单机伪集群(一主两从)。
4、支持 2台主机 一键远程部署MySQL主从复制 分布式集群(一主一从)。
5、支持 3台主机 一键远程部署MySQL主从复制 分布式集群(一主两从)。
6、支持一键部署所有节点或单个MySQL实例依次部署、启动、停止、重启、检查、移除等功能
7、 支持数据目录、日志目录、IP地址、版本号、端口、root密码等参数的灵活配置。
8、 支持数据目录、日志目录、配置文件目录等持久化。
说明:由于当前自动化部署工具最多支持三节点模式,所以准备最多3台服务器即可。
三、工具下载
基于ansible一键离线部署MySQL主从复制集群容器版分布式集群工具
四、工具说明
目录结构如下:
目录说明如下:
#1、ansible目录:存放ansible工具rpm包目录,可一键安装ansible
#2、cluster目录:存放hosts文件和config.yml文件目录
#3、example目录:存放hosts文件和config.yml模板文件
#4、images目录:存放MySQL镜像文件,部署工具中所涉及到的镜像皆为官方镜像
#5、op.sh:主控脚本
#6、pkgs:存放sshpass和nc命令的rpm包文件
#7、playbooks:剧本文件
#8、README.txt:帮助文档
#9、roles目录:部署角色文件
op.sh主控脚本参数如下:
其中代码行数:4879行,使用shell语言+jinja2语言。
五、部署要求
1、建议提前关闭好防火墙和selinux。
2、当前部署工具是基于docker和docker-compose, 所以需要提前安装好docker和docker-compose工具。
六、部署步骤
说明:根据主机数量,请选择一台主机作为主控端,其它主机作为受控端,如果服务器数量为1台,则即可为主控端,又可为受控端。主控端需提前安装好ansible工具。这里为了避免麻烦,特意写了一个离线的ansible部署脚本,可实现一键部署ansible。脚本已经集成到该工具中,开箱即用,非常方便!
由于文章篇幅有限,这里就只介绍,在3台主机上,如何使用ansible工具实现MySQL主从复制式分布式集群的一键容器化部署?
1、生成3台主机的hosts文件和config.yml文件
[root@localhost mysql_cluster]# ./op.sh new node3
2023-03-04 16:11:33 DEBUG generate custom cluster files in /opt/mysql_cluster/cluster/node3
2023-03-04 16:11:33 DEBUG cluster node3: files successfully created.
2023-03-04 16:11:33 INFO next steps 1: to config '/opt/mysql_cluster/cluster/node3/hosts'
2023-03-04 16:11:33 INFO next steps 2: to config '/opt/mysql_cluster/cluster/node3/config.yml'
2、编辑hosts文件
注意:base_dir变量无需修改,这个变量是自动生成的,只需修改服务器ip地址、ssh端口、账号密码等信息即可。
# 服务名称:mysql主从集群
# 服务器支持: <最多支持3台服务器>
# 网络环境要求:<适用于企业或单位内网环境\互联网环境>
# 说明:根据实际服务器数量进行部署规划,如不清楚,建议咨询公司运维工程师
# 部署类型:使用3台主机部署mysql一主两从集群
[mysql_cluster_1]
192.168.1.191 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7
[mysql_cluster_2]
192.168.1.192 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7
[mysql_cluster_3]
192.168.1.193 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7
# 为主机组指定变量,作用范围为整个主机组
[all:vars]
# Deploy Directory (mysql主从集群一键部署工具包workspace),不修改
base_dir="/opt/mysql_cluster"
3、编辑config.yml文件
# 使用3台服务器部署mysql一主两从集群
#######################################公共变量###############################################
# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录
MAX_SPACE_DIR: "/data"
# 需要部署的Mysql具体版本号,可选值有3个,分别为<5.6.50、5.7.30、8.0.30>
MYSQL_VERSION: "8.0.30"
# Mysql工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
MYSQL_WORK_DIR: "{{ MAX_SPACE_DIR }}/pkgs/mysql-cluster"
# Mysql数据存放根目录,主要用来存放数据、日志、插件、配置文件等,默认不修改
MYSQL_DATA_DIR: "{{ MAX_SPACE_DIR }}/basic-data/mysql-cluster"
# Mysql root用户密码,根据实际情况填写,要求密码位数8位以上,包含英文大小写、数字及特殊字符
MYSQL_ROOT_PASSWORD: "A4D3@w7ZQNbVc"
##########################################################################################
# Mysql master宿主机内网ip地址,必须与主机清单hosts文件中定义的[mysql_cluster_1]组中定义的IP相同
MYSQL_MASTER_HOST: "192.168.1.191"
# Mysql master映射宿主机端口,端口不冲突情况下,默认不修改
MYSQL_MASTER_PORT: "3301"
##########################################################################################
# Mysql slave1宿主机内网ip地址,必须与主机清单hosts文件中定义的[mysql_cluster_2]组中定义的IP相同
MYSQL_SLAVE1_HOST: "192.168.1.192"
# Mysql slave1映射宿主机端口,端口不冲突情况下,默认不修改
MYSQL_SLAVE1_PORT: "3302"
##########################################################################################
# Mysql slave2宿主机内网ip地址,必须与主机清单hosts文件中定义的[mysql_cluster_3]组中定义的IP相同
MYSQL_SLAVE2_HOST: "192.168.1.193"
# Mysql slave2映射宿主机端口,端口不冲突情况下,默认不修改
MYSQL_SLAVE2_PORT: "3303"
4、执行部署操作
说明:如果不清楚部署操作命令,可使用其帮助命令,如下所示
一键部署服务
#方式一:一键部署所有节点
[root@localhost mysql_cluster]# ./op.sh setup node3 all
#方式二:单个节点依次部署
[root@localhost mysql_cluster]# ./op.sh setup node3 06
[root@localhost mysql_cluster]# ./op.sh setup node3 07
[root@localhost mysql_cluster]# ./op.sh setup node3 08
一键部署结果,如下图所示:
查看集群节点信息,如下图所示:
总结:使用ansible自动化工具一键部署MySQL主从复制集群,效率确实非常高,全程部署2分钟就完全搞定了,对于一些需要多次部署的场景,自动化确实很重要,可以极大的提高整个部署效率,我觉得对于运维来说,一定要有高度的自动化意识,当然这只是单个服务模块的自动化部署,如果是把整个业务系统,编写成一键自动化部署工具的化,这可能是一个非常的工程,当然,后期有机会我也会进行分享整个业务系统的一键部署是如果设计及编写的。
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》