rocketmq集群配置简介
RocketMQ天生对集群的支持非常好,它有以下一些模式:
(1)单Master
优点:除了配置简单没什么优点
缺点:不可靠,该机器重启或者宕机,将要导致整个服务不可用
(2)多Master
优点:配置简单,性能最高
缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
(3)多Master多Slave,每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级
优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预
缺点:Master宕机或磁盘损坏时会有少量消息丢失
(4)多Master多Slave,每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功
优点:服务可用性与数据可用性非常高
缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主
本文采用的是二主二从安装模式,即第四种多Master多Slave
有条件的话可以买两台云服务器;
下面假设有了两台虚拟服务器1和服务器2;
配置第一台服务器
在两台机器上都下载、解压好从官网 rocketmq.apache.org/ 进去获得最新的下载地址。在rocketmq/conf目录下,有三种建议配置模式如下图:
2m-2s-async(2主2从异步) —— 本文采用这种
2m-2s-sync (2主2从同步)
2m-noslave (2主)
现在需要修改两台机器上2m-2s-async这个目录中的文件。在服务器1上修改broker-a.properties
上图是windows上的文件;linux上则使用如下命令修改:
cd /jackxu/rocketmq/conf/2m-2s-async
vim broker-a.properties
修改集群名字
brokerClusterName=xxx-cluster
增加的内容
#Broker 对外服务的监听端口
listenPort=10910
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
#存储路径
storePathRootDir=/jackxu/rocketmq/store/broker-a
#commitLog 存储路径
storePathCommitLog=/jackxu/rocketmq/store/broker-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/jackxu/rocketmq/store/broker-a/consumequeue
#消息索引存储路径
storePathIndex=/jackxu/rocketmq/store/broker-a/index
#checkpoint 文件存储路径
storeCheckpoint=/jackxu/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/jackxu/rocketmq/store/abort
修改broker-b-s.properties
vim broker-b-s.properties
修改集群名字
brokerClusterName=xxx-cluster
增加的内容
#Broker 对外服务的监听端口
listenPort=10921
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
#存储路径
storePathRootDir=/jackxu/rocketmq/store/broker-b-s
#commitLog 存储路径
storePathCommitLog=/jackxu/rocketmq/store/broker-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/jackxu/rocketmq/store/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/jackxu/rocketmq/store/broker-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/jackxu/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/jackxu/rocketmq/store/abort
配置第二台服务器
在服务器2上修改broker-b.properties
cd /jackxu/rocketmq/conf/2m-2s-async
vim broker-b.properties
修改集群名字
brokerClusterName=xxx-cluster
增加的内容
#Broker 对外服务的监听端口
listenPort=10920
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
#存储路径
storePathRootDir=/jackxu/rocketmq/store/broker-b
#commitLog 存储路径
storePathCommitLog=/jackxu/rocketmq/store/broker-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/jackxu/rocketmq/store/broker-b/consumequeue
#消息索引存储路径
storePathIndex=/jackxu/rocketmq/store/broker-b/index
#checkpoint 文件存储路径
storeCheckpoint=/jackxu/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/jackxu/rocketmq/store/abort
修改broker-a-s.properties
vim broker-a-s.properties
修改集群名字
brokerClusterName=xxx-cluster
增加的内容
#Broker 对外服务的监听端口
listenPort=10911
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
#存储路径
storePathRootDir=/jackxu/rocketmq/store/broker-a-s
#commitLog 存储路径
storePathCommitLog=/jackxu/rocketmq/store/broker-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/jackxu/rocketmq/store/broker-a-s/consumequeue
#消息索引存储路径
storePathIndex=/jackxu/rocketmq/store/broker-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/jackxu/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/jackxu/rocketmq/store/abort
创建数据目录
第一台机器执行,只需要执行一次(注:mkdir -p命令是递归创建文件,即使上级文件不存在
)
mkdir -p /xxx/rocketmq/store/broker-a /jackxu/rocketmq/store/broker-a/consumequeue /jackxu/rocketmq/store/broker-a/commitlog /jackxu/rocketmq/store/broker-a/index /jackxu/rocketmq/logs /jackxu/rocketmq/store/broker-b-s /jackxu/rocketmq/store/broker-b-s/consumequeue /jackxu/rocketmq/store/broker-b-s/commitlog /jackxu/rocketmq/store/broker-b-s/index
第二台机器执行,只需要执行一次
mkdir -p /xxx/rocketmq/store/broker-a-s /jackxu/rocketmq/store/broker-a-s/consumequeue /jackxu/rocketmq/store/broker-a-s/commitlog /jackxu/rocketmq/store/broker-a-s/index /jackxu/rocketmq/logs /jackxu/rocketmq/store/broker-b /jackxu/rocketmq/store/broker-b/consumequeue /jackxu/rocketmq/store/broker-b/commitlog /jackxu/rocketmq/store/broker-b/index
启动两个NameServer
在两台机器分别执行,& 表示在后台运行,默认情况下,nameserver监听的是9876端口
nohup sh /xxx/rocketmq/bin/mqnamesrv >/jackxu/rocketmq/logs/mqnamesrv.log 2>&1 &
查看日志
tail -f /xxx/rocketmq/logs/mqnamesrv.log
启动Broker
启动的时候按照下面的顺序来,-c 是指定broker的配置文件
1、启动服务器1的A主
nohup sh /xxx/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-a.properties > /xxx/rocketmq/logs/broker-a.log 2>&1 &
2、启动服务器2的A从
nohup sh /xxx/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-a-s.properties > /xxx/rocketmq/logs/broker-a-s.log 2>&1 &
3、启动服务器2的B主
nohup sh /xxx/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-b.properties > /xxx/rocketmq/logs/broker-b.log 2>&1 &
4、启动服务器1的B从
nohup sh /xxx/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-b-s.properties > /xxx/rocketmq/logs/broker-b-s.log 2>&1 &
查看日志
tail -f /xxx/rocketmq/conf/2m-2s-async/broker-a.properties
tail -f /xxx/rocketmq/conf/2m-2s-async/broker-a-s.properties
tail -f /xxx/rocketmq/conf/2m-2s-async/broker-b.properties
tail -f /xxx/rocketmq/conf/2m-2s-async/broker-b-s.properties
停止服务的时候需要注意,要先停止broker,其次停止nameserver。
cd /xxx/rocketmq/bin
sh mqshutdown namesrv
sh mqshutdown broker
配置文件说明
下面介绍一下安装RocketMQ配置文件里面的属性
首先是集群名字相同,上面四台机器的集群名字都叫 brokerClusterName=jackxu-cluster,其次是连接到相同的NameServer,namesrvAddr=39.103.144.86:9876;42.192.77.73:9876。在配置文件中brokerId=0代表master,brokerId=1代表slave。
在配置文件中还有这两个属性
brokerRole在master broker可以配置成SYNC_MASTER或者ASYNC_MASTER,
在slave broker统一配置成SLAVE
flushDiskType分为ASYNC_FLUSH和SYNC_FLUSH