理想汽车大规模 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版:基础消息收发功能体验
本实验场景介绍消息队列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
相关文章
|
8月前
|
存储 固态存储 关系型数据库
下一代实时数据库:Apache Doris 【三】集群部署
下一代实时数据库:Apache Doris 【三】集群部署
206 0
|
2月前
|
消息中间件 存储 监控
MQ线上大规模消息堆积问题处理及使用场景详解
【11月更文挑战第21天】在如今的高并发互联网应用中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色
124 1
|
2月前
|
消息中间件 监控 大数据
优化Apache Kafka性能:最佳实践与调优策略
【10月更文挑战第24天】作为一名已经对Apache Kafka有所了解并有实际使用经验的开发者,我深知在大数据处理和实时数据流传输中,Kafka的重要性不言而喻。然而,在面对日益增长的数据量和业务需求时,如何保证系统的高性能和稳定性成为了摆在我们面前的一个挑战。本文将从我的个人视角出发,分享一些关于如何通过合理的配置和调优来提高Kafka性能的经验和建议。
97 4
|
7月前
|
存储 SQL BI
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
|
5月前
|
关系型数据库 MySQL API
Apache Doris集群部署
Apache Doris集群部署
|
8月前
|
消息中间件 监控 Shell
RocketMQ-初体验RocketMQ(03)_RocketMQ多机集群部署
RocketMQ-初体验RocketMQ(03)_RocketMQ多机集群部署
91 0
|
8月前
|
消息中间件 存储 Apache
Apache Paimon 表模式最佳实践
Apache Paimon 表模式最佳实践
2162 57
|
8月前
|
存储 分布式计算 Apache
万字长文:基于Apache Hudi + Flink多流拼接(大宽表)最佳实践
万字长文:基于Apache Hudi + Flink多流拼接(大宽表)最佳实践
890 3
|
8月前
|
存储 分布式计算 Hadoop
一文了解Apache Hudi架构、工具和最佳实践
一文了解Apache Hudi架构、工具和最佳实践
1367 0
|
8月前
|
SQL 存储 分布式计算
最佳实践 | 通过Apache Hudi和Alluxio建设高性能数据湖
最佳实践 | 通过Apache Hudi和Alluxio建设高性能数据湖
120 0

相关产品

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

    更多