更新时间:2022-05-06 22:56:25
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
基于RabbitMQ的MQTT插件(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,是物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器的通信协议。
最近项目上需要用到RabbitMQ,所以有机会在阿里云上搭建RabbitMQ集群。
RabbitMQ提供了很多方式来搭建集群。包括:
考虑到是在阿里云上进行搭建集群,而且阿里云本身提供DNS Private Zone服务,为了避免不必要的额外搭建其它服务,所以采用了基于DNS发现来创建集群。具体架构如下图:
我们创建3台ECS,分别命名为rabbit1,rabbit2,rabbit3。然后在Private Zone里面创建rabbitmq.gadev,把3台ECS的解析添加进去。
因为RabbitMQ要用到节点名字,同时创建一个反向解析。这样根据其它IP地址可以获取其它节点的名字。
在配置文件中添加集群的发现方式:
[root@rabbit1]# cat rabbitmq.conf
loopback_users = none
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns
cluster_formation.dns.hostname = rabbitmq.gadev
下面介绍下如何在阿里云上进行RabbitMQ的自动化创建。这里用到的工具链包括:
用到的阿里云服务
使用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