这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党
Rocketmq版本
- version: 5.1.0
部署架构
说明
该架构仅为测试环境部署方案
nameserver和controller同进程部署broker和proxy同进程部署,采用的是Local模式nameserver节点为2个,这种方式部署成后,后续要加多少个都简单broker节点为2个,这种方式部署成后,后续要加多少个都简单- 若需要保证Controller具备容错能力,Controller部署需要三副本及以上(遵循Raft的多数派协议)
nameserve的寻址为http寻址,方便扩展
部署脚本
broker
为了支持http方式寻址nameserve,我们添加如下启动参数
-Drocketmq.namesrv.domain=127.0.0.1:9000 -Drocketmq.namesrv.domain.subgroup=nsaddr-2
runbroker
默认运行broker的内存为8g,实际测试的内存没这么大,我们可以改小一点,比如4g
配置
这里我们将自己的配置都放在自己新建的路径下,后续启动要用 我这里的路径就是
/root/rocketmq-5.1.0/distribution/target/rocketmq-5.1.0/rocketmq-5.1.0/distribution/conf/controller/test
注意我这里是放在编译好的路径下,实际可用放在项目未编译的路径下,这样编译了这个编译路径也会有该脚本
nameserve
- namesrv-n0.conf
listenPort = 9876
enableControllerInNamesrv = true
#controller config
controllerDLegerGroup = group1
controllerDLegerPeers = n0-192.168.1.1:9878;n1-192.168.1.2:9878
controllerDLegerSelfId = n0
- namesrv-n1.conf
listenPort = 9876
enableControllerInNamesrv = true
#controller config
controllerDLegerGroup = group1
controllerDLegerPeers = n0-192.168.1.1:9878;n1-192.168.1.2:9878
controllerDLegerSelfId = n1
broker
- broker-no.confg
brokerClusterName = testCluster
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
controllerAddr = 192.168.1.1:9878;192.168.1.2:9878
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
fetchNamesrvAddrByAddressServer = true
autoCreateTopicEnable=false
enablePropertyFilter=true
slaveReadEnable=true
- broker-n1.confg
brokerClusterName = testCluster
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
controllerAddr = 192.168.1.1:9878;192.168.1.2:9878
allAckInSyncStateSet=true
listenPort=30921
storePathRootDir=/tmp/rmqstore/node01
storePathCommitLog=/tmp/rmqstore/node01/commitlog
fetchNamesrvAddrByAddressServer = true
autoCreateTopicEnable=false
enablePropertyFilter=true
slaveReadEnable=true
可以看到我们这里并没有指定nameserve的服务地址,因为我们之前在启动脚本里面添加了http的方式获取nameserve地址,所以无需指定,这么做是方便扩容.
需要注意的是我们controller地址是手动指定的,这种方式是不方便扩容的,如果我们想要方便扩容controller提供了dns的方式
部署
启动nameserve
- 启动
namesrv-n0
- 机器:
192.168.1.1
nohup sh bin/mqnamesrv -c /root/rocketmq-5.1.0/distribution/target/rocketmq-5.1.0/rocketmq-5.1.0/conf/controller/test/namesrv-n0.conf &
- 启动
namesrv-n1
- 机器:
192.168.1.2
nohup sh bin/mqnamesrv -c /root/rocketmq-5.1.0/distribution/target/rocketmq-5.1.0/rocketmq-5.1.0/conf/controller/test/namesrv-n1.conf &
验证
我们可以通过运维命令查看Controller状态。
sh bin/mqadmin getControllerMetaData -a localhost:9878
-a代表集群中任意一个Controller的地址 顺利的话,我们可以看到如下信息
➜ rocketmq-5.1.0:bin/mqadmin getControllerMetaData -a localhost:9878
#ControllerGroup group1
#ControllerLeaderId n1
#ControllerLeaderAddress 192.168.1.1:9878
#Peer: n0:192.168.1.1:9878
#Peer: n1:192.168.1.2:9878
至此我们启动了两个nameserve+controller
启动proxy+broker
配置环境变量 新的服务上都配置一下
export ROCKETMQ_HOME=/root/rocketmq-5.1.0/distribution/target/rocketmq-5.1.0/rocketmq-5.1.0
- 启动
broker-n0
- 机器:
192.168.1.1执行脚本
nohup bash bin/mqbroker -bc $ROCKETMQ_HOME/conf/controller/test/broker-n0.conf --enable-proxy &
- 启动
broker-n1
- 机器:
192.168.1.2
nohup bash bin/mqbroker -bc $ROCKETMQ_HOME/conf/controller/test/broker-n1.conf --enable-proxy &
验证
执行如下脚本
sh bin/mqadmin getSyncStateSet -a localhost:9878 -b broker-a
如果顺利的话可以看到如下信息
➜ rocketmq-5.1.0:sh bin/mqadmin getSyncStateSet -a localhost:9878 -b broker-a
#brokerName broker-a
#MasterAddr 127.0.0.1:30911
#MasterEpoch 1
#SyncStateSetEpoch 2
#SyncStateSetNums 2
InSyncReplica: {address='127.0.0.1:30911', brokerId=2}
InSyncReplica: {address='127.0.0.2:30911', brokerId=0}
Dashboard验证
我们可以通过官方的dashboard去查看,可以看到正常有两个节点
如果我们kill掉一个节点另一个节点也会从slave切换为master
总结
总的来说部署还是相对简单,线上部署nameserver还是推荐最少3个节点,然后就是内存调大一点,nameserve不要和 broker部署在一起