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地址。