热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一、部署背景由于业务系统的特殊性,我们需要针对不同的客户环境部署rabbitmqhaproxy高可用镜像模式集群,由于大都数用户都是专网环境࿰

一、部署背景

由于业务系统的特殊性,我们需要针对不同的客户环境部署 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"
# 默认用户密码,可根据实际情况填写,注意密码格式为<大小写英文字母&#43;数字>,根据实际情况填写
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节点宿主机内网ip地址,默认不修改
RABBITMQ_NODE1_HOST: "192.168.1.191"
# mq1节点供客户端建立连接端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE1_PORT: "5672"
# mq1节点web页面管理端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE1_MANAGEMENT_PORT: "15672"
# mq1节点用于节点间和CLI工具通信端口,端口不冲突情况下,默认不修改
# 注意&#xff1a;端口号必须设置为RABBITMQ_NODE1_DIST_PORT &#61; RABBITMQ_NODE1_PORT &#43; 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节点宿主机内网ip地址,默认不修改
RABBITMQ_NODE2_HOST: "192.168.1.192"
# mq2节点供客户端建立连接端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE2_PORT: "5672"
# mq2节点web页面管理端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE2_MANAGEMENT_PORT: "15672"
# mq2节点用于节点间和CLI工具通信端口,端口不冲突情况下,默认不修改
# 注意&#xff1a;端口号必须设置为RABBITMQ_NODE2_DIST_PORT &#61; RABBITMQ_NODE2_PORT &#43; 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节点宿主机内网ip地址,默认不修改
RABBITMQ_NODE3_HOST: "192.168.1.193"
# mq3节点供客户端建立连接端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE3_PORT: "5672"
# mq3节点web页面管理端口,端口不冲突情况下,默认不修改
RABBITMQ_NODE3_MANAGEMENT_PORT: "15672"
# mq3节点用于节点间和CLI工具通信端口,端口不冲突情况下,默认不修改
# 注意&#xff1a;端口号必须设置为RABBITMQ_NODE3_DIST_PORT &#61; RABBITMQ_NODE3_PORT &#43; 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、执行部署操作

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

一键部署服务

#方式一&#xff1a;一键部署所有节点
[root&#64;localhost es-tools]# ./op.sh setup node3 all
#方式二&#xff1a;单个节点依次部署
[root&#64;localhost es-tools]# ./op.sh setup node3 01
[root&#64;localhost es-tools]# ./op.sh setup node3 02
[root&#64;localhost es-tools]# ./op.sh setup node3 03

一键部署结果&#xff0c;如下图所示&#xff1a;
在这里插入图片描述

查看集群节点信息&#xff0c;如下图所示&#xff1a;
在这里插入图片描述


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



总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f;

更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》






推荐阅读
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化
    PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化 ... [详细]
  • 在 CentOS 7 系统中,为了扩展根目录(/)的存储空间,本文详细介绍了从虚拟机硬盘扩容到文件系统调整的全过程。通过具体的操作步骤,成功解决了因空间不足导致的 GNOME 桌面无法正常登录的问题,为用户提供了一套完整的解决方案。 ... [详细]
  • 在Linux环境下,本文详细探讨了Apache服务器中CGI技术的应用与实现。首先,通过使用yum包管理器安装了必要的软件,如PHP。安装完成后,对Apache服务器进行了配置,确保CGI功能正常运行。此外,还介绍了如何编写和调试CGI脚本,以及如何在实际环境中部署这些脚本以提供动态网页内容。实验结果表明,通过合理的配置和优化,Apache服务器能够高效地支持CGI应用程序,为用户提供丰富的交互体验。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • Linux磁盘管理入门指南:MBR分区格式详解与安装步骤
    在 CentOS 7.x 环境下,本文详细介绍了 MBR 分区格式的基本概念及其安装步骤。实验中使用了 SAS 和 SATA 硬盘,其中 SAS 硬盘主要用于企业级应用和服务器,而 SATA 硬盘则广泛应用于个人计算机和低端服务器。文章通过具体操作示例,帮助读者更好地理解和掌握 Linux 磁盘管理的基本技能。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 本文介绍了在Windows 10系统下使用VirtualBox虚拟机环境部署CentOS 7.2,并在其上安装Docker的具体步骤。针对宝塔面板在Docker容器中磁盘空间限制为8GB的问题,提供了详细的解决方案和优化建议,确保用户能够高效利用有限的存储资源。 ... [详细]
  • 在Linux系统中Nginx环境下SSL证书的安装步骤与WordPress CDN的高级配置指南
    在Linux系统中,Nginx环境下安装SSL证书的具体步骤及WordPress CDN的高级配置指南。首先,安装SSL证书需要准备两个关键配置文件,并建议在操作前备份相关服务器配置文件,以确保数据安全。随后,本文将详细介绍如何在Nginx中正确配置SSL证书,以及如何优化WordPress的CDN设置,提升网站性能和安全性。 ... [详细]
  • 如何在Linux系统上部署MySQL 5.7.28
    本文详细介绍了在Linux系统上部署MySQL 5.7.28的具体步骤。通过官方下载页面获取最新安装包后,按照提供的指南进行配置和安装。文章内容实用性强,适合初学者和有经验的管理员参考。 ... [详细]
  • 在服务器管理和大规模操作中,常需将系统状态或执行结果通过电子邮件通知相关人员。本文详细介绍了如何利用Linux自带的命令行工具高效地通过SMTP协议发送邮件,提供了一种快速便捷的解决方案。 ... [详细]
author-avatar
Lala88童鞋_619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有