集群规模
双nameserver
多master
多slave
NameServer的功能:
Namesrv 名称服务,是没有状态可集群横向扩展。
接收 broker 的请求注册 broker 路由信息(包括 master 和 slave);
接收 client 的请求根据某个 topic 获取所有到 broker 的路由信息 。
NameSrv:
10.69.42.18
10.69.42.19
Broker1
10.69.42.20:10911 Master
10.69.42.20:12911 Slave
Broker2
10.69.42.21:10911 Master
10.69.42.21:12911 Slave
集群的实现是由一同套程序,通过使用不同的启动参数来实现不同功能角色。
1.启动Namesrv
nohup /usr/local/alibaba-rocketmq/bin/mqnamesrv > 10-27.log &
两台nameserver上执行上面命令,如无报错则启动成功。通过netstat -tlnp查看9876端口是否已经在监听了。
2.启动broker
sh mqbroker -m > broker1.properties
生成broker的配置模板:
listenPort=?????
namesrvAddr=10.69.42.18:9876;10.69.42.19:9876
brokerIP1=10.69.42.20
brokerName=broker1
brokerClusterName=DefaultCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/gomeo2o/data/store
storePathCommitLog=/gomeo2o/data/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER (SLAVE)
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true
修改上面红色部分内容:
Master: broker1.properties
listenPort=10911
namesrvAddr=10.69.42.18:9876;10.69.42.19:9876
brokerName=broker1
brokerIP1=10.69.42.20
brokerId=0
brokerRole=ASYNC_MASTER
Slave: broker1-s.properties
listenPort=10911
namesrvAddr=10.69.42.18:9876;10.69.42.19:9876
brokerName=broker1
brokerIP1=10.69.42.20
brokerId=1
brokerRole=SLAVE
注意:
如果master与slave不在同一台主机,listPort可以使用默认,不用修改。
Master与Slave配对是通过指定相同的brokerName参数来配对,Master的BrokerId必须是0,Slave的BrokerId必须是大与0的数。另外一个Master下面可以挂载多个Slave,同一Master下的多个Slave通过指定不同的BrokerId来区分。
启动broker
nohup /usr/local/alibaba-rocketmq/bin/mqbroker -c /usr/local/alibaba-rocketmq/conf/offline/broker1.properties
nohup /usr/local/alibaba-rocketmq/bin/mqbroker -c /usr/local/alibaba-rocketmq/conf/offline/broker1-s.properties
!!nohup.out中记录启动过程中产生的日志。
启动成功后,可以通过web管理界面看到当前rocketmq集群状态。
3.关闭broker
Broker的重启可能会导致正在发往这台机器的消息发送失败,RocketMQ提供了一种优雅的关闭方法,通过执行以下命令,会清除Broker的写权限,过40S后,所有客户端都会更新Broker路由信息,此时再关闭Broker就不会发生消息发送失败的情况,因为所有的消息都发往了其他Broker。
sh mqadmin wipeWritePerm -b brokerName -n namerverAddr
4.将上面用到的命令用别名表示,方便管理
修改~/.bashrc
加入下面内容
alias startns='nohup /usr/local/alibaba-rocketmq/bin/mqnamesrv'
alias startbrm='nohup /usr/local/alibaba-rocketmq/bin/mqbroker -c /usr/local/alibaba-rocketmq/conf/offline/broker1.properties'
alias startbrs='nohup /usr/local/alibaba-rocketmq/bin/mqbroker -c /usr/local/alibaba-rocketmq/conf/offline/broker1-s.properties'
5.命令行查看当前集群状态
mqadmin clusterList -n 10.69.42.18:9876