本节将介绍生产就绪的部署解决方案。一般来说,我们将部署一个弹性的RocketMQ集群,没有单点故障。
先决条件
在开始这一节之前, 请确保您已经阅读快速启动部分中,并且熟悉RocketMQ的核心概念和组件。
开始部署
Name Server
为了确保集群在一个实例崩溃时仍然可以运行,建议使用两个或多个名称服务器实例。只要有一个名称服务器实例还活着,整个集群就会继续服务。
名称服务器遵循share-nothing设计范例。Brokers将心跳数据发送到所有名称服务器。生产者和消费者可以在发送或者消费消息时查询来自任何名称服务器的元数据。
Broker
Brokers 可以根据他们的角色分为两类:master 和 slave。master brokers提供RW访问,而slave brokers只接受读访问。
要部署一个没有单点故障的高可用性RocketMQ集群,应该部署一系列broker set。一个broker set包含一个master,其brokerID 设置为0,和多个slaves,其brokerID非零。一个集合中的所有代理都具有相同的代理名称。在正式的场景中,我们应该在一个代理集中至少有两个代理。每个主题都位于两个或更多的代理中。
Configuration
在部署RocketMQ集群时,建议的配置如下:
Broker configuration
Property Name | Default value | Details |
---|---|---|
listenPort | 10911 | 端口监听客户端 |
namesrvAddr | null | 名称服务器地址 |
brokerIP1 | InetAddress for network interface | 是否应该配置多个地址 |
brokerName | null | broker 名称 |
brokerClusterName | DefaultCluster | 这个代理属于哪个集群 |
brokerId | 0 | broker id, 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 模式在Broker ack生产者之前将每个消息都放到磁盘上. Broker of ASYNC_FLUSH 模式与之相反,利用异步批量提交的优势,获取更好的性能. |
CLI Admin 工具
RocketMQ提供了一个CLI(命令行界面)管理工具带来查询、管理和诊断各种问题。
如何获得
管理工具和RocketMQ一起打包。您可以下载预构建的二进制版本,也可以自己从源代码构建,您已经拥有它了。
如果您需要源代码,rocketmq-tools模块包含它的源代码。
如何使用
管理工具很容易使用。在这里,为了演示目的,假定*nix环境。
更改目录到${PACKAGE}/bin,命令行输入mqadmin
,您应该看到以下帮助菜单:
The most commonly used mqadmin commands are:
updateTopic Update or create topic
deleteTopic Delete topic from broker and NameServer
updateSubGroup Update or create subscription group
deleteSubGroup Delete subscription group from broker
updateBrokerConfig Update broker's config
updateTopicPerm Update topic perm
topicRoute Examine topic route info
topicStatus Examine topic Status info
topicClusterList get cluster info for topic
brokerStatus Fetch broker runtime status data
queryMsgById Query Message by Id
queryMsgByKey Query Message by Key
queryMsgByUniqueKey Query Message by Unique key
queryMsgByOffset Query Message by offset
queryMsgByUniqueKey Query Message by Unique key
printMsg Print Message Detail
sendMsgStatus Send msg to broker
brokerConsumeStats Fetch broker consume stats data
producerConnection Query producer's socket connection and client version
consumerConnection Query consumer's socket connection, client version and subscription
consumerProgress Query consumers's progress, speed
consumerStatus Query consumer's internal data structure
cloneGroupOffset Clone offset from other group
clusterList List all of clusters
topicList Fetch all topic list from name server
updateKvConfig Create or update KV config
deleteKvConfig Delete KV config
wipeWritePerm Wipe write perm of broker in all name server
resetOffsetByTime Reset consumer offset by timestamp(without client restart)
updateOrderConf Create or update or delete order conf
cleanExpiredCQ Clean expired ConsumeQueue on broker.
cleanUnusedTopic Clean unused topic on broker
startMonitoring Start Monitoring
statsAll Topic and Consumer tps stats
syncDocs Synchronize wiki and issue to github.com
allocateMQ Allocate MQ
checkMsgSendRT Check message send response time
clusterRT List All clusters Message Send RT
有关特定命令的更多信息,请参见“mqadmin help”。如果您想获得关于特定命令的更多信息,如“clusterList”,只需键入mqadmin help clusterList
,您将会看到:
usage: mqadmin clusterList [-h] [-i ] [-m] [-n ]
-h,--help Print help
-i,--interval specify intervals numbers, it is in seconds
-m,--moreStats Print more stats
-n,--namesrvAddr Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
复制模式
为了确保不会丢失成功发布的消息,RocketMQ提供了一个复制模式,具有两种复制方式:Sync和Async,以获得更强的持久性和高可用性。
复制: Sync / Async Broker
像许多复制系统一样,同步的brokers等待提交日志复制到slave再给ack。而异步brokers则在master上的消息处理完后立即返回。
如何配置
在conf文件夹下,有三个预构建配置与RocketMQ的分布一起,供您参考:
2m-2s-sync
2m-2s-async
2m-noslave
Note: 所有的配置均ASYNC_FLUSH.
部署
以2m-2s-sync
为例。首先,启动两个名称服务器,如快速启动部分所示。假设它们的IPs是192.168.0.2和192.168.0.3。
然后启动brokers(假设二进制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
How to verify
Execute the following command to verify according to the CLI section:
> bash mqadmin clusterlist