RocketMQ 部署
本节介绍生产环境部署解决方案,我们部署一个没有单点故障的弹性RocketMQ集群。
先决条件
在开始这一部分之前,请确保你已经阅读了快速开始部分,并且对RocketMQ的核心概念和组件非常熟悉。
部署
Name Server
为了确保集群在一个实例崩溃时仍能运行,建议使用两个或多个Name Server实例。只要有一个Name Server实例处于活动状态,整个集群都将保持服务状态。
Name server 遵循无共享设计范式。代理将心跳数据发送到所有Name Server。Producers 和Consumers可以在发送/消费消息时从任何可用的Name server查询元数据。
Broker
Brokers可以根据他们的角色分为两类:master和slave。master提供RW访问,而slave只接受读访问。
要部署无单点故障的高可用性RocketMQ群集,应该部署一系列Brokers集。Brokers集包含brokerId设置为0的master和多个non-zero brokerIDs的slave。一组中的所有 Broker都有相同的 brokerName。在严重的情况下,我们应该在一个broker集中至少有两个broker。每个topic都存在于两个或多个broker中。
配置
部署RocketMQ群集时,推荐的配置如下:
Broker配置
属性名 | 缺省值 | 详情 |
---|---|---|
listenPort | 10911 | 客户端监听端口 |
namesrvAddr | null | name server地址 |
brokerIP1 | InetAddress | 可以配置多个地址 |
brokerName | null | broker名字 |
brokerClusterName | DefaultCluster | 属于哪个群集 |
brokerId | 0 | 0代表master,其他整数代表slave |
storePathCommitLog | $HOME/store/commitlog/ | 提交日志的文件路径 |
storePathConsumerQueue | $HOME/store/consumequeue/ | 消费队列文件路径 |
mapedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | 提交日志的映射文件大小 |
deleteWhen | 04 | 何时删除超出保留时间的提交 |
fileReserverdTime | 72 | 删除提交前保留提交的小时数 |
brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLVAE |
flushDiskType | ASYNC_FLUSH | {SYNC_FLUSH/ASYNC_FLUSH}。SYNC_FLUSH模式的代理在确认生产者之前将每个消息刷新到磁盘上。另一方面,ASYNC_FLUSH模式的代理利用了组提交,获得了更好的性能。 |
CLI管理工具
RocketMQ提供了CLI (命令行界面)管理工具带来查询、管理和诊断各种问题。
如何获得
管理工具与RocketMQ一起使用。要么你下载一个预先构建的二进制版本,要么你自己从源代码中构建。
如果你需要源代码, rocketmq-tools模块包含在源代码中。
如何使用
管理工具非常容易使用,这里我们假设你使用的是linux/unix系统 。
切换到${PACKAGE}/bin目录下,输入命令mqadmin,您应该会看到以下帮助菜单:
最常用的mqadmin命令有:
updateTopic 更新或创建topic
deleteTopic 从broker和NameServer中删除topic
updateSubGroup 更新或创建订阅组
deleteSubGroup 从broker删除订阅组
updateBrokerConfig 更新broker的配置
updateTopicPerm 更新 topic权限
topicRoute 检查topic路由信息
topicStatus 检查topic状态信息
topicClusterList 获取topic集群信息
brokerStatus broker运行状态数据
queryMsgById 通过id查询消息
queryMsgByKey 通过key查询消息
queryMsgByUniqueKey 通过唯一key查询消息
queryMsgByOffset 通过偏移量查询消息
printMsg 打印消息详情
sendMsgStatus 发送消息到broker的状态
brokerConsumeStats 获取broker消息数据状态
producerConnection 查询生产者的socket连接,客户端版本
consumerConnection 查询消费者的socket连接,客户端版本和订阅
consumerProgress 查询消费者的进度,速度
consumerStatus 查询消费者的内部数据结构
cloneGroupOffset 从其他组克隆偏移量
clusterList 集群列表
topicList 从name server获取topic列表
updateKvConfig 创建或更新KV配置
deleteKvConfig 删除KV 配置.
wipeWritePerm 擦除所有name server中的broker写权限
resetOffsetByTime 通过(无客户端重启)重置消费者偏移量
updateOrderConf 创建或更新或删除顺序配置
cleanExpiredCQ 清理broker上过期的消费队列
cleanUnusedTopic 清理broker上未被使用的topic
startMonitoring 启动监控
statsAll 主题和消费者tps 状态
syncDocs 同步文档
allocateMQ 分配MQ
checkMsgSendRT 检查消息的发送响应时间
clusterRT 集群内所有消息的发送响应时间列表
有关特定命令的详细信息,请参见“mqadmin help”。如果您想获得有关特定命令(如“clusterList”)的更多信息,只需键入mqadmin help clusterList,您就会看到:
usage: mqadmin clusterList [-h] [-i <arg>] [-m] [-n <arg>] -h,--help Print help -i,--interval <arg> specify intervals numbers, it is in seconds -m,--moreStats Print more stats -n,--namesrvAddr <arg> Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
复制模式
为了确保成功发布的消息不会丢失,RocketMQ提供了一种复制模式,通过两种复制方式:同步和异步,获得更强的持久性和更高的可用性。
复制:同步/异步Broker
像许多复制系统一样,同步Broker会等到提交日志被复制到从属服务器后再确认。相反,异步Broker会在master上处理消息后立即返回。
如何配置
RocketMQ发行版的conf文件夹下附带了三种预构建配置供您参考:
2m-2s-sync 2m-2s-async 2m-noslave
注意:所有配置都使用ASYNC_FLUSH。
部署
以2m-2s-sync的部署为例。首先,启动两个name server,如快速启动部分所示。假设他们的IP分别为92.168.0.2和 192.168.0.3。
然后启动broker(假设RocketMQ在/home/rocketmq/dist目录中)
>cd /home/rocketmq/dist/bin >bash mqbroker -c ../conf/2m-2s-sync/broker-a.properties -n 192.168.0.2:9876,192.168.0.3:9876 >bash mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties -n 192.168.0.2:9876,192.168.0.3:9876 >bash mqbroker -c ../conf/2m-2s-sync/broker-b.properties -n 192.168.0.2:9876,192.168.0.3:9876 >bash mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties -n 192.168.0.2:9876,192.168.0.3:9876
如何校验
在CLI中执行以下命令进行验证:
> bash mqadmin clusterlist