理想汽车大规模 Apache RocketMQ 集群部署最佳实践

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
简介: 十年铸剑,Apache RocketMQ 的成长离不开全球接近 500 位开发者的积极参与贡献,相信在下个版本你就是 Apache RocketMQ 的贡献者,在社区不仅可以结识社区大牛,提升技术水平,也可以提升个人影响力,促进自身成长。

作者:孙航达,理想汽车智能云部中间件开发工程师,目前主要负责 Apache RocketMQ、ShardingSphere Proxy、全量数据迁移中间件的开发和运维工作。


为什么要快速部署Apache RocketMQ?


理想汽车作为一家新能源汽车制造商。我们与一般互联网业务特殊之处是多了一个物联网。随着公司的成长业务容量越来越大,在这个过程中,业务对于基础架构的要求也越来越高,我们面临的主要问题有单云资源扩容受限,单云单地域的容灾,单云供应商强依赖,物联网单点接入等问题。


为了满足中心业务连续性,增强抗风险能力,实现韧性架构,多云多活作为一种可靠的高可用部署架构,成为各大互联网公司的首要选择。


业务进行单元化,部署在不同云上 VDC。利用 SDE 的技术手段一键拉起 VDC,快速部署基础设施、中间件、业务应用,创建各种资源。Apache RocketMQ 作为重要的基础中间件,它的快速部署能力影响整个 VDC 的拉起速度。


如何实现快速部署Apache RocketMQ?


大家在部署 ApacheRocketMQ 集群通常的过程如下:


1.     申请机器

2.     申请域名

3.     部署 Apache RocketMQ 集群

4.     部署 Apache RocketMQ Exporter

5.     Apache RocketMQ Exporter 接入监控

6.     Apache RocketMQ 集群信息接入管控平台


大规模 ApacheRocketMQ 集群如果采用人工部署时间将会以小时或者以天为单位,理想汽车内部使用 Terraform 基础架构自动化编排工具编排整个部署流程。其中部署 Apache RocketMQ 集群作为原子能力使用 Ansible Playbook 实现。01


效果展示


完整地部署一套 ApacheRocketMQ,在管控平台上仅仅需要填写集群名称、namesrv 和 broker 部署规模及其机器配置等少数几个参数,即可完成集群的快速部署。


1.jpg


部署过程中,Terraform 调用管控平台的集群信息接入接口完成整个部署流程。

2.jpg


最后在 prometheus 的 consul 集群上看到 Apache RocketMQ Exporter 已经成功注册。

3.jpg


Apache RocketMQ Playbook介绍


ApacheRocketMQ Playbook 可以部署一个完整 Apache RocketMQ 集群(包括 Apache RocketMQ Exporter)。Apache RocketMQPlaybook 具有幂等性,重复执行时不会重启正在运行的进程,可以进行 Apache RocketMQ 集群的在线扩容。因为 Apache RocketMQ 集群缩容涉及到数据的收缩,一般不考虑在 ApacheRocketMQ Playbook 上支持缩容。Apache RocketMQ Playbook 集成了部署环境初始化、可运行包下载、os 参数调优、broker 最佳配置、ApacheRocketMQ 集群部署、Apache RocketMQ Exporter 部署、添加开机自启动机制等任务编排到一起,实现了大规模集群自动化部署。


Apache RocketMQ Playbook使用


首先安装Ansible


Ansible 是近些年 Github 关注度最高、最受欢迎的自动化运维工具。它可以进行配置管理和应用部署。实现了批量系统配置、批量程序部署、批量运行命令等功能。


安装文档:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html


下载 Apache RocketMQ Playbook


Apache RocketMQPlaybook 入口文件为 rocketmq.yml。


rocketmq.yml 包含 namesrv.yml、broker.yml、exporter.yml 这 3 个文件,分别部署 Apache RocketMQ Namesrv、Apache RocketMQBroker、Apache RocketMQ Exporter。


rocketmq.yml 可以单独执行,部署一个完整的 Apache RocketMQ 集群,也可以每个文件单独执行。


hosts 文件配置了部署的机器列表以及 Apache RocketMQ 配置。


下载地址:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-ansible


根据需要修改配置文件


  • hosts文件主要描述了部署的机器列表和 Apache RocketMQ 配置信息。


#ApacheRocketmq Namesrv 部署机器列表


[rocketmq_namesrv]
127.0.0.1
127.0.0.2


#ApacheRocketmq Broker 部署机器列表及每台机器的角色配置配置


[rocketmq_broker]
127.0.0.3brokerName=broker-a brokerId=0 brokerRole=ASYNC_MASTER
127.0.0.4brokerName=broker-a brokerId=1 brokerRole=SLAVE


#ApacheRocketmq Broker 公共配置


[rocketmq_broker:vars]
brokerClusterName=DefaultCluster
namesrvAddr=127.0.0.1:9876;127.0.0.2:9876
storePathRootDir=/data/rocketmq/store


#ApacheRocketmq Exporter 部署机器列表


[rocketmq_exporter]
127.0.0.5


#ApacheRocketmq Exporter 公共配置


[rocketmq_exporter:vars]
namesrvAddr=127.0.0.1:9876;127.0.0.2:9876
webTelemetryPath=/metrics
rocketmqVersion=V4_7_1


  • 修改全局变量

vars/main.yml 配置了 Apache RocketMQ 的部署路径、数据路径。需要根据自己公司的部署规范调整。


# Theglobal variable


rocketmq_deploy_path:/app
rocketmq_log_path:/data


  • 修改 namesrv 变量

namesrv/vars/main.yml 配置了 Apache RocketMQ 可运行文件下载地址、namerv 部署路径(可以是全局变量的子路径)、namesrv 日志路径。


#namesrv variable


rocketmq_download_url:https://dlcdn.apache.org/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip
rocketmq_deploy_path:/app
rocketmq_log_path:${user.home}


  • 修改 broker 变量

broker/vars/main.yml 配置了 Apache RocketMQ 可运行文件下载地址、broker 部署路径(可以是全局变量的子路径)、broker 日志路径。


# brokervariable


rocketmq_download_url:https://dlcdn.apache.org/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip
rocketmq_deploy_path:/app
rocketmq_log_path:${user.home}



  • 修改 exporter 变量

exporter/vars/main.yml 配置了 Apache RocketMQ Exporter 可运行文件下载地址、ApacheRocketMQ Exporte 部署目录。

注:ApacheRocketMQ Exporter 需要自行编辑打包,上传到公司内网。


#exportervariable

#exporterneed build by yourself


rocketmq_exporter_download_url:http://rocketmq.exporter/rocketmq-exporter-0.0.2-SNAPSHOT.jar
rocketmq_exporter_deploy_directory:/app/exporter


执行Apache RocketMQ Playbook


ansible-playbook/path/rocketmq.yml -i /path/hosts


注:/path 需要根据实际路径修改。部署路径冗余配置是为了让 3 个子 playbook 具有单独执行的能力。


日常运维可使用的命令

#ApacheRocketMQ Broker 启动、停止


systemctlstart mqbroker
systemctlstop mqbroker


 #ApacheRocketMQ Namesrv 启动、停止


systemctlstart mqnamesrv
systemctlstop mqnamesrv


 #ApacheRocketMQ Exporter 启动、停止


systemctlstart mqexporter
systemctlstop mqexporter

最后


基于 ApacheRocketMQ Playbook 的部署能力,可以封装出极简参数的部署接口集成到管控平台上,最后通过可视化的界面,在分钟级完成大规模 Apache RocketMQ 集群的快速部署。


加入 Apache RocketMQ 社区


十年铸剑,Apache RocketMQ 的成长离不开全球接近 500 位开发者的积极参与贡献,相信在下个版本你就是 Apache RocketMQ 的贡献者,在社区不仅可以结识社区大牛,提升技术水平,也可以提升个人影响力,促进自身成长。


社区 5.0 版本正在进行着如火如荼的开发,另外还有接近 30 个 SIG(兴趣小组)等你加入,欢迎立志打造世界级分布式系统的同学加入社区,添加社区开发者微信:rocketmq666 即可进群,参与贡献,打造下一代消息、事件、流融合处理平台。

相关实践学习
消息队列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
相关文章
|
25天前
|
消息中间件 存储 监控
MQ线上大规模消息堆积问题处理及使用场景详解
【11月更文挑战第21天】在如今的高并发互联网应用中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色
72 1
|
5月前
|
消息中间件 人工智能 Apache
Apache RocketMQ 中文社区全新升级!
RocketMQ 中文社区升级发布只是起点,我们将持续优化体验细节,推出更多功能和服务,更重要的是提供更多全面、深度、高质量的内容。
596 15
|
4月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
280 2
|
6月前
|
消息中间件 安全 API
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
307 1
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(1)
|
6月前
|
消息中间件 安全 Apache
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
252 0
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(2)
|
4月前
|
关系型数据库 MySQL API
Apache Doris集群部署
Apache Doris集群部署
|
5月前
|
消息中间件 安全 API
Apache RocketMQ ACL 2.0 全新升级
RocketMQ 作为一款流行的分布式消息中间件,被广泛应用于各种大型分布式系统和微服务中,承担着异步通信、系统解耦、削峰填谷和消息通知等重要的角色。随着技术的演进和业务规模的扩大,安全相关的挑战日益突出,消息系统的访问控制也变得尤为重要。然而,RocketMQ 现有的 ACL 1.0 版本已经无法满足未来的发展。因此,我们推出了 RocketMQ ACL 2.0 升级版,进一步提升 RocketMQ 数据的安全性。本文将介绍 RocketMQ ACL 2.0 的新特性、工作原理,以及相关的配置和实践。
13660 10
|
6月前
|
消息中间件 Apache 数据安全/隐私保护
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(3)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
124 0
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(3)
|
2月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
89 6
|
2月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
85 8

热门文章

最新文章

相关产品

  • 云消息队列 MQ
  • 推荐镜像

    更多