在阿里云上自动化搭建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发现来创建集群。具体架构如下图:
我们创建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的自动化创建。这里用到的工具链包括:
- GitLab - 自动化脚本代码存储,使用了GitLab的CI/CD Pipeline。
- Terraform - 创建阿里云相关资源。
- Ansible - 安装/升级ECS上的RabbitMQ。
- Python - 用来访问阿里云上的OSS,Private Zone等。
- 阿里云CLI - 访问OSS获取Ansible Playbook,触发OOS来运行ECS中的ansible。
自动化安装架构如下图:
用到的阿里云服务
- 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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云Link ID² 安全领域再拿殊荣
商用密码应用安全性评估(简称密评)工作是密码检测认证体系的重要组成部分,12月26日,阿里云Link ID²物联网设备身份认证服务平台荣获商用密码应用安全性评估基本符合结论报告,成为阿里巴巴集团首款获得该结论的产品。 阿里云Link ID²(IoT Device ID)是一个物联网设备身份认证系统,通过可信计算和密码技术为物联网系统提供设备安全认证、安全连接、业务数据加密等端到端的可信接入能力,为每个接入的设备提供唯一的标识信息,防止设备被篡改或仿冒。阿里云Link ID²在设备烧录环节,ID²通过密钥分发中心向厂商分发支持国密算法的ID²密钥,并通过国密密码技术确保分发过程中数据的机密性、完整性等安全性。而在设备认证环节,阿里云Link ID²基于国密算法,ID²通过认证中心对设备进行可信身份认证。同时,ID²采用支持国密算法的轻量级iTLS协议进行设备认证和安全连接,在兼容TLS的同时,大幅减少IoT设备的资源消耗。 阿里云智能IoT高级安全专家石飞表示:“ID²在身份认证和国密密码技术应用领域深耕多年,致力建设基于国密算法的物联网设备身份认证安全基础设施。围绕国密算法和可信计算,...
- 下一篇
揭秘“撩”大数据的正确姿势:生动示例解说大数据“三驾马车”
我是我:“缘起于美丽,相识于邂逅,厮守到白头!” 众听众:“呃,难道今天是要分享如何作诗?!” 我是我:“大家不要误会,今天主要的分享不是如何作诗,而是《揭秘:‘撩’大数据的正确姿势》,下面进入正题。” 话说当下技术圈的朋友,一起聚个会聊个天,如果不会点大数据的知识,感觉都融入不了圈子,为了以后聚会时让你有聊有料,接下来就跟随我的讲述,一起与大数据混个脸熟吧,不过在“撩”大数据之前,还是先揭秘一下研发这些年我们都经历了啥? 缘起:应用系统架构的从 0 到 1 揭秘:研发这些年我们都经历了啥? 大道至简。生活在技术圈里,大家静下来想想,无论一个应用系统多庞大、多复杂,无非也就是由一个漂亮的网站门面 + 一个丑陋的管理模块 + 一个闷头干活的定时任务三大板块组成。 我们负责的应用系统当然也不例外,起初设计的时候三大模块绑在一起(All in one),线上跑一个 Tomcat 轻松就搞定,可谓是像极了一个大泥球。 衍化至繁。由于网站模块、管理平台、定时任务三大模块绑定在一起,开发协作会比较麻烦,时不时会有代码合并冲突出现;线上应用升级时,也会导致其它模块暂时不能使用,例如如果修改了一个定时...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G