《Linux运维实战:基于ansible一键离线部署容器版MySQL一主两从集群(5.6.50、5.7.30、8.0.30)》

news2025/1/15 22:56:12

一、部署背景

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++修炼之路】24.哈希应用--位图

每一个不曾起舞的日子都是对生命的辜负 哈希应用--位图哈希应用&#xff1a;位图一.提出问题二.位图概念三.位图代码四.位图应用五.经典问题哈希应用&#xff1a;位图 一.提出问题 问题&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#x…

信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网络安全检查报告和解决方案 文章目录系列文章目录前言一、中风险漏洞相对路径覆盖(RPO)漏洞二、低风险漏…

【2021.12.28】ctf逆向中的迷宫问题(含exe及wp)

【2021.12.28】ctf逆向中的迷宫问题&#xff08;含exe及wp&#xff09; 文章目录【2021.12.28】ctf逆向中的迷宫问题&#xff08;含exe及wp&#xff09;1、迷宫简介&#xff08;1&#xff09;简单例子&#xff08;2&#xff09;一般的迷宫代码2、二维迷宫&#xff08;1&#xf…

LeetCode 460. LFU 缓存 -- 哈希查询+双向链表

LFU 缓存 困难 634 相关企业 请你为 最不经常使用&#xff08;LFU&#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 int get(int key) - 如果键 key 存在于缓存中&#xff0c;则获取键…

IP网络广播对讲系统的先进性及系统功能

IP网络广播对讲系统是一套基于TCP/IP网络的纯数字IP网络对讲机系统。在物理结构上&#xff0c;IP网络广播系统与标准IP网络集成。它不仅真正实现了基于TCP/IP网络的数字音频广播、直播和点播&#xff0c;而且借助TCP/IP网络的优势&#xff0c;突破了传统模拟广播系统的局限性、…

用Python写个猜数字游戏,写游戏难道比玩游戏还好玩(12)

小朋友们好&#xff0c;大朋友们好&#xff01;我是猫妹&#xff0c;一名爱上Python编程的小学生。欢迎和猫妹一起&#xff0c;趣味学Python。今日主题开学差不多有1个月了吧&#xff1f;猫妹刚刚从寒假的玩玩玩模式切换到上学的学学学模式。你呢&#xff1f;这是猫妹的课程表&…

嵌入式中backtrace的使用

大家好&#xff0c;我是bug菌&#xff5e; backtrace主要用于调试程序时&#xff0c;能够打印出程序在运行过程中的函数调用栈&#xff0c;以帮助开发者快速定位程序出现异常或崩溃的原因。 通过backtrace的输出&#xff0c;开发者可以了解程序在哪个函数出现问题&#xff0c…

APM飞控使用动捕等外部定位

本文初次写于2023.03.03&#xff0c;pixhawk飞控应该是刷写了ArduPilot 4.1以上的版本。 机载计算机通过WIFI和vrpn_ros_client获取动捕系统&#xff08;vicon或者nokov&#xff09;的无人机定位数据&#xff08;x&#xff0c;y&#xff0c;z四元数&#xff09;&#xff0c;然…

HMM-维特比算法

HMM-维特比算法&#xff08;viterbi&#xff09;HMM回顾隐马科夫链解法&#xff1a;维特比算法&#xff08;Viterbi&#xff09;HMM回顾 最终的公式可以解释主要分为两个部分&#xff1a; P(xi|yi)&#xff0c;发射概率&#xff0c;字面意思是从一个词性中发射/生成出某一个单…

【Java】Spring Boot下的MVC

文章目录Spring MVC程序开发1. 什么是Spring MVC&#xff1f;1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC&#xff1f;3. 怎么学习Spring MVC&#xff1f;3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…

1 网关介绍

网关介绍 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。这样的话会产生很多问题&#xff0c;例如&a…

Threejs 创建的透明球体与模型前后看起来重叠解决方案

创建了球体透明的位置在后面例如 x: -2.2, y: 6, z: 0&#xff0c; 加载的模型在前面x: 2, y: 1, z: 13 ,创建的发光精灵 let spriteMaterial new THREE.SpriteMaterial({ map: spriteTexture, color: object.color, transparent: true, depthWrite: false, //深度写入属性 d…

SpringMVC中JSON数据的设置、RestFul风格

Java知识点总结&#xff1a;想看的可以从这里进入 目录3.4、JSON数据3.4.1、前端使用3.4.2、后端使用1、Jackson2、fastjson3.5、RestFul风格3.5.1、简介3.5.2、使用3.4、JSON数据 3.4.1、前端使用 前端在JavaScript中有封装的JSON对象&#xff0c;可以直接用来操作JSON数据。…

JavaSE之集合篇

文章目录前言一、集合概述集合继承结构图二、Collection接口中常用方法2.1Collection中存放什么元素&#xff1f;2.2常用方法2.3迭代器三、List接口中常用的方法四、ArrayList初始化容量及扩容五、Vector六、Map接口常用方法七、Properties前言 由于在刷题过程中&#xff0c;经…

大型三甲医院云HIS系统源码 强大的电子病历+完整文档

医院HIS系统源码云HIS系统&#xff1a;SaaS运维平台多医院入驻强大的电子病历完整文档 有源码&#xff0c;有演示 一、系统概述 采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同&am…

使用AppSmith(PagePlug )低代码平台快速构建小程序应用实践

文章目录一、入门&#xff08;一&#xff09;介绍&#xff08;二&#xff09;功能特性&#xff08;三&#xff09;体验一下&#xff08;四&#xff09;参考教程二、使用Appsmith构建商城微信小程序&#xff08;一&#xff09;说明&#xff08;二&#xff09;应用配置&#xff0…

安卓逆向_5 --- jeb 和 AndroidStudio 动态调试 smali

Jeb 工具的使用 &#xff1a;https://www.52pojie.cn/forum.php?modviewthread&tid742250&#xff1a;https://zhuanlan.zhihu.com/p/302856081动态调试 smali 有两种方法&#xff1a; Jeb 调试AndroidStudio smalidea 插件动态调试。1、Jeb 动态调试 smali ​JEB是一个…

LeetCode 236.二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己的祖…

Modbus协议初探(C#实现)

由于作者水平有限&#xff0c;如有写得不对得地方请指正 趁着今天休息&#xff0c;就折腾一下Modbus协议&#xff0c;之前零零散散的看过几篇博客&#xff0c;听说搞上位机开发的要会这个协议&#xff0c;虽然我不是搞上位机开发的&#xff0c;但个人对这个比较感兴趣。按照我个…

开发一个看番app[樱花动漫移动端app]

使用react-native开发&#xff0c;功能&#xff1a; 支持看番支持历史记录浏览支持追番 项目地址: https://github.com/HGGshiwo/Sakura 界面&#xff1a; 首页分类用户界面播放界面历史记录搜索界面全部动漫追番