本文大部分来自https://blog.csdn.net/wangwenzhe222/article/details/85994388,原作者写配置的时候写错了个配置,我修正过来了,按照配置做最后能正常启动。
环境:
centos 6 64位
jdk:1.8
rocketMQ版本:4.8
模式:两 master 两 slave 同步双写模式
IP 部署服务
192.168.168.101 NameServer –
192.168.168.102 NameServer –
192.168.168.101 broker-a master
192.168.168.101 broker-b-s slave
192.168.168.102 broker-b master
192.168.168.102 broker-a-s slave
1.首先安装好jdk并配置好环境变量(其它文章有,不再详述)
2.下载安装rocketMQ
不要选择先配置一个机器,直接拷贝到第二台机器这种方式!!!
不要选择先配置一个机器,直接拷贝到第二台机器这种方式!!!
不要选择先配置一个机器,直接拷贝到第二台机器这种方式!!!
要配置好第一个,再去配置第二个,因为总共就两台,直接复制容易出错(当然熟练的也可以复制后修改文件内容和文件名,初学者还是一步一个脚印)
官网下载链接:http://mirror.bit.edu.cn/apache/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip
2.1下载后解压(两台机器都需要下载解压,如果linux没有安装.zip格式解压压缩软件的话,安装一个,安装命令:yum -y install zip unzip)
2.1.1解压后配置rocketMQ环境变量(两台都需要配置)
命令:vi /etc/profile
追加如下内容:
#set rocketMQ environment
export ROCKETMQ_HOME=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release
export PATH= P A T H : PATH: PATH:ROCKETMQ_HOME/bin
使修改生效
命令:source /etc/profile
2.1.2修改rocketMQ内存配置(两台都需要修改)
进入到rocketMQ的bin目录修改
命令:vi runserver.sh
将内存修改如下(默认分别是4g 8g,如果电脑配置达到那么高可以不用修改,否则启动不了,提示内存不足)
命令:vi runbroker.sh
将内存修改如下
2.2配置
2.2.1先配置192.168.168.101这台机器
进入配置文件目录
cd rocketmq-all-4.3.2-bin-release/conf/2m-2s-sync/
看一下都有哪些文件
ll
2.2.1.1修改broker-a.properties文件内容如下(其中ip要替换为你的服务器对应ip)
具体配置文字版:
#Below 7 lines is default config
#brokerClusterName=DefaultCluster
#brokerName=broker-a
#brokerId=0
#deleteWhen=04
#fileReservedTime=48
#brokerRole=SYNC_MASTER
#flushDiskType=ASYNC_FLUSH
#add time=2019-01-06 16:59
#所属集群名称,如果多个master,那么每个master配置的名称应该一致,要不然识别不了
brokerClusterName=rocketmq-cluster
#broker名称
brokerName=broker-a
#0 表示master,>0 表示slave
brokerId=0
#nameServer地址,分号隔开
namesrvAddr=192.168.168.101:9876;192.168.168.102:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=true
#broker对外服务的监听端口,
#同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些
listenPort=10911
#删除文件的时间节点,默认凌晨4点
deleteWhen=04
#文件保留时间,默认48小时
fileReservedTime=120
#commitLog每个文件的大小,默认大小1g
mapedFileSizeCommitLog=1073741824
#consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
#检查物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#store存储路径,master与slave目录要不同
storePathRootDir=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store
#commitLog存储路径
storePathCommitLog=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/commitlog
#限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
#发消息线程池数
sendMessageThreadPoolNums=128
#拉去消息线程池数
pullMessageThreadPoolNums=128
#broker角色:
#ASYNC_MASTER 异步复制master
#SYNC_MASTER 同步复制master
#SLAVE 从
brokerRole=SYNC_MASTER
#刷盘方式
#ASYNC_FLUSH 异步刷盘
#SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
具体配置图片版:
2.2.1.2修改broker-b-s.properties文件内容如下(其中ip要替换为你的服务器对应ip)
配置文字版:
#Below 7 lines is default config
#brokerClusterName=DefaultCluster
#brokerName=broker-b
#brokerId=1
#deleteWhen=04
#fileReservedTime=48
#brokerRole=SLAVE
#flushDiskType=ASYNC_FLUSH
#add time=2019-01-06 17:01
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=1
namesrvAddr=192.168.168.101:9876;192.168.168.102:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10950
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/slave
storePathCommitLog=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/slave/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
配置图片版:
2.2.1.3上面配置中用到了几个目录,需要创建下目录
命令:mkdir -p /usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/slave/commitlog
2.2.2配置192.168.168.102
进入配置文件目录
cd rocketmq-all-4.3.2-bin-release/conf/2m-2s-sync/
再看看有什么配置文件,加深一下印象
ll
2.2.2.1修改broker-b.properties内容,这里看清楚文件名
配置文字版:
#Below 7 lines is default config
#brokerClusterName=DefaultCluster
#brokerName=broker-b
#brokerId=0
#deleteWhen=04
#fileReservedTime=48
#brokerRole=SYNC_MASTER
#flushDiskType=ASYNC_FLUSH
#add time=2019-01-06 17:06
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
namesrvAddr=192.168.168.101:9876;192.168.168.102:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
配置图片版:
2.2.2修改broker-a-s.properties文件内容
配置文字版:
#Below 7 lines is default config
#brokerClusterName=DefaultCluster
#brokerName=broker-a
#brokerId=1
#deleteWhen=04
#fileReservedTime=48
#brokerRole=SLAVE
#flushDiskType=ASYNC_FLUSH
#add time=2019-01-06 17:04
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
namesrvAddr=192.168.168.101:9876;192.168.168.102:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10950
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/slave
storePathCommitLog=/usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/slave/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
配置图片版:
2.2.2.3上面配置中用到了几个目录,需要创建下目录
命令:mkdir -p /usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/data/store/slave/commitlog
3.启动
3.1先启动192.168.168.101
3.1.1启动nameserver
进入到rocketMQ的bin目录
命令:cd …/…/bin
看一下都有什么命令
命令:ll
启动nameserver
命令:nohup sh mqnamesrv &
3.1.2启动broker-a Master
命令:nohup sh mqbroker -c /usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/conf/2m-2s-sync/broker-a.properties &
3.1.3启动broker-b Slave
命令:nohup sh mqbroker -c /usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/conf/2m-2s-sync/broker-b-s.properties &
3.2启动启动192.168.168.102
3.2.1启动nameserver
进入到rocketMQ的bin目录
cd …/…/bin
启动nameserver
命令:nohup sh mqnamesrv &
3.2.2启动broker-b Master
命令:
nohup sh mqbroker -c /usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/conf/2m-2s-sync/broker-b.properties &
3.2.3启动broker-a Slave
命令:
nohup sh mqbroker -c /usr/local/src/rocketmq/rocketmq-all-4.3.2-bin-release/conf/2m-2s-sync/broker-a-s.properties &
4.查看状态
进入192.168.168.101的rocketMQ的bin目录后输入命令查看集群状态(进入到192.168.168.102的bin目录输入下面的命令效果一样;将rocketmq的bin配置到path后任意目录输入下面的命令均可)
命令:sh mqadmin clusterlist -n 192.168.168.101:9876
5.遇到的坑
坑1:
其实不算坑
就是安装的时候先安装好一个,另外一个直接scp复制第一个安装目录到第二台机器导致的问题
所以,不熟练的时候,一定要一个安装好再安装另一个,以防止出错,不要眼高手低,犯低级错误!
坑2.直接将Master的配置复制到Slave,只修改brokerId
这样会导致Slave无法启动,因为Slave的storePathRootDir会和另一个broker的Master冲突,错误提示是:lock failed, MQ already started
这个只需要保证Master和Slave的storePathRootDir不一样即可(broker-x 的Slave和broker-y的Master不能一致,本例中broker-a的Master不能和broker-b Slave一样)
6.在安装好集群后,可以使用rocketmq-console来更直观查看rocketmq信息,关于这个rocketmq-console,目前网上都是编译rocketmq-console的源码来打包,没有一个地方直接方便下载,于是我编译源码后打包,出来个jar包,放在csdn,供大家下载吧:https://download.csdn.net/download/lyd135364/14839639