在阿里云上自动化搭建RabbitMQ集群

本文涉及的产品
对象存储 OSS,20GB 3个月
系统运维管理,不限时长
对象存储 OSS,恶意文件检测 1000次 1年
简介: 本文介绍了如何在阿里云平台搭建RabbitMQ集群,特别是利用阿里云DNS服务来做集群节点间的发现。同时介绍了如何自动化创建和维护RabbitMQ集群。

RabbitMQ简介

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

基于RabbitMQ的MQTT插件(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,是物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器的通信协议。

最近项目上需要用到RabbitMQ,所以有机会在阿里云上搭建RabbitMQ集群。

RabbitMQ集群

RabbitMQ提供了很多方式来搭建集群。包括:

  • 配置文件方式
  • 基于DNS的发现
  • AWS实例发现(通过插件)
  • Kubernetes发现(通过插件)
  • 基于consul的发现(通过插件)
  • 基于etcd的发现(通过插件)
  • rabbitmqctl命令手动关联

考虑到是在阿里云上进行搭建集群,而且阿里云本身提供DNS Private Zone服务,为了避免不必要的额外搭建其它服务,所以采用了基于DNS发现来创建集群。具体架构如下图:
dns1

我们创建3台ECS,分别命名为rabbit1,rabbit2,rabbit3。然后在Private Zone里面创建rabbitmq.gadev,把3台ECS的解析添加进去。
privatezone_dns

因为RabbitMQ要用到节点名字,同时创建一个反向解析。这样根据其它IP地址可以获取其它节点的名字。
reverse_resolution

在配置文件中添加集群的发现方式:

[root@rabbit1]# cat rabbitmq.conf
loopback_users = none

cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns
cluster_formation.dns.hostname = rabbitmq.gadev

自动化实施

下面介绍下如何在阿里云上进行RabbitMQ的自动化创建。这里用到的工具链包括:

  • GitLab - 自动化脚本代码存储,使用了GitLab的CI/CD Pipeline。
  • Terraform - 创建阿里云相关资源。
  • Ansible - 安装/升级ECS上的RabbitMQ。
  • Python - 用来访问阿里云上的OSS,Private Zone等。
  • 阿里云CLI - 访问OSS获取Ansible Playbook,触发OOS来运行ECS中的ansible。
    自动化安装架构如下图:

arch
用到的阿里云服务

  • ECS - 用来安装RabbitMQ
  • Auto Scaling Group - 用伸缩组来管理ECS
  • SLB - 提供公网SLB使设备能直接连接集群,提供私有SLB供内部业务使用。
  • Private Zone - RabbitMQ集群服务发现
  • Domain name - 提供域名来绑定公网SLB
  • OSS - 用OSS来存储ansible playbook
  • OOS(Operation Orchestration Service) - 使用OOS来触发ansible脚本运行。
  • RAM - 给ECS绑定需要的role
  • VPC - 基础网络相关配置

使用OOS来运行ansible playbook
OOS编排服务提供了模板ACS-ECS-ApplyAnsiblePlayBooks可以在一批ECS里面运行各自的ansible playbook。

# aliyun oos StartExecution help
Alibaba Cloud Command Line Interface Version 3.0.29

Product: oos (Operation Orchestration Service)
Link:    https://help.aliyun.com/api/oos/StartExecution.html

Parameters:
  --TemplateName      String  Required
  --ClientToken       String  Optional
  --LoopMode          String  Optional
  --Mode              String  Optional
  --Parameters        String  Optional
  --ParentExecutionId String  Optional
  --RegionId          String  Optional
  --SafetyCheck       String  Optional
  --TemplateVersion   String  Optional

下面的命令就可以用来运行ansible:

# aliyun oos StartExecution --TemplateName ACS-ECS-ApplyAnsiblePlayBooks --RegionId cn-shanghai --Parameters '{"playbookurl":"https://{{oss_bucket}}.oss-cn-shanghai.aliyuncs.com/{{playbook.yml}}","OOSAssumeRole":"{{oosRole}}","targets":{"type":"Tags","tags":[{"value": "{{environment}}","key": "rabbit"}]}}'

CI/CD stage

Stage Description
PLAN 部署RabbitMQ到不同环境,检查是否一切如预期。执行terraform plan脚本,检查是否需要更新阿里云资源。
APPLY 真正部署集群。执行terraform apply脚本,创建或更新阿里云资源。
UPDATE 升级集群,或增加新的集群功能。执行aliyun oos命令让每台ECS执行ansible playbook。
DESTROY 销毁集群。

参考资料

https://www.rabbitmq.com/
https://www.rabbitmq.com/clustering.html
https://yq.aliyun.com/articles/718185

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
|
消息中间件 存储 Serverless
【实践】快速学会使用阿里云消息队列RabbitMQ版
云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1协议的消息产品。云消息队列 RabbitMQ 版兼容开源 RabbitMQ 客户端,解决开源各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
122 2
|
8天前
|
存储 缓存 运维
阿里云先知安全沙龙(上海站)——后渗透阶段主机关键信息自动化狩猎的实现与应用
本文介绍了在后渗透测试中使用LSTAR工具和PowerShell脚本进行RDP状态查询、端口获取及凭据收集的过程,强调了高强度实战场景下的OPSEC需求。通过MITRE ATT&CK框架的应用,详细阐述了凭证访问、发现和收集等关键技术,确保攻击者能够隐蔽、持续且高效地渗透目标系统,最终获取核心数据或控制权。文中还展示了SharpHunter等工具的自动化实现,进一步提升了操作的安全性和效率。
|
6天前
|
人工智能 自然语言处理 API
阿里云上的IaC和自动化
本文介绍了阿里云上的自动化与基础设施即代码(IaC)的整体情况。阿里云提供了2万多个API,每日调用量达300亿次,同比增长40%。文中探讨了自动化集成的方式,包括通过API、SDK和IaC工具,并分析了不同场景下的选择策略。对于资源管理较少的企业,控制台界面更合适;而对于高频变更和复杂操作,API和IaC是更好的选择。此外,文章还提到了低代码/无代码解决方案及AI在IaC和自动化中的应用前景。
|
13天前
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
111 2
|
26天前
|
网络协议 网络安全 Docker
将Certbot/ACME.sh自动化申请的证书自动部署到阿里云CDN
本文介绍了阿里云 CDN SSL 证书自动更新工具,定期检查证书有效期,使用Let's Encrypt 等工具签发的证书自动更新至阿里云 CDN,支持 Docker 及 .NET 8 部署,简化证书管理流程。
|
5月前
|
弹性计算 测试技术 持续交付
阿里云云效产品使用合集之如何进行自动化测试
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
13天前
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
68 0
|
4月前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
83 9
|
5月前
|
消息中间件 存储 负载均衡
|
5月前
|
消息中间件 存储 负载均衡
"RabbitMQ集群大揭秘!让你的消息传递系统秒变超级英雄,轻松应对亿级并发挑战!"
【8月更文挑战第24天】RabbitMQ是一款基于AMQP的开源消息中间件,以其高可靠性、扩展性和易用性闻名。面对高并发和大数据挑战时,可通过构建集群提升性能。本文深入探讨RabbitMQ集群配置、工作原理,并提供示例代码。集群由多个通过网络连接的节点组成,共享消息队列,确保高可用性和负载均衡。搭建集群需准备多台服务器,安装Erlang和RabbitMQ,并确保节点间通信顺畅。核心步骤包括配置.erlang.cookie文件、使用rabbitmqctl命令加入集群。消息发布至任一节点时,通过集群机制同步至其他节点;消费者可从任一节点获取消息。
57 2