服务器环境
主要用到以下两台服务器来做双master集群
服务器:
序号 | IP(公) | IP(内) | 用户名 | 密码 | 角色 | 模式 | 备注 |
1 | 192.168.1.151 |
| root | root | nameServer1 brokerServer1 | Master1 | 服务:
应用App:
|
2 | 192.168.1.152 |
| root | root | nameServer2 brokerServer2 | Master2 | 服务:
应用App:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
操作过程:
安装包已经上传至其中1个节点
两个服务器解压安装都一样
1、解压缩安装包
命令:
unzip rocketmq-all-4.2.0-bin-release.zip -d /usr/local/rocketmq
-d表示解压到指定目录
解压缩之后如下(如没按unzip,则安装unzip命令是:yum install -y unzip zip):
2、创建存储路径【两台服务器】
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index
3、RocketMQ配置文件【两台机器】
为了方便管理配置文件,每台服务器的配置都创建一份其他服务器的配置文件,如果需要修改配置内容,则在任一 一台服务器中修改相应的配置文件,然后把该台的所有配置文件拷贝覆盖到其他服务器就行。
vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties
配置broker-a.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 (broker-b.properties的这里改成broker-b)
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#namesrvAddr=rocketmq-nameserver:9876;rocketmq-nameserver2:9876
namesrvAddr=192.168.1.151:9876;192.168.1.152:9876
#可选,该配置默认从系统可用地址中选择一个;
#在某些场景可以手动配置ip,例如程序运行在虚拟机中外部无法访问默认地址,或者用来解决docker本地ip外部无法访问的问。
brokerIP1=192.168.1.151
#可选,broker的ha地址,其用途同上,不过一般不需要配置
#brokerIP2=192.168.1.152
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128lushDiskType=ASYNC_FLUSH
配置broker-b.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 (broker-b.properties的这里改成broker-b)
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#namesrvAddr=rocketmq-nameserver:9876;rocketmq-nameserver2:9876
namesrvAddr=192.168.1.151:9876;192.168.1.152:9876
#可选,该配置默认从系统可用地址中选择一个;
#在某些场景可以手动配置ip,例如程序运行在虚拟机中外部无法访问默认地址,或者用来解决docker本地ip外部无法访问的问。
brokerIP1=192.168.1.152
#可选,broker的ha地址,其用途同上,不过一般不需要配置
#brokerIP2=192.168.1.152
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128lushDiskType=ASYNC_FLUSH
将2个配置文件远程拷贝到152服务器中:
命令:
scp /usr/local/rocketmq/conf/2m-noslave/broker-a.properties root@192.168.1.152:/usr/local/rocketmq/conf/2m-noslave/
scp /usr/local/rocketmq/conf/2m-noslave/broker-b.properties root@192.168.1.152:/usr/local/rocketmq/conf/2m-noslave/
4、修改日志配置文件,替换路径名【两台机器】
mkdir -p /usr/local/rocketmq/logs
cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
5、修改启动脚本参数【两台机器】
设置jvm最小、最大内存,如:
java -Xmx72g -Xms72 -Xmn4g -Xss256m
-Xmx72g:设置JVM最大可用内存为72g.
-Xms72g:设置JVM促使内存为72g.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存.
-Xmn4g:设置年轻代大小为rG.
-Xss256m:设置每个线程的堆栈大小
-XX:MaxPermSize=256m:设置持久代(即方法区)大小为256m.
-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4.
vim /usr/local/rocketmq/bin/runbroker.sh
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m XX:PermSize=128m -XX:MaxPermSize=320m"
6、先启动NameServer【两台机器】
cd /usr/local/rocketmq/bin
nohup sh mqnamesrv &
7、在启动BrokerServer A【192.168.1.151】
cd /usr/local/rocketmq/bin
#启动mqbroker服务
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties &
#查看端口
netstat -ntlp
#查看进程
jps
#查看日志
tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
8、启动BrokerServer B【192.168.1.152】
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties &
netstat -ntlp
jps
tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
9、防火墙开发端口
如果报连接异常,请把9876端口添加到防火墙白名单或停止防火墙:
添加端口:firewall-cmd --permanent --add-port=9876/tcp
关闭防火墙:service firewalld stop
启动防火墙:service firewalld start
重启防火墙:firewall-cmd -–reload
防火墙启用状态:firewall-cmd –state
查看防火墙是否已开发:firewall-cmd --query-port=9876/tcp
查看所有打开的端口: firewall-cmd --list-ports
成功后显示:
先关闭所有的mq broker服务
sh /usr/local/rocketmq/bin/mqshutdown broker
再关闭所有的mq nameserv服务
sh /usr/local/rocketmq/bin/mqshutdown broker
10、启动rocketmq web管理界面
下载管理页面项目,并打包为jar
下载: https://github.com/apache/rocketmq-externals.git
使用maven打包下载文件中的rocketmq-console-ng项目
进入rocketmq-console-ng项目根目录,执行:mvn clean package -Dmaven.test.skip=true
之后会生成一个rocketmq-console-ng-1.0.0.jar项目,该项目是一个springboot项目,可以使用java -jar rocketmq-console-ng-1.0.0.jar 启动项目。
在项目的application.properties中配置namesrv地址
配置mq服务地址:
rocketmq.config.namesrvAddr=192.168.1.151:9876;192.168.1.152:9876
上传并启动,以下两种都可以
(1)nohup java -jar rocketmq-console-ng-1.0.0.jar &
(2)nohup java -jar rocketmq-console-ng-1.0.0.jar & > log.file 2>&1 &
防火墙开放端口,并重启防火墙,然后访问地址显示: