本次搭建的是双Master+双Slave集群模式
笔记最后记录了本次安装出现的一些问题,以及解决方法
操作系统
采用虚拟机安装,所使用的虚拟机是UbuntuServer 20.04TLS Arm
maven
从源码构建rocketmq-dashboard需要使用maven,采用的版本为3.6.3,ubuntu系统可使用下列命令安装
sudo apt-get install maven
安装后,可使用下列命令找到maven的安装位置,我的虚拟机显示maven的安装位置为/usr/share/maven
whereis maven
修改maven的镜像源为阿里源,进入maven的安装目录,进入conf目录,然后使用vim在settings.xml文件的标签内添加如下内容:
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
openjdk8
rocketmq使用java开发,所以需要安装java环境,这里也是直接从ubuntu下载,输入如下命令即可
sudo apt-get install openjdk-8-jdk
将上述依赖中的两个文件下载,并上传到虚拟机中(windows下面可以使用xftp,mac下面可以使用royal tsx),至此准备环境完毕
本次集群安装使用了两个独立的虚拟机,UbuntuServer1和UbuntuServer2,两个虚拟机安装的内容如下:
UbuntuServer1
| 名称 | 使用端口 |
|---|---|
| NameServer | 9876 |
| broker-b(Master) | 18001 |
| broker-a (Slave) | 17003 |
| rocketmq-dashboard | 19001 |
UbuntuServer2
| 名称 | 使用端口 |
|---|---|
| NameServer | 9876 |
| broker-a(Master) | 17001 |
| broker-b(Slave) | 18003 |
上传文件以及解压
在UbuntuServer1虚拟机中上传rocketmq以及rocketmq-dashborad压缩包,并解压
在UbuntuServer1中从源码编译rocketmq-dashboard
只要修改了maven的镜像源为阿里源,那么参考官方的源码编译步骤,应该没什么问题
进入rocketmq-all(这个目录是我解压rocketmq官方二进制压缩包后自己修改的名称)文件夹下的/conf/2m-2s-async目录
这个目录下面是官方为我们提供的双主双从集群模式的配置文件模版
将broker-b.properties文件的内容替换如下
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
# 设置MasterB的监听端口
listenPort=18001
将broker-a-s.properties文件的内容替换如下
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
# 设置SlaveA的监听端口
listenPort=17003
# 这里的路径替换为自己的
storePathRootDir=/home/xcfyl/store-s
storePathCommitLog=/home/xcfyl/store-s/commitlog
storePathConsumeQueue=/home/xcfyl/store-s/consumequeue
storePathIndex=/home/xcfyl/store-s/index
storeCheckpoint=/home/xcfyl/store-s/checkpoint
abortFile=/home/xcfyl/store-s/abort
自此UbuntuServer1虚拟机中的配置环境已经准备好了
按照同样的方式,修改UbuntuServer2中的rocketmq-all文件夹下面的配置文件,具体如下
将broker-a.properties文件的内容替换如下
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
# 设置MasterA的监听端口
listenPort=17001
将broker-b-s.properties文件的内容替换如下
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.211.55.67:9876;10.211.55.68:9876
# 设置SlaveB的监听端口
listenPort=18003
storePathRootDir=/home/xcfyl/store-s
storePathCommitLog=/home/xcfyl/store-s/commitlog
storePathConsumeQueue=/home/xcfyl/store-s/consumequeue
storePathIndex=/home/xcfyl/store-s/index
storeCheckpoint=/home/xcfyl/store-s/checkpoint
abortFile=/home/xcfyl/store-s/abort
自此UbuntuServer2虚拟机中的配置环境已经准备好了,这里要非常小心,不要改错了文件,不然后面会导致启动出现问题
启动集群的时候,请严格按照下述步骤
分别在UbuntuServer1和UbuntuServer2中启动NameServer,使用命令如下,运行该指令,需要进入rocketmq-all目录下
# 启动nameserver
nohup sh bin/mqnamesrv &
# 查看日志,如果出现boot success类似的字样,那么一般就是成功了
tail -f ~/logs/rocketmqlogs/namesrv.log
启动UbuntuServer1和UbuntuServer2中的Master,使用命令如下
UbuntuServer1启动Master,使用的配置文件是broker-b.properties,因为要在UbuntuServer1中部署名称为broker-b的Master节点,参见之前的虚拟机规划
# 启动名称为broker-b的Master
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties & tail -f ~/logs/rocketmqlogs/broker.log
# 查看是否启动成功
tail -f ~/logs/rocketmqlogs/broker.log
UbuntuSever2启动Master
# 启动名称为broker-a的Master
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
# 查看是否启动成功
tail -f ~/logs/rocketmqlogs/broker.log
启动UbuntuServer1和UbuntuServer2中的Slave,使用命令如下
UbuntuServer1启动Slave,使用的配置文件是broker-a-s.properties,因为要在UbuntuServer1中部署名称为broker-a-s的Slave节点,参见之前的虚拟机规划
# 启动名称为broker-a-s的Slave
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
UbuntuServer2启动Slave
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log 12
运行rocketmq-dashboard
确保在这之前已经正确编译了rocketmq-dashboard,编译完成之后,进入target目录,输入如下指令运行dashboard

在宿主机上,输入http://安装了dashboard虚拟机的ip地址:19001访问控制面板

如果看到了如下内容说明集群已经正常启动
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7yKTvZG-1663248170319)(assets/image-20220915210802666.png)]](https://1000bd.com/contentImg/2023/11/09/011506447.png)
进入rocketmq-all目录下面的bin目录,先后执行如下指令,即可关闭一台机器上的NameServer和Master以及Slave
# 关闭nameserver
./mqshutdown namesrv
# 关闭broker
./mqshutdown broker
# 通过jps查看java进程是否终止
jps
在使用nohup命令启动后台服务的时候,可能出现控制台阻塞的情况,输出一句话,但是半天不往下面走,这是正常现象,Ctrl+C即可,如果使用Ctrl+C出现了Exit的字样,那么就说明不正常了,此时可以进入rocketmq-all目录下面,查看nohup.out的内容进行排查,cat nohup.out查看即可
直接从别人的文件中拷贝broker的配置文件,结果内容完全一样,自己死活运行不起来,可能的原因是,properties文件中,某些配置项的末尾多了一些看不见的空格,这个时候,可以进入vim的命令模式(esc即可进入),然后把光标移动每一行的末尾,就可以看见多余的空格,光标移动到空格处,命令模式下按下x即可删除。
端口问题,同一台机器的两个broker的端口好像不能太近,我之前使用的全是broker的默认端口,结果就是启动不了,然后改为了较大的端口,并且两个端口差别也比较大的时候,就ok了。
maven一定要修改镜像源,不然可能导致编译dashboard的过程中,报各种依赖下载错误。
关于虚拟机的问题,如果两个虚拟机是从别的虚拟机复制来的,那么要记得更改虚拟机的ip地址,可以直接将虚拟机的ip地址改为静态ip,ubuntu server的更改方法为:
vim /etc/netplan/xx-installer-config.yaml
将该文件修改为如下内容即可
# This is the network config written by 'subiquity'
network:
ethernets:
enp0s5:
dhcp4: false
# 你的静态ip地址
addresses: ['10.211.55.68/24']
# 网关地址
gateway4: 10.211.55.1
# dns地址
nameservers:
addresses: ['10.211.55.1']
version: 2