开发者社区> 天赐凯尔> 正文

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

简介: 本文介绍了如何在阿里云平台搭建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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云一键部署 Hadoop 分布式集群
Hadoop是一个能够让用户轻松架构和使用的开源分布式计算框架,以一种可靠、高效、可伸缩的方式进行数据处理。通过ROS资源编排服务可以在阿里云上一键部署Hadoop集群。
16205 0
Win10的ubuntu子系统,搭建前端自动化工具
Win10安装ubuntu子系统 最新版win10下可以直接跑ubuntu镜像,直接入正题这里如果你不能操作是因为版本不是最新的,我这里是最新的win10直接是有这个功能的。勾选后会要求重启,确定即可 然后win键弹出搜索,输入bash可以打开bash on windows 接下来就是按照提示添加用户密码就行了 Ubuntu安装Nodejs 我们选择用NVM安装和管理nodejs nvm是一个开源的Node版本管理器,通过简单的bash脚本来管理、切换多个Node.js版本。
3699 0
阿里云部署Hbase集群
安装环境 主机 ip 操作系统 master 10.30.45.239 centos7.4 slave1 10.31.155.33 centos7.4 slave2 10.81.233.67 centos7.4 阿里云3台ecs搭建一个小型的hbase分布式数据存储(这里的ip都是内网)。
1583 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20886 0
+关注
天赐凯尔
云计算解决方案架构师。现任职于西门子高级基础架构工程师。
9
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载