《Linux运维实战:Centos7.6基于ansible一键离线部署rabbitmq3.9.16镜像模式集群》

news2025/7/31 18:32:49

一、部署背景

由于业务系统的特殊性,我们需要针对不同的客户环境部署 rabbitmq镜像模式集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了基于ansible自动化工具, 一键远程离线部署rabbitmq镜像模式容器版集群,当然也会编写二进制版本,敬请期待吧!

说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?


二、功能简介

1、支持 1台主机 一键远程部署rabbitmq单实例。
2、支持 1台主机 一键远程部署rabbitmq镜像模式单机伪集群(1个磁盘节点+2个内存节点)。
3、支持 2台主机 一键远程部署rabbitmq镜像模式 分布式集群(1个磁盘节点+1个内存节点)。
4、支持 3台主机 一键远程部署rabbitmq镜像模式 分布式集群(1个磁盘节点+2个内存节点)。
5、支持一键部署所有节点或单个rabbitmq实例依次部署、启动、停止、重启、检查、移除等功能。
6、 支持数据目录、日志目录、插件目录、IP地址、端口、内存阀值、磁盘阀值、账号、密码等参数的灵活配置
7、 支持数据目录、日志目录、插件目录、配置文件目录等持久化

说明:由于当前自动化部署工具最多支持三节点模式,所以准备最多3台服务器即可。


三、工具下载

基于ansible一键离线部署rabbitmq镜像模式容器版分布式集群工具


四、工具说明

目录结构如下:
在这里插入图片描述

目录说明如下:

#1、ansible目录:存放ansible工具rpm包目录,可一键安装ansible
#2、cluster目录:存放hosts文件和config.yml文件目录,主要配置服务器信息及rabbitmq镜像模式集群配置信息
#3、example目录:存放hosts文件和config.yml模板文件
#4、images目录:存放rabbitmq镜像模式集群镜像文件,部署工具中所涉及到的镜像皆为官方镜像
#5、op.sh:rabbitmq镜像模式集群部署的主控脚本
#6、pkgs:存放sshpass和nc命令的rpm包文件
#7、playbooks:rabbitmq镜像模式集群部署的剧本文件
#8、README.txt:帮助文档
#9、roles目录:rabbitmq镜像模式集群部署的角色文件

README.txt文件内容如下:
在这里插入图片描述

op.sh主控脚本参数如下:
在这里插入图片描述

其中代码行数:4847行,使用shell语言+jinja2语言。
在这里插入图片描述


五、部署要求

1、建议提前关闭好防火墙和selinux。
2、rabbitmq模式镜像集群是基于docker和docker-compose工具, 所以rabbitmq模式镜像集群主机上提前安装好docker和docker-compose工具。


六、部署步骤

说明:根据主机数量,请选择一台主机作为主控端,其它主机作为受控端,如果服务器数量为1台,则即可为主控端,又可为受控端。主控端需提前安装好ansible工具。这里为了避免麻烦,特意写了一个离线的ansible部署脚本,可实现一键部署ansible。脚本已经集成到该工具中,开箱即用,非常方便!

在这里插入图片描述

由于文章篇幅有限,这里就只介绍,在3台主机上,如何使用ansible工具实现rabbitmq镜像模式分布式集群的一键容器化部署?


1、生成3台主机的hosts文件和config.yml文件

[root@localhost rabbitmq]# ./op.sh new node3
2023-02-24 11:33:35 DEBUG generate custom cluster files in /opt/rabbitmq/cluster/node3
2023-02-24 11:33:35 DEBUG cluster node3: files successfully created.
2023-02-24 11:33:35 INFO next steps 1: to config '/opt/rabbitmq/cluster/node3/hosts'
2023-02-24 11:33:35 INFO next steps 2: to config '/opt/rabbitmq/cluster/node3/config.yml'

2、编辑hosts文件
注意:base_dir变量无需修改,这个变量是自动生成的,只需修改服务器ip地址、ssh端口、账号密码等信息即可。

# 使用3台服务器部署3个实例rabbitmq镜像模式分布式集群
############################################公共变量#######################################################
# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录
MAX_SPACE_DIR: "/data"

# rabbitmq工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
RABBITMQ_WORK_DIR: "{{ MAX_SPACE_DIR }}/pkgs/rabbitmq-cluster"

# rabbitmq数据存放根目录,主要用来存放数据、日志、插件、配置文件等,默认不修改
RABBITMQ_DATA_DIR: "{{ MAX_SPACE_DIR }}/basic-data/rabbitmq-cluster"

# 默认用户密码,可根据实际情况填写,注意密码格式为<大小写英文字母+数字>,根据实际情况填写
RABBITMQ_DEFAULT_USER: "lolaage"
RABBITMQ_DEFAULT_PASS: "XnZKE7jGOn6SRXG"

# 内存告警阀值(相对值),建议值为0.4~0.7区间,根据实际情况修改
# 当MQ服务器使用超过内存阀值时,会触发告警,并阻塞所有正在发布消息的连接 
VM_MEMORY_HIGH_WATERMARK_RELATIVE: "0.6"

# 数据目录磁盘空间阀值(绝对值),根据实际情况修改
# 当MQ服务器数据目录的磁盘空间超过阀值时,会触发告警,并阻塞所有正在发布消息的连接
DISK_FREE_LIMIT_ABSOLUTE: "5GB"
#############################################<mq1磁盘节点变量>################################################
# mq1节点宿主机内网ip地址,默认不修改
RABBITMQ_NODE1_HOST: "192.168.1.191"

# mq1节点供客户端建立连接端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE1_PORT: "5672"

# mq1节点web页面管理端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE1_MANAGEMENT_PORT: "15672"

# mq1节点用于节点间和CLI工具通信端口,端口不冲突情况下,默认不修改 
# 注意:端口号必须设置为RABBITMQ_NODE1_DIST_PORT = RABBITMQ_NODE1_PORT + 20000
RABBITMQ_NODE1_DIST_PORT: "25672"

# mq1节点epmd用于节点间通信和CLI工具通信的端口,集群中的所有主机必须使用相同的端口 ,端口不冲突情况下,默认不修改
# 注意: 如果修改当前变量,则必须确保RABBITMQ_NODE2_ERL_EPMD_PORT与RABBITMQ_NODE1_ERL_EPMD_PORT以及RABBITMQ_NODE3_ERL_EPMD_PORT的端口号相同 
RABBITMQ_NODE1_ERL_EPMD_PORT: "4369"
#############################################<mq2内存节点变量>################################################
# mq2节点宿主机内网ip地址,默认不修改
RABBITMQ_NODE2_HOST: "192.168.1.192"

# mq2节点供客户端建立连接端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE2_PORT: "5672"

# mq2节点web页面管理端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE2_MANAGEMENT_PORT: "15672"

# mq2节点用于节点间和CLI工具通信端口,端口不冲突情况下,默认不修改 
# 注意:端口号必须设置为RABBITMQ_NODE2_DIST_PORT = RABBITMQ_NODE2_PORT + 20000
RABBITMQ_NODE2_DIST_PORT: "25672"

# mq2节点epmd用于节点间通信和CLI工具通信的端口,集群中的所有主机必须使用相同的端口 ,端口不冲突情况下,默认不修改
# 注意: 如果修改当前变量,则必须确保RABBITMQ_NODE3_ERL_EPMD_PORT与RABBITMQ_NODE2_ERL_EPMD_PORT以及RABBITMQ_NODE3_ERL_EPMD_PORT的端口号相同 
RABBITMQ_NODE2_ERL_EPMD_PORT: "4369"
#############################################<mq3内存节点变量>################################################
# mq3节点宿主机内网ip地址,默认不修改
RABBITMQ_NODE3_HOST: "192.168.1.193"

# mq3节点供客户端建立连接端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE3_PORT: "5672"

# mq3节点web页面管理端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE3_MANAGEMENT_PORT: "15672"

# mq3节点用于节点间和CLI工具通信端口,端口不冲突情况下,默认不修改 
# 注意:端口号必须设置为RABBITMQ_NODE3_DIST_PORT = RABBITMQ_NODE3_PORT + 20000
RABBITMQ_NODE3_DIST_PORT: "25672"

# mq1节点epmd用于节点间通信和CLI工具通信的端口,集群中的所有主机必须使用相同的端口 ,端口不冲突情况下,默认不修改
# 注意: 如果修改当前变量,则必须确保RABBITMQ_NODE1_ERL_EPMD_PORT与RABBITMQ_NODE2_ERL_EPMD_PORT以及RABBITMQ_NODE3_ERL_EPMD_PORT的端口号相同 
RABBITMQ_NODE3_ERL_EPMD_PORT: "4369"

4、执行部署操作

说明:如果不清楚部署操作命令,可使用其帮助命令,如下所示
在这里插入图片描述

一键部署服务

#方式一:一键部署所有节点
[root@localhost es-tools]# ./op.sh setup node3 all

#方式二:单个节点依次部署
[root@localhost es-tools]# ./op.sh setup node3 01 
[root@localhost es-tools]# ./op.sh setup node3 02 
[root@localhost es-tools]# ./op.sh setup node3 03 

一键部署结果,如下图所示:
在这里插入图片描述

查看集群节点信息,如下图所示:
在这里插入图片描述


总结:使用ansible自动化工具一键部署rabbitmq镜像模式集群,效率确实非常高,全程部署2分钟就完全搞定了,对于一些需要多次部署的场景,自动化确实很重要,可以极大的提高整个部署效率,我觉得对于运维来说,一定要有高度的自动化意识,当然这只是单个服务模块的自动化部署,如果是把整个业务系统,编写成一键自动化部署工具的化,这可能是一个非常的工程,当然,后期有机会我也会进行分享整个业务系统的一键部署是如果设计及编写的。


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

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

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

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

相关文章

git cherry-pick could not apply fb2cde669...问题解决

最近多个分支修复bug&#xff0c;在使用git cherry-pick进行小功能合并时经常会出现类似could not apply fb2cde669...的错误。具体如下图&#xff1a;具体原因是cherry-pick指定的commit内容中和当前分支有冲突导致的。具体解决分以下步骤&#xff1a;1&#xff1a;首先使用gi…

DeepLabV3+:对预测处理的详解

相信大家对于这一部分才是最感兴趣的&#xff0c;能够实实在在的看到效果。这里我们就只需要两个.py文件&#xff08;deeplab.py、predict_img.py&#xff09;。 创建DeeplabV3类 deeplab.py的作用是为了创建一个DeeplabV3类&#xff0c;提供一个检测图片的方法&#xff0c;而…

数据结构与算法入门

目录数据结构概述逻辑结构存储结构算法概述如何理解“大O记法”时间复杂度空间复杂度数据结构概述 数据结构可以简单的理解为数据与数据之间所存在的一些关系&#xff0c;数据的结构分为数据的存储结构和数据的逻辑结构。 逻辑结构 集合结构&#xff1a;数据元素同属于一个集…

Codeforces Round #848 (Div. 2)A-C

传送门 目录 A. Flip Flop Sum 代码&#xff1a; B. The Forbidden Permutation 代码&#xff1a; C. Flexible String 代码&#xff1a; A. Flip Flop Sum 题意&#xff1a;给你一个长度为n的数组&#xff08;数组元素只为1或者-1&#xff09;&#xff0c;你要且只能进行…

掌握lombok简化Java编码完成后端提效

Lombok安装 –>添加依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version><scope>provided</scope> </dependency>scopeprovided&#xff0c;说…

LinkSLA智能运维技术派-Redis的监控

Redis是一个开源&#xff0c;内存存储的数据服务器&#xff0c;可用作数据库、高速缓存和消息队列代理等场景。 首先我们对内存进行监控&#xff0c;主要指标如下&#xff1a; - used_memory:使用内存 - used_memory_rss:从操作系统分配的内存 - mem_fragmentation_ratio:内…

如何成为一名黑客?小白必学的6个基本步骤

黑客攻防是一个极具魅力的技术领域&#xff0c;但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度&#xff0c;具备很深的计算机系统、编程语言和操作系统知识&#xff0c;并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客&#xff0c;下…

交叉编译 acl

交叉编译 acl 概述 访问控制列表&#xff08;Access Control Lists&#xff0c;ACL&#xff09;是应用在路由器接口的指令列表。在 Linux 系统中&#xff0c;ACL 用于设定用户针对文件的权限&#xff0c;而不是在交换路由器中用来控制数据访问的功能&#xff08;类似于防火墙…

跑步耳机怎么选、最好用的跑步专用耳机分享

跑步时候戴着的耳机一直往下滑&#xff0c;跑步的步伐也不敢快起来&#xff0c;生怕耳机掉下去。除此之外&#xff0c;还担心跑步时流的汗水渗入到耳机里面&#xff0c;生怕因此被电到。因为没有合适的耳机在跑步时听歌&#xff0c;不但没能缓解跑步时的枯燥还徒增了些烦恼&…

力扣-市场分析

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1158. 市场分析二、解题1.错误示范①提交SQL运行结果2.正确示范①提交SQL运行结果3.错误示范②提交SQL运行结果4.正确示范②提交SQL运行结果5.其他总结前…

华为OD机试题,用 Java 解【查找接口成功率最优时间段】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

Allegro如何在关闭飞线模式下查看网络连接位置操作指导

Allegro如何在关闭飞线模式下查看网络连接位置操作指导 在用Allegro做PCB设计的时候,有时会因为设计需要,关闭飞线显示。 如何在关闭飞线显示模式下查看网络连接的位置,如下图 除了能看到网络连接的点位以外,还能看到器件的pin Number 如何显示出这种效果,具体操作如下 …

代码随想录算法训练营 || 回溯算法 491 46 47

Day25491.递增子序列力扣题目链接给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]思路有难度的一道题需要注意两个…

Google员工说出了我不敢说的心里话!

前言&#xff1a;本文来自Beyond的投稿&#xff0c;码农翻身做了修改。今天在Medium上看到一篇文章《The maze is in the mouse》&#xff0c;是一个刚从Google离职的员工写的&#xff0c;揭开了Google内部的各种问题&#xff0c;引发了很多人的共鸣&#xff0c;到目前为止&…

ChatGPT能看到图片,太神了!

闲来无事&#xff0c;给ChatGPT提供了一张图片的地址&#xff0c;他说他能看到&#xff0c;并且还描述了出来&#xff0c;真的是太神奇了。以下是对话&#xff1a; 我用Midjourney帮我生成了树世界的主界面图片了&#xff0c;很美 很好&#xff01;如果你想要分享图片&#xf…

如果不使用时钟同步工具,linux如何解决时钟同步问题?仅需要一行命令即可。

这是一篇日记&#xff0c;记录了上帝下凡出手&#xff0c;解救苍生与水火之中的神奇文章&#xff0c;如果你也有过类似的经历&#xff0c;留言关注&#xff0c;咱们交流一下~ 目录 背景&#xff08;如果不想知道可以跳过&#xff09; 一行神奇的命令 一段一段的研究 总结 背…

实现“第 24”种设计模式

传统方案 if-else 在我们编程时出现的频率&#xff0c;无需我多赘述。当逻辑复杂时&#xff0c;我们会写出很多 if-else 语句&#xff0c;于是网络上充斥着大量的相关文章&#xff0c;教我们如何去除if-else&#xff0c;大多大同小异。 归结下来&#xff0c;无非是策略模式、…

凌恩生物资讯|抗性宏基因组又一力作|抗性基因+可移动元件研究新成果!

凌恩生物合作客户&#xff1a;合肥工业大学崔康平老师团队利用凌恩生物宏基因组抗性基因研究解决方案&#xff0c;对污水处理厂活性污泥中的钆&#xff08;Gd&#xff08;III&#xff09;&#xff09;和抗生素磺胺甲噁唑&#xff08;SMX&#xff09;的联合污染情况进行了调查&a…

华为OD机试题,用 Java 解【滑动窗口最大和】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

前端无障碍适配

无障碍简介&#xff1a; 帮助一些视障群体使用手机&#xff0c;点击的热区会增加配合文字识别增加一些语音播报的功能&#xff0c;手机一般可以通过&#xff1a;设置—》辅助功能—》无障碍功能菜单 体验无障碍功能 IOS&#xff1a;设置–》辅助功能----》旁白 需求背景 会有…