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

news2025/7/19 21:52:07

一、部署背景

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

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


二、功能简介

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


三、工具下载

基于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/368812.html

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

相关文章

RT-Thread移植到STM32F407

文章目录第一步&#xff1a;获取RT-Thread源码第二步&#xff1a;项目结构介绍第三步&#xff1a;拷贝示例代码到裸机工程第四步&#xff1a;删除无用文件第五步&#xff1a;修改工程目录结构第六步&#xff1a;添加工程文件路径第七步&#xff1a;编译第八步&#xff1a;修改配…

MySQL进阶篇之视图/存储过程/触发器

今天我们主要来快速学习视图&#xff0c;存储过程&#xff0c;触发器四个方面的内容&#xff0c;一起加油学习吧&#xff0c;还有半年就有秋招了&#xff0c;要加快速度了&#xff0c;迫在眉睫&#xff0c;冲吧&#xff0c;兄弟们。 目录 1、视图 2、存储过程 3、存储函数 4、…

Linux系统Nginx下载和安装

文章目录golang学习面试网站Linux启动nginx参考Linux启动nginx版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/weixin_36755535/article/details/110…

使用GDAL进行坐标转换

1、地理坐标系与投影坐标系空间参考中主要包含大地水准面、地球椭球体、投影坐标系等几部分内容。地图投影就是把地球表面的任意点&#xff0c;利用一定数学法则&#xff0c;转换到地图平面上的理论和方法&#xff0c;一般有两种坐标系来进行表示&#xff0c;分别是地理坐标系和…

Free for photo container detection, container damage detect PaaS

集装箱箱号识别API免费&#xff0c;飞瞳引擎集装箱人工智能平台&#xff0c;可通过API二次开发或小程序拍照使用&#xff0c;可二次开发应用码头港区海关仓库口岸铁路场站船公司堆场&#xff0c;实现云端集装箱信息识别/集装箱箱况残损检测/好坏箱检验&#xff0c;高检测率/高实…

对话数字化经营新模式:第2届22客户节(22Day)年猪宴圆满结束!

2023年2月22日&#xff0c;由杭州电子商务研究院联合贰贰网络(集团)、TO B总监联盟等发起举办的“第二届客户节22Day”暨2022年度爱名奖 AM AWARDS颁奖及22年猪宴沙龙活动圆满结束。 &#xff08;主持人&#xff1a;杜灵芝&#xff09; 本次沙龙邀请到浙江工业大学管理学院程志…

windows版 redis在同意局域网下互联

项目场景&#xff1a; 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析&#xff1a; 没有放行对方的地址 解决方案&#xff1a; 修改配置文件 最重要的一步如下 然后把 redis.windows.conf的文件也照上面的修改一下保持一致 然后安装一下redis服务这…

腾讯在海外游戏和短视频广告领域的新增长机会

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 腾讯(00700)的收入在过去几个季度一直在下降&#xff0c;部分原因是由于新冠疫情导致的经济放缓以及中国监管机构对大型科技公司的监管收紧导致游戏行业萎缩造成的。 然而&#xff0c;猛兽财经认为&#xff0c;这些不利因素…

java 面试问题(一)

文章目录1、Iterator 怎么使用2、Iterator 和 ListIterator 有什么区别3、怎么确保一个集合不能被修改4、 队列和栈是什么5、什么是 Java 的内存模型6、Volatile 关键字的作用7、Volatile 与 Synchronized 比较8、ThreadLocal 介绍9、ThreadLocal 与 Synchronized 的区别10、哪…

十五、多路查找树

1、二叉树与B树 1.1 二叉树的问题分析 二叉树的操作效率较高&#xff0c;但是也存在问题&#xff0c;请看下面的二叉树 二叉树需要加载到内存中&#xff0c;如果二叉树的节点少&#xff0c;没有什么问题&#xff0c;但是如果二叉树的节点很多&#xff08;比如 1 亿&#xff…

使用antlr实现一个简单的表达式解析

背景 之前在做游戏的过程中&#xff0c;我们经常需要解析一些公式&#xff0c;比如(对方攻击值-对方防御值)*2这种表达式&#xff0c;我们习惯于用代码写死公式&#xff0c;但是这种方式不够灵活&#xff0c;我们想要的是一种灵活的解析方式&#xff0c; 只需要策划输入一个任…

教师管理系统的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;1.1 计算机管理教师的意义近年来&#xff0c;随着经济的发展&#xff0c;教育正面向着大型化、规模化的方向发展&#xff0c;教师数量急剧增加&#xff0c;有关教师的各种信息量也成倍增长。在这种情况下用计算机可使人们从繁重的劳…

微机原理复习(周五),计算机组成原理图

1.计算机由运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备等5大基本部件组成。 2.冯诺依曼提出存储设计思想是&#xff1a;数字计算机的数制采用二进制&#xff0c;存储程序&#xff0c;程序控制。 3.计算机的基本组成框图&#xff1a…

什么是分组柱状图?

柱形图是我们做数据分析时最常用的图表类型之一&#xff0c;很多时候都需要制作分组展示的柱形图&#xff0c;以分类别的展示各种维度的数据情况。上文我已经介绍过堆叠柱状图&#xff0c;因此本文将分享分组柱形图的知识。 分组柱状图&#xff0c;又叫聚合柱状图。当使用者需要…

正点原子linux驱动篇

linux驱动开发与裸机开发的区别 裸机直接操作寄存器&#xff0c;有些mcu提供了库&#xff0c;但还是很底层 1、linux驱动开发直接操作寄存器很麻烦不现实&#xff0c;主要是根据linux驱动框架进行开发&#xff08;就是有很多操作都是一样的&#xff0c;我们只需要对一个程序模…

linux安装nodejs和微信小程序自动化部署操作

一.运行环境安装 Node.js 并且版本大于 8.0基础库版本为 2.7.3 及以上开发者工具版本为 1.02.1907232 及以上安装node.js(1).下载node包官网地址:https://nodejs.org/en/download/如果英文不好的,可以看中文网站:https://nodejs.org/zh-cn/download/点击上面的进行下载,当然,也…

国产音质好的蓝牙耳机有哪些?国产音质最好的耳机排行

随着时间的推移&#xff0c;真无线蓝牙耳机逐渐占据耳机市场的份额&#xff0c;成为人们日常生活中必备的数码产品之一。蓝牙耳机品牌也多得数不胜数&#xff0c;哪些国产蓝牙耳机音质好&#xff1f;下面&#xff0c;我们从音质出来&#xff0c;来给大家介绍几款国产蓝牙耳机&a…

Quartus II 的入门级使用

好久没有用VHDL写东西了&#xff0c;今天需要完成一个项目&#xff0c;重新复习一下新建工程新建工程file-->New Project Wizard, next, 选择存放的路径名字&#xff08;projecttop-level 名字要相同&#xff09;&#xff0c;next&#xff0c;File name名字同上&#xff0c;…

【一看就会】实现仿京东移动端页面滚动条布局

简单粗暴直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content&q…

matlab simulink 模糊控制蔬菜气雾栽培营养液供给自动监控

1、内容简介略-可以交流、咨询、答疑2、内容说明模型基本数学公式参考的是硕士论文摘要&#xff1a;随着社会的发展&#xff0c;世界人口逐渐增加&#xff0c;耕地面积日益减少&#xff0c;而且人们对 优质、安全、无污染的蔬菜需求也越来越高&#xff0c;植物工厂成为蔬菜栽培…