- RocketMQ实战与原理解析
- 杨开元
- 906字
- 2023-07-26 11:54:54
2.2 多机集群配置和部署
本节将说明如何只用两台物理机,搭建出双主、双从、无单点故障的高可用RocketMQ集群。假设这两台物理机的IP分别是192.168.100.131和192. 168.100.132。
2.2.1 启动多个NameServer和Broker
首先在这两台机器上分别启动NameServer(nohup sh bin/mqnamesrv &),这样我们就得到了一个无单点的NameServer服务,服务地址是“192.168.100. 131:9876; 192.168.100.132:9876”。
然后启动Broker,每台机器上都要分别启动一个Master角色的Broker和一个Slave角色的Broker,并互为主备。可以基于RocketMQ自带的示例配置文件写自己的配置文件(示例配置文件在conf/2m-2s-sync目录下)。
1)192.168.100.131机器上Master Broker的配置文件:
namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH listenPort=10911 storePathRootDir=/home/rocketmq/store-a
2)192.168.100.132机器上Master Broker的配置文件:
namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876 brokerClusterName=DefaultCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH listenPort=10911 storePathRootDir=/home/rocketmq/store-b
3)192.168.100.131机器上Slave Broker的配置文件:
namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876 brokerClusterName=DefaultCluster brokerName=broker-b brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH listenPort=11011 storePathRootDir=/home/rocketmq/store-b
4)192.168.100.132机器上Slave Broker的配置文件:
namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH listenPort=11011 storePathRootDir=/home/rocketmq/store-a
然后分别使用如下命令启动四个Broker:
nohup sh ./bin/mqbroker -c config_file &
这样一个高可用的RocketMQ集群就搭建好了,还可以在一台机器上启动rocketmq-console,比如在192.168.100.131上启动RocketMQ-console,然后在浏览器中输入地址192.168.100.131:8080,这样就可以可视化地查看集群状态了。
2.2.2 配置参数介绍
本节将逐个介绍Broker配置文件中用到的参数含义:
1)namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876
NamerServer的地址,可以是多个。
2)brokerClusterName=DefaultCluster
Cluster的地址,如果集群机器数比较多,可以分成多个Cluster,每个Cluster供一个业务群使用。
3)brokerName=broker-a
Broker的名称,Master和Slave通过使用相同的Broker名称来表明相互关系,以说明某个Slave是哪个Master的Slave。
4)brokerId=0
一个Master Borker可以有多个Slave,0表示Master,大于0表示不同Slave的ID。
5)fileReservedTime=48
在磁盘上保存消息的时长,单位是小时,自动删除超时的消息。
6)deleteWhen=04
与fileReservedTime参数呼应,表明在几点做消息删除动作,默认值04表示凌晨4点。
7)brokerRole=SYNC_MASTER
brokerRole有3种:SYNC_MASTER、ASYNC_MASTER、SLAVE。关键词SYNC和ASYNC表示Master和Slave之间同步消息的机制,SYNC的意思是当Slave和Master消息同步完成后,再返回发送成功的状态。
8)flushDiskType=ASYNC_FLUSH
flushDiskType表示刷盘策略,分为SYNC_FLUSH和ASYNC_FLUSH两种,分别代表同步刷盘和异步刷盘。同步刷盘情况下,消息真正写入磁盘后再返回成功状态;异步刷盘情况下,消息写入page_cache后就返回成功状态。
9)listenPort=10911
Broker监听的端口号,如果一台机器上启动了多个Broker,则要设置不同的端口号,避免冲突。
10)storePathRootDir=/home/rocketmq/store-a
存储消息以及一些配置信息的根目录。
这些配置参数,在Broker启动的时候生效,如果启动后有更改,要重启Broker。现在使用云服务或多网卡的机器比较普遍,Broker自动探测获得的ip地址可能不符合要求,通过brokerIP1=47.98.41.234这样的配置参数,可以设置Broker机器对外暴露的ip地址。