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

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
对象存储 OSS,20GB 3个月
云服务器ECS,u1 2核4GB 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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
SQL 分布式计算 关系型数据库
阿里云E-MapReduce Trino专属集群外连引擎及权限控制踩坑实践
本文以云厂商售后技术支持的角度,从客户的需求出发,对于阿里云EMR-Trino集群的选型,外连多引擎的场景、Ldap以及Kerberos鉴权等问题进行了简要的实践和记录,模拟客户已有的业务场景,满足客户需求的同时对过程中的问题点进行解决、记录和分析,包括但不限于Mysql、ODPS、Hive connector的配置,Hive、Delta及Hudi等不同表格式读取的兼容,aws s3、阿里云 oss协议访问异常的解决等。
|
2月前
|
消息中间件 DataWorks 物联网
MQTT问题之接入阿里云物联网平台如何解决
MQTT接入是指将设备或应用通过MQTT协议接入到消息服务器,以实现数据的发布和订阅;本合集着眼于MQTT接入的流程、配置指导以及常见接入问题的解决方法,帮助用户实现稳定可靠的消息交换。
158 1
|
22小时前
|
消息中间件 传感器 网络协议
阿里云MQTT简介和使用流程
以下是内容的摘要: 该文主要介绍了在阿里云上搭建 MQTT 服务器的步骤。首先,需要注册阿里云账号并进行实名认证。然后,购买阿里云 MQTT 实例,选择合适的类型、地域、连接和消息限制。接着,创建产品和设备,命名并上线,获取 MQTT 连接的相关信息,包括 ProductKey、DeviceName 和 DeviceSecret。通过提供的 MQTT.fx 工具,设置 MQTT 客户端连接参数,包括 Broker 地址、端口、用户名和密码。最后,使用 MQTT.fx 测试连接,实现数据的上报和接收,验证 MQTT 服务器的配置是否成功。
|
3天前
|
网络协议 Java 物联网
阿里云服务器上搭建 MQTT服务
阿里云服务器上搭建 MQTT服务
|
8天前
|
弹性计算 前端开发 Java
使用阿里云 mqtt serverless 版本超低成本快速实现 webscoket 长链接服务器
使用阿里云 MQTT Serverless 可轻松实现弹性伸缩的 WebSocket 服务,每日成本低至几元。适用于小程序消息推送的 MQTT P2P 模式。前端需注意安全,避免 AK 泄露,采用一机一密方案。后端通过调用 `RegisterDeviceCredential` API 发送消息。示例代码包括 JavaScript 前端连接和 Java 后端发送。
97 0
|
14天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
11 0
|
1月前
|
消息中间件 API PHP
阿里云OpenAPI RocketMQ 5.0的PHP收发消息文档
【2月更文挑战第23天】阿里云OpenAPI RocketMQ 5.0的PHP收发消息文档
30 7
|
2月前
|
消息中间件 网络协议 物联网
MQTT协议问题之阿里云物联网服务器断开如何解决
MQTT协议是一个轻量级的消息传输协议,设计用于物联网(IoT)环境中设备间的通信;本合集将详细阐述MQTT协议的基本原理、特性以及各种实际应用场景,供用户学习和参考。
125 1
|
2月前
|
监控 机器人 API
利用阿里云 RPA 实现自动化报告生成
在当今数字化的时代,企业和组织面临着大量的数据和信息处理需求。为了提高工作效率和准确性,自动化技术的应用变得越来越重要。阿里云 RPA(机器人流程自动化)是一种强大的工具,可以帮助我们实现报告生成的自动化。本文将介绍如何利用阿里云 RPA 实现自动化报告生成。
|
2月前
|
监控 安全 数据处理
了解阿里云 RPA:如何实现流程自动化
机器人流程自动化(RPA)是一种快速发展的技术,它可以帮助企业实现重复性任务的自动化,提高工作效率和准确性。阿里云 RPA 作为一款强大的 RPA 解决方案,为用户提供了一种简单而高效的方式来实现流程自动化。本文将介绍阿里云 RPA 的功能和特点,以及如何使用它来实现流程自动化。

热门文章

最新文章