一、前言
是根据上面这两篇文章部署的。不同的是我是单机安装集群:
有以下不同的地方:
1.1 二主二从安装在不同的目录:
- rocketmq_0
- rocketmq_1
1.2 namesrv的端口
第一个namesrv端口是9876,第二个端口是9877。
1.3 broker端口
rocketmq_0:
- broker-a 端口:10910
- broker-b-s 端口:10921
rocketmq_1:
- broker-b 端口:11920
- broker-a-s 端口: 11911
1.4 创建目录
创建rocketmq_0:
mkdir -p /usr/local/soft/rocketmq_0/store/broker-a /usr/local/soft/rocketmq_0/store/broker-a/consumequeue /usr/local/soft/rocketmq_0/store/broker-a/commitlog /usr/local/soft/rocketmq_0/store/broker-a/index /usr/local/soft/rocketmq_0/logs /usr/local/soft/rocketmq_0/store/broker-b-s /usr/local/soft/rocketmq_0/store/broker-b-s/consumequeue /usr/local/soft/rocketmq_0/store/broker-b-s/commitlog /usr/local/soft/rocketmq_0/store/broker-b-s/index
创建rocketmq_1:
mkdir -p /usr/local/soft/rocketmq_1/store/broker-a-s /usr/local/soft/rocketmq_1/store/broker-a-s/consumequeue /usr/local/soft/rocketmq_1/store/broker-a-s/commitlog /usr/local/soft/rocketmq_1/store/broker-a-s/index /usr/local/soft/rocketmq_1/logs /usr/local/soft/rocketmq_1/store/broker-b /usr/local/soft/rocketmq_1/store/broker-b/consumequeue /usr/local/soft/rocketmq_1/store/broker-b/commitlog /usr/local/soft/rocketmq_1/store/broker-b/index
1.45主要命令和配置
1.5.1 namesrv
nohup sh /usr/local/soft/rocketmq_0/bin/mqnamesrv >/usr/local/soft/rocketmq_0/logs/mqnamesrv.log 2>&1 &
nohup sh /usr/local/soft/rocketmq_1/bin/mqnamesrv -c /usr/local/soft/rocketmq_1/conf/namesrv.properties >/usr/local/soft/rocketmq_1/logs/mqnamesrv.log 2>&1 &
/usr/local/soft/rocketmq_1/conf/namesrv.properties文件指定了namesrv端口:
listenPort=9877
1.5.2 broker
nohup sh /usr/local/soft/rocketmq_0/bin/mqbroker -c /usr/local/soft/rocketmq_0/conf/2m-2s-async/broker-a.properties > /usr/local/soft/rocketmq_0/logs/broker-a.log 2>&1 &
nohup sh /usr/local/soft/rocketmq_1/bin/mqbroker -c /usr/local/soft/rocketmq_1/conf/2m-2s-async/broker-a-s.properties > /usr/local/soft/rocketmq_1/logs/broker-a-s.log 2>&1 &
nohup sh /usr/local/soft/rocketmq_1/bin/mqbroker -c /usr/local/soft/rocketmq_1/conf/2m-2s-async/broker-b.properties > /usr/local/soft/rocketmq_1/logs/broker-b.log 2>&1 &
nohup sh /usr/local/soft/rocketmq_0/bin/mqbroker -c /usr/local/soft/rocketmq_0/conf/2m-2s-async/broker-b-s.properties > /usr/local/soft/rocketmq_0/logs/broker-b-s.log 2>&1 &
1.5.3 broker配置
broker-a:
brokerClusterName=qwx-cluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10910
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
#存储路径
storePathRootDir=/usr/local/soft/rocketmq_0/store/broker-a
#commitLog 存储路径
storePathCommitLog=/usr/local/soft/rocketmq_0/store/broker-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/soft/rocketmq_0/store/broker-a/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/soft/rocketmq_0/store/broker-a/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/soft/rocketmq_0/store/broker-a/checkpoint
#abort 文件存储路径
abortFile=/usr/local/soft/rocketmq_0/store/broker-a/abort
broker-a-s:
brokerClusterName=qwx-cluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=11911
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
#存储路径
storePathRootDir=/usr/local/soft/rocketmq_1/store/broker-a-s
#commitLog 存储路径
storePathCommitLog=/usr/local/soft/rocketmq_1/store/broker-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/soft/rocketmq_1/store/broker-a-s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/soft/rocketmq_1/store/broker-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/soft/rocketmq_1/store/broker-a-s/checkpoint
#abort 文件存储路径
abortFile=/usr/local/soft/rocketmq_1/store/broker-a-s/abort
broker-b:
brokerClusterName=qwx-cluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=11920
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
#存储路径
storePathRootDir=/usr/local/soft/rocketmq_1/store/broker-b
#commitLog 存储路径
storePathCommitLog=/usr/local/soft/rocketmq_1/store/broker-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/soft/rocketmq_1/store/broker-b/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/soft/rocketmq_1/store/broker-b/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/soft/rocketmq_1/store/broker-b/checkpoint
#abort 文件存储路径
abortFile=/usr/local/soft/rocketmq_1/store/broker-b/abort
broker-b-s:
brokerClusterName=qwx-cluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=10921
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#nameServer地址,分号分割
namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
#存储路径
storePathRootDir=/usr/local/soft/rocketmq_0/store/broker-b-s
#commitLog 存储路径
storePathCommitLog=/usr/local/soft/rocketmq_0/store/broker-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/soft/rocketmq_0/store/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/soft/rocketmq_0/store/broker-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/soft/rocketmq_0/store/broker-b-s/checkpoint
#abort 文件存储路径
abortFile=/usr/local/soft/rocketmq_0/store/broker-b-s/abort
二、搭建namesrv集群和broker集群遇到的问题
2.1 同一台机器启动两个namesrv,第二个namesrv要改端口
默认是9876端口,第二个namesrv需要改成9877:
1.新建namesrv.propeties文件,在此文件新增以下内容:
listenPort=9877
如下图:
2.以此配置文件启动namesrv:
nohup sh /usr/local/soft/rocketmq_1/bin/mqnamesrv -c /usr/local/soft/rocketmq_1/conf/namesrv.properties >/usr/local/soft/rocketmq_1/logs/mqnamesrv.log 2>&1 &
2.2 启动broker,在虚拟机中可能由于内存不够导致无法启动
这个问题前言中的【RocketMQ 二主二从异步集群部署】第八节有写,引述以下:
在虚拟机中可能由于内存不够导致无法启动,日志文件中出现如下错误:
nohup: ignoring input Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
vim /usr/local/soft/rocketmq/bin/runbroker.sh
把8g和4g改成512m和256m
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
再次启动。
2.2.1 补充
启动报错:
解决方法:
除了要修改runbroker.sh,还要修改runserver.sh、tools.sh,一共要修改三个文件:
- runbroker.sh
- runserver.sh
- tools.sh
2.3 启动报错-jdk路径问题
报错:
这里是因为jdk路径与启动脚本中的jdk路径不一致导致的。在此前我已经安装了jdk。
还是报错,但是目录改成功了。
在回来看上图,提示没有.../bin/java问题,那么就有可能是jdk的安装的问题;
查看java安装路径:/usr/lib/jvm/java...
确实没有jdk目录。
用javac可以运行通过,而用javac -version运行不通过:
到这里,可以确定是java安装的问题了,原因是:openjdk默认安装是没有bin目录的,要选择开发版本安装。
记得安装完成后,做以下操作:
1.yum install java-1.8.0-openjdk-devel.x86_64
2.vim /etc/profile文件,添加以下内容:
#set java environment
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_64
export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_64/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JRE_HOME/bin:$JAVA_HOME/bin
3.让环境变量生效
source etc/profile
解决问题拓展链接:解决linux安装新版JDK时,Java文件夹下没有lib、bin等文件,只有jre的问题_掐住命运的脚脖子的博客-CSDN博客_linux只安装了jre
linux系统yum install jdk后,如何查找安装目录进行环境变量配置 - 弦歌雅意 - 博客园
2.3.1 yum卸载jdk
装了默认的openjdk,要卸载了装开发版,链接附上:
CentOS 7.x 通过yum安装和卸载 JDK1.8_菜鸟也疯狂_的博客-CSDN博客_yum 卸载jdk1.8
解决linux安装新版JDK时,Java文件夹下没有lib、bin等文件,只有jre的问题_掐住命运的脚脖子的博客-CSDN博客_linux只安装了jre
2.4 再次执行,依然报错
出现如下问题 是因为我们在集群中master和slave共用一个storePath造成的,这个时候 我们要启动的每一个broker要指定不一样的storePath 路径就行,也就是在我们的配置文件中修改即可。
broker-a.properties、broker-a-s.properties、broker-b.properties、broker-b-s.properties配置文件增加以下内容,把共用的路径全部分开:
netstat -an|grep 10920
2.5 启动broker-b,启动报错:
上面broker-a启动成功了。启动broker-b,报了地址已使用的错误:
这个错误一般就是端口被占用。
原因分析:
broker-b之前我启动过一次,后来kill掉了,猜测是没kill干净,后来我发现,每一次kill都不干净(不知道是什么原因,以后再探究),都需要找到关联端口的进程号,在kill掉这个进程号:
1.查看端口是否在运行,【netstat -an|grep 10920】:
2.查找端口运行目录,【lsof -i 10920】:
3. 找不到lsof命令,安装:
yum install lsof
4.继续: lsof -i:10920
5.查询5731是什么程序?
暂时不知道是什么原因,先kill掉。
6.启动broker-b,正常
2.6 发现broker-b启动后,broker-a的服务又没了
启动broker-a,报错:
怀疑是端口问题,现在给rocketmq_1服务的端口全换掉;
把broker-b,和broker-a-s端口换成了11920、11911
2.7 然后我怀疑,必须要先启动master,再启动slaver
启动顺序:broker-a——>broker-a-s——>broker-b——>broker-b-s
查看服务,顺利启动了四个:
2.8 测试集群是否有效
用代码测试,报错:
暂时没有解决,以后有机会再解决....
三、搭建rocket管理界面
最初搭建管理界面的初衷是为了查看我的namesrv是否能在界面查得到。但搭建完成后发现集群信息里没有搭建的broker集群信息:
查看rocketmq-web端日志:
心跳注册中心是成功的,所以我觉得有可能是brocker集群没成功注册到nameserver。
四、问题还是没找到,以后有空再找把