一、RocketMQ-部署双Master模式
服务器只有两台,选择双主模式,真实环境建议至少双主双从
服务 | 介绍 | 地址 | 端口 |
---|---|---|---|
rocketmq-nameserver1 | 注册中心1 | 192.168.200.41 | 8047 |
rrocketmq-master1 | broker-a --master | 192.168.200.41 | 8048 |
rocketmq-nameserver2 | 注册中心2 | 192.168.200.42 | 8047 |
broker-a --master2 | broker-b --master | 192.168.200.42 | 8048 |
1、添加host信息
vim /etc/hosts
名称 | 地址 |
---|---|
rocketmq-nameserver1 | 192.168.200.41 |
rrocketmq-master1 | 192.168.200.41 |
rocketmq-nameserver2 | 192.168.200.42 |
rrocketmq-master2 | 192.168.200.42 |
2、下载rocketmq
官方地址:https://rocketmq.apache.org/dowloading/releases/
这里我下载的版本是4.7.0
上传解压并将需要的文件夹复制到 /opt/rocketmq
cd /opt
mkdir rocketmq
unzip rocketmq-all-4.7.0-source-release.zip
cd rocketmq-all-4.7.0/
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/rocketmq-4.7.0/
cp -rp rocketmq-4.7.0/opt/rocketmq
3、创建存储路径
存储路径
mkdir /opt/rocketmq/data
commitLog 存储路径
mkdir /opt/rocketmq/data/commitlog
消息队列存储路径
mkdir /opt/rocketmq/data/consumequeue
消息索引存储路径
/opt/rocketmq/data/index
4、RocketMQ配置文件【两台机器保持一致】
注意:这里我修改了nameserver和broker的端口
nameserver -> 8047 (默认:9876)
broker> 8048 (默认:10911)
关闭了自动创建Topic和订阅组
1、修改配置文件 : broker-a.properties
vim /opt/rocketmq/rocketmq-4.7.0/conf/2m-noslave/broker-a.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 (broker-b.properties的这里改成broker-b)
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割 (可选,该配置默认从系统可用地址中选择一个;)
namesrvAddr=rocketmq-nameserver1:8047;rocketmq-nameserver2:8047
#在某些场景可以手动配置ip,例如程序运行在虚拟机中外部无法访问默认地址,或者用来解决docker本地ip外部无法访问的问题,由于服务器多ip这里选择手动配置ip。
brokerIP1=rocketmq-master1
#可选,broker的ha地址,其用途同上,不过一般不需要配置
#brokerIP2=192.168.*.*
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#Broker 对外服务的监听端口
listenPort=8048
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq/data
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq/data/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq/data/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/data/index
#checkpoint 文件存储
storeCheckpoint=/opt/rocketmq/data/checkpoint
#abort 文件存储路
abortFile=/opt/rocketmq/data/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、修改配置文件 : broker-b.properties
vim /opt/rocketmq/rocketmq-4.7.0/conf/2m-noslave/broker-b.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 (broker-b.properties的这里改成broker-b)
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割(可选,该配置默认从系统可用地址中选择一个;)
namesrvAddr=rocketmq-nameserver1:8047;rocketmq-nameserver2:8047
#在某些场景可以手动配置ip,例如程序运行在虚拟机中外部无法访问默认地址,或者用来解决docker本地ip外部无法访问的问题.服务器多ip这里选择手动配置ip。
brokerIP1=rocketmq-master2
#可选,broker的ha地址,其用途同上,不过一般不需要配置
#brokerIP2=192.168.*.*
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#Broker 对外服务的监听端口
listenPort=8048
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq/data
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq/data/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq/data/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/data/index
#checkpoint 文件存储
storeCheckpoint=/opt/rocketmq/data/checkpoint
#abort 文件存储路
abortFile=/opt/rocketmq/data/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
5、修改日志路径【两台机器】
mkdir -p /opt/rocketmq/logs
cd /opt/rocketmq/rocketmq-4.7.0/conf && sed -i 's#${user.home}#/opt/rocketmq#g' *.xml
6、修改启动脚本参数【两台机器】
设置jvm最小、最大内存,根据服务器配置来定
vim /opt/rocketmq/rocketmq-4.7.0/bin/runbroker.sh
原配置:JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
修改为:JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
vim /opt/rocketmq/rocketmq-4.7.0/bin/runserver.sh
原配置:JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改为:JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
7、先启动nameServer【两台机器】
进入根目录:
cd /opt/rocketmq/rocketmq-4.7.0
编写配置文件
echo "listenPort=8047" > namesrv.properties
启动 NameServer
这里启动的时候我修改了nameserver的端口
nohup sh bin/mqnamesrv -c ./namesrv.properties
查看日志:
tail -f /opt/rocketmq/logs/rocketmqlogs/namesrv.log
成功显示:The Name Server boot success…
8、启动brokerServer1【192.168.200.41】
进入根目录:
cd /opt/rocketmq/rocketmq-4.7.0
启动mqbroker服务 (这里使用的配置文件:broker-a.properties)
nohup sh bin/mqbroker -c /opt/rocketmq/rocketmq-4.7.0/conf/2m-noslave/broker-a.properties &
查看日志
tail -f /opt/rocketmq/logs/rocketmqlogs/broker.log
成功显示:
The broker[%s, 172.30.30.233:10911] boot success…
register broker[0]to name server rocketmq-nameserver2:8047 OK
9、启动brokerServer2【192.168.200.42】
进入根目录:
cd /opt/rocketmq/rocketmq-4.7.0
启动mqbroker服务(这里使用的配置文件:broker-b.properties)
nohup sh bin/mqbroker -c /opt/rocketmq/rocketmq-4.7.0/conf/2m-noslave/broker-b.properties &
查看日志
tail -f /opt/rocketmq/logs/rocketmqlogs/broker.log
10、查看进程是否启动
11、服务的关闭
先关闭broker,再关闭nameServer
sh bin/mqshutdown broker
The mqbroker(36695) is running…
Send shutdown request to mqbroker(36695) OK
sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running…
Send shutdown request to mqnamesrv(36664) OK
12、Topic的创建
创建Topic使用的命令: mqadmin updateTopic
cd /opt/rocketmq/rocketmq-4.7.0/bin
./mqadmin updateTopic
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
usage: mqadmin updateTopic [-b <arg>] [-c <arg>] [-h] [-n <arg>] [-o <arg>] [-p <arg>] [-r <arg>] [-s <arg>]
-t <arg> [-u <arg>] [-w <arg>]
-b,--brokerAddr <arg> create topic to which broker
-c,--clusterName <arg> create topic to which cluster
-h,--help Print help
-n,--namesrvAddr <arg> Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
-o,--order <arg> set topic's order(true|false)
-p,--perm <arg> set topic's permission(2|4|6), intro[2:W 4:R; 6:RW]
-r,--readQueueNums <arg> set read queue nums
-s,--hasUnitSub <arg> has unit sub (true|false)
-t,--topic <arg> topic name
-u,--unit <arg> is unit topic (true|false)
-w,--writeQueueNums <arg> set write queue nums
例如:
/mqadmin updateTopic -n 192.168.200.41:8047 -c rocketmq-cluster -t rocketTopic
二、RocketMQ 可视化工具
项目下载地址:https://github.com/apache/rocketmq-externals
下载很慢,这里分享我自己下载的:
链接:https://pan.baidu.com/s/1gjsgrwE1t2_I_k4D0mSo6g 密码:bo7k
## rocketmq 可视化工具
1、修改配置文件
cd /opt/rocketmq-externals/rocketmq-console/src/main/resources
vim application.properties
2、修改内容
server.port=8066 此可视化插件的运行端口。
rocketmq.config.namesrvAddr=rocketmq-nameserver1:8047;rocketmq-nameserver2:8047
rocketmq.config.isVIPChannel=false 不使用vip通道
3、进入跟目录
cd /opt/rocketmq-externals/rocketmq-console
4、项目打包
mvn clean package -Dmaven.test.skip=true
5、运行
cd target
java -jar rocketmq-console-ng-1.0.1.jar
登录访问Console
在访问Console时支持按用户名和密码登录控制台,在操作完成后登出。需要做如下的设置:
1.在Spring配置文件resources/application.properties中修改 开启登录功能
# 开启登录功能
rocketmq.config.loginRequired=true
# Dashboard文件目录,登录用户配置文件所在目录
rocketmq.config.dataPath=/tmp/rocketmq-console/data
2.确保${rocketmq.config.dataPath}定义的目录存在,并且该目录下创建登录配置文件"users.properties", 如果该目录下不存在此文件,则默认使用resources/users.properties文件。 users.properties文件格式为:
# 该文件支持热修改,即添加和修改用户时,不需要重新启动console
# 格式, 每行定义一个用户, username=password[,N] #N是可选项,可以为0 (普通用户); 1 (管理员)
#定义管理员
admin=admin,1
#定义普通用户
user1=user1
user2=user2
访问可视化工具:http://localhost:8066/
可以在工具里新建/删除 Topic和订阅组