理想汽车大规模 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 部署规模及其机器配置等少数几个参数,即可完成集群的快速部署。

640 (1).png


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

640 (1).png


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

640 (1).png


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使用


01


首先安装Ansible


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

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


02

下载 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

03


根据需要修改配置文件


  • 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 集群的快速部署。

相关实践学习
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
相关文章
|
21天前
|
分布式计算 大数据 数据处理
Apache Spark:提升大规模数据处理效率的秘籍
【4月更文挑战第7天】本文介绍了Apache Spark的大数据处理优势和核心特性,包括内存计算、RDD、一站式解决方案。分享了Spark实战技巧,如选择部署模式、优化作业执行流程、管理内存与磁盘、Spark SQL优化及监控调优工具的使用。通过这些秘籍,可以提升大规模数据处理效率,发挥Spark在实际项目中的潜力。
52 0
|
21天前
|
SQL 分布式计算 数据处理
Uber基于Apache Hudi增量 ETL 构建大规模数据湖
Uber基于Apache Hudi增量 ETL 构建大规模数据湖
73 2
|
21天前
|
存储 固态存储 关系型数据库
下一代实时数据库:Apache Doris 【三】集群部署
下一代实时数据库:Apache Doris 【三】集群部署
101 0
|
21天前
|
消息中间件 Apache RocketMQ
电子好书发您分享《Apache RocketMQ 源码解析》
电子好书发您分享《Apache RocketMQ 源码解析》
124 1
|
21天前
|
消息中间件 监控 Shell
RocketMQ-初体验RocketMQ(03)_RocketMQ多机集群部署
RocketMQ-初体验RocketMQ(03)_RocketMQ多机集群部署
61 0
|
21天前
|
消息中间件 安全 API
Apache RocketMQ ACL 2.0 全新升级
RocketMQ ACL 2.0 不管是在模型设计、可扩展性方面,还是安全性和性能方面都进行了全新的升级。旨在能够为用户提供精细化的访问控制,同时,简化权限的配置流程。欢迎大家尝试体验新版本,并应用在生产环境中。
188498 162
|
21天前
|
消息中间件 Cloud Native 物联网
深度剖析 RocketMQ 5.0,Apache RocketMQ:如何从互联网时代演进到云时代?
从整体技术架构上学习 RocketMQ 5.0 的云原生架构、一体化架构,最后再分别从业务场景切入,详细介绍 RocketMQ 5.0 在不同的业务场景提供的能力和关键技术原理,包括业务消息、流处理、物联网以及面向云时代的事件驱动场景。
107691 1
|
21天前
|
存储 分布式计算 Hadoop
一文了解Apache Hudi架构、工具和最佳实践
一文了解Apache Hudi架构、工具和最佳实践
186 0
|
21天前
|
存储 SQL 分布式计算
使用Apache Hudi构建大规模、事务性数据湖
使用Apache Hudi构建大规模、事务性数据湖
60 0
|
21天前
|
SQL 存储 分布式计算
最佳实践 | 通过Apache Hudi和Alluxio建设高性能数据湖
最佳实践 | 通过Apache Hudi和Alluxio建设高性能数据湖
62 0

热门文章

最新文章

相关产品

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

    更多