参考答案
由于我们项目中主要使用 RocketMQ 做链路跟踪功能,因此需要比较高的性能,并且偶尔丢失几条消息也关系不大,所以我们就选择多 Master 多 Slave 模式,异步复制方式进行部署。
部署过程简单说一下:
我部署的是双master和双slave模式集群,并部署了两个nameserver节点。
1 服务器分配
分配是A和B两台服务器,其中,
- A 服务器部署 nameserv1,master1,slave2
- B 服务器部署 nameserv2,master2和slave1 节点
2 broker的配置
分别配置 RocketMQ 安装目录下四个配置文件:
master1:/conf/2m-2s-async/broker-a.properties slave2:/conf/2m-2s-async/broker-b-s.properties master2:/conf/2m-2s-async/broker-b.properties slave1:/conf/2m-2s-async/broker-a-s.properties
整理思路:
- master 节点的 brokerId 为0,slave 节点的 brokerId 为1(大于0即可);
- 同一组 broker 的 broker-Name 相同,如 master1 和 slave1 都为 broker-a ;
- 每个 broker 节点配置相同的 NameServer ;
- 复制方式配置:master 节点配置为 ASYNC-MASTER , slave 节点配置为 SLAVE 即可;
- 刷盘方式分为同步刷盘和异步刷盘,为了保证性能而不去考虑少量消息的丢失,因此统一配置为异步刷盘。
3)启动集群
检查修改参数
启动前,分别检查修改 runbroker.sh 和 runserver.sh 两个文件中的 JVM 参数,默认的 JAVA_OPT 参数的值比较大,若直接启动可能会失败,需要根据实际情况重新配置。
分别启动两个namerser节点
nohup sh bin/mqnamesrv > /dev/null 2>&1 &
查看日志
tail -f ~/logs/rocketmqlogs/namesrv.log
分别启动 4 个 broker 节点
maste1 nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties &
slave1 nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties &
maste2 nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties &
slave2 nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties &
查看日志:
tail -f ~/logs/rocketmqlogs/broker.log
总结:
集群环境部署,主要就是以上三个步骤,需要注意的是过程中broker配置文件的配置正确性,还需要注意一下启动前对jvm参数的检查。
以上,是消息队列 RocketMQ 面试题【 RocketMQ 的部署具体思路】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—