《Linux运维实战:基于ansible一键离线部署容器版MySQL一主两从集群(5.6.50、5.7.30、8.0.30)》
创始人
2024-05-28 18:23:26
0

一、部署背景

由于业务系统的特殊性,我们需要针对不同的客户环境部署 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系统运维指南》

相关内容

热门资讯

小学师德报告会的主持词 小学师德报告会的主持词各位领导,各位老师:  大家下午好!采撷着金秋十月的累累硕果,收藏着金秋十月的...
《像小强一样儿活着》的经典台... 《像小强一样儿活着》的经典台词  《像小强一样活着》改编自同名网络小说,是难得的本土电影。曾有影评家...
汇演主持词 汇演主持词  主持词要根据活动对象的不同去设置不同的主持词。在人们积极参与各种活动的今天,主持人在各...
联欢会主持词结束语 联欢会主持词结束语(通用6篇)  晚会开得就是否成功圆满与主持人的讲话有很大关系。下面小编整理的联欢...
幼儿园毕业晚会主持词 幼儿园毕业晚会主持词  主持人在台上表演的灵魂就表现在主持词中。时代不断在进步,司仪等是很多场合都需...
美剧经典台词 美剧精选经典台词  在快速变化和不断变革的今天,能够利用到台词的场合越来越多,台词是一种特殊的,也是...
朗诵会主持词 关于朗诵会主持词4篇  主持词要根据活动对象的不同去设置不同的主持词。在当下这个社会中,很多场合都需...
记者节晚会主持词 记者节晚会主持词  主持词是主持人在台上表演的灵魂之所在。随着社会一步步向前发展,主持词的实用频率越...
婚礼父亲致辞 婚礼父亲致辞(精选15篇)  在平凡的学习、工作、生活中,大家肯定对各类致辞都很熟悉吧,致辞具有“礼...
校园红歌赛的主持词 校园红歌赛的主持词  主持词是主持人在节目进行过程中用于串联节目的串联词。在现今人们越来越重视活动氛...
开业主持词开场白 开业主持词开场白  根据活动对象的不同,需要设置不同的主持词。在当今社会生活中,活动集会越来越多,主...
关于唱歌比赛主持词   主持词是指主持人在主持节目的过程中进行节目串联的串联词,一般由开场白、中间部分与结束语组成。以下...
动漫感人台词 动漫感人台词(通用175句)  台词可以刻画人物的性格,表现人物的感情,加强剧情的表现力。那些广为流...
最新年会主持词 最新年会主持词(精选11篇)  契合现场环境的主持词能给集会带来双倍的效果。在如今这个时代,主持人的...
新生文艺汇演主持词 新生文艺汇演主持词  主持词要根据活动对象的不同去设置不同的主持词。在当今社会生活中,各种集会的节目...
家长代表幼儿园毕业典礼主持词 家长代表幼儿园毕业典礼主持词  主持词是各种演出活动和集会中主持人串联节目的串联词。在人们积极参与各...
学校元旦晚会主持词开场白和结... 学校元旦晚会主持词开场白和结束语  2017年元旦晚会主持词怎么写?怎么开场比较好呢?结束语又该怎么...
毕业晚会致辞 毕业晚会致辞(精选18篇)  在学习、工作或生活中,大家都写过致辞吧,致辞要求风格的雅、俗、庄、谐要...
幼儿园六一节目串词 幼儿园六一节目串词红黄蓝幼第一文库网儿园节目串词主持人(师):亲爱的家长朋友们( ):敬爱的老师们(...
祝寿主持词 祝寿主持词  主持词要尽量增加文化内涵、寓教于乐,不断提高观众的文化知识和素养。在人们积极参与各种活...