1、编译RocketMQ
安装git:yum install git
下载RocketMQ:git clone -b develop https://github.com/apache/incubator-rocketmq.git
安装maven:yum install maven
编译RocketMQ:
cd incubator-rocketmq
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/apache-rocketmq
2、启动Name Server
在两台机器上分别执行:
nohup sh bin/mqnamesrv &
查看日志:tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success.
3、启动Broker
conf目录下可以看到RocketMQ有多种集群部署方式:
2m-noslave: 多Master模式
2m-2s-sync: 多Master多Slave模式,同步双写
2m-2s-async:多Master多Slave模式,异步复制
多Master模式:一个集群无 Slave,全是 Master
优点:配置简单,单个Master 宕机或重启维护对应用无影响,在磁盘配置为 RAID10 时,即使机器宕机不可恢复情况下,由于RAID10 磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。
修改配置:
vi conf/2m-noslave/broker-a.properties
brokerClusterName=ClusterOne
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=10.10.44.26:9876;10.10.44.73:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
另一台机器上的配置与此类似,将brokerName改为broker-b即可。
在两台机器上分别启动broker:
nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties &
nohup sh bin/mqbroker -c conf/2m-noslave/broker-b.properties &
查看日志:tail -f ~/logs/rocketmqlogs/broker.log
The broker[broker-b, 10.10.44.73:10911] boot success. serializeType=JSON and name server is 10.10.44.26:9876;10.10.44.73:9876
多Master多Slave模式,同步双写:每个 Master 配置一个 Slave,有多对Master-Slave,HA 采用同步双写方式,主备都写成功,向应用才返回成功。
优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。
缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的 RT 会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。
修改26上broker配置:
vi conf/2m-2s-sync/broker-a.properties
brokerClusterName=ClusterTwo
brokerName=broker-a
brokerId=0
namesrvAddr=10.10.44.26:9876;10.10.44.73:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
broker-a.properties的配置与此类似,brokerName为broker-b
修改73上的broker配置:
vi conf/2m-2s-sync/broker-a-s.properties
brokerClusterName=ClusterTwo
brokerName=broker-a
brokerId=1
namesrvAddr=10.10.44.26:9876;10.10.44.73:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
broker-b-s.properties的配置与此类似,brokerName为broker-b
分别启动两个master:
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &
分别启动两个slave:
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &
多Master多Slave模式,异步复制:每个 Master 配置一个 Slave,有多对Master-Slave,HA 采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为 Master 宕机后,消费者仍然可以从 Slave 消费,此过程对应用透明。不需要人工干预。性能同多 Master 模式几乎一样。
缺点:Master宕机,磁盘损坏情况,会丢失少量消息。
该模式与同步模式配置类似,唯一区别在于brokerRole=ASYNC_MASTER,启动方式一样,此处不再赘述。
4、常用命令
关闭Name Server:sh bin/mqshutdown namesrv
关闭broker:sh bin/mqshutdown broker
查看集群状态:sh bin/mqadmin clusterList -n 10.10.44.26:9876
查看broker状态:sh bin/mqadmin brokerStatus -b 10.10.44.26:10911
查看所有消费组group:sh bin/mqadmin consumerProgress -n 10.10.44.26:9876
查看所有topic:sh bin/mqadmin topicList -n 10.10.44.26:9876
查看指定消费组下的所有topic数据堆积情况:
sh bin/mqadmin consumerProgress -n10.10.44.26:9876 -g myGroupConsumer
新增topic:sh bin/mqadmin updateTopic –n10.44.26:9876 –c DefaultCluster –t myTopic
删除topic:sh bin/mqadmin deleteTopic –n10.44.26:9876 –c DefaultCluster –tmyTopic
帮助命令:sh bin/mqadmin help clusterList
5、安装可视化管控台
将rocketmq-console放在tomcat/webapps目录下,解压,修改rocketmq-console/WEB-INF/classes/config.properties文件,启动tomcat,访问http://localhost:8080/rocketmq-console
rocketmq-console下载地址:点击打开链接