《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系统运维指南》

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...