Linux部署RocketMQ集群
1. Linux启动RocketMQ
- 进入rocketmq环境变量的路径:bin目录
cd /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/bin
- 在bin目录下启动Name Server
nohup sh mqnamesrv
- 在bin目录下启动Broker
nohup sh mqbroker
注:若无法启动,改runbroker.sh和runserver.sh中的启动内存,要小于虚拟机内存,两者启动内存大小一致
- 查看两个进程是否启动
jps
提示:3601 Jps
3494 NamesrvStartup
3530 BrokerStartup
- 关掉服务器:需先关broker,再关nameserver
sh mqshutdown broker
提示:The mqbroker(36695) is running…
Send shutdown request to mqbroker(36695) OK
sh mqshutdown namesrv
提示:The mqnamesrv(36664) is running…
Send shutdown request to mqnamesrv(36664) OK
2. Linux部署双master模式集群
- 修改两台机子的hosts文件:
vi /ect/hosts
192.168.9.157 rocketmq-nameserver1
192.168.9.157 rocketmq-master1
192.168.9.150 rocketmq-nameserver2
192.168.9.150 rocketmq-master2
注:修改前需先关闭两台机子防火墙
2. 重启网卡
service network restart
- 两台机互相ping一下,例:
ping 192.168.9.150
ping rocketmq-nameserver2
ping rocketmq-master2
- 解压rocketmq到指定的文件夹
tar -zxvf rocketmq-all-4.3.2.tar.gz -C /usr/local
修改文件名为rocketmq: mv rocketmq-all-4.3.2 rocketmq
创建软连接(可有可无): ln -s rocketmq rocketmq
- 根据需要,创建数据存储路径(两台机器都要创建),可跳过
mkdir rocketmq/data //存储路径
mkdir rocketmq/data/commitlog //commitLog 存储路径
mkdir rocketmq/data/consumerqueue //消费队列存储路径存储路径
mkdir rocketmq/data/index //消息索引存储路径
- 两台机分别进入/usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-noslave目录,增加代码(注意路径是:/conf/2m-noslave)
主机1修改broker-a.properties文件:
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;
主机2修改broker-b.properties文件 :
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;
注:根据需要可加其他配置,如下
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a|broker-b
#0 表示 Master, >0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 0点
deleteWhen=00
#文件保留时间,默认 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=128
- 根据需要,修改日志配置文件(两台机器同样操作),可跳过
创建一个logs目录: mkdir /opt/rocketmq/logs
然后执行以下代码进行日志文件的替换,sed是linux的替换命令。
cd /opt/rocketmq/conf && sed -i 's#${user.home}#/opt/rocketmq#g' *.xml
-
根据需要,修改启动脚本参数,JVM调优(两台机器同样操作),可跳过
由于将nameServer和broker放在了同一台机器上,所以根据实际情况可分别对nameServer和broker进行jvm的性能调优,生产环境默认即可不需修改。
比如我的虚拟机内存只有1G,假设nameserver和broker默认启动内存为1G的话,那么我的虚拟机会因为内存不够而无法同时启动nameserver和broker,此时就需要把两个的启动内存改小一点。
a)broker的调优
vim /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/bin/runbroker.sh
修改 JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"中的启动内存
b)nameserver的调优
vim /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/bin/runserver.sh
修改 JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"中的启动内存
- 返回bin目录分别启动两台机子的nameserver( 两台机器同样操作 )
nohup sh mqnamesrv &
可用jps
命令查看是否有nameserver进程
- 在bin目录分别启动两台机子broker:
主机1(master1):注意主要路径是 /conf/2m-noslave/broker-a.properties
nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
主机2(master2):注意主要路径是 /conf/2m-noslave/broker-b.properties
nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
可用jps
命令查看是否有broker进程
注:先启动两台机器的NameServer,再启动两台机器的Borker,关机的时候顺序相反,先关闭两台机器的Broker,再关闭两台机器的Nameserver。
- 在rocketmq的bin目录下查看集群情况:
sh mqadmin clusterList -n "192.168.9.157:9876;192.168.9.150:9876"
注:也可在Windows端开启管控台,启动步骤在下文第4点
- 停止broker命令
sh mqshutdown broker
- 停止nameserver命令
sh mqshutdown namesrv
3. Linux部署双master双slave异步复制集群(精简版)
- 修改四台机子的hosts文件:
vi /ect/hosts
192.168.9.157 rocketmq-nameserver1
192.168.9.157 rocketmq-master1
192.168.9.150 rocketmq-nameserver2
192.168.9.150 rocketmq-master2
192.168.9.154 rocketmq-nameserver3
192.168.9.154 rocketmq-master1-slave
192.168.9.155 rocketmq-nameserver4
192.168.9.155 rocketmq-master2-slave
- 重启网卡
service network restart
- 互相ping一下,例:
ping 192.168.9.150
ping rocketmq-nameserver2
ping rocketmq-master2
- 四台机进入/usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async目录,增加一行代码
主机1修改broker-a.properties文件
主机2修改broker-b.properties文件
从机1修改broker-a-s.properties文件
从机2修改broker-b-s.properties文件
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
- 在bin目录分别启动四台机子的nameserver
nohup sh mqnamesrv &
- 在bin目录分别启动四台机子broker:
主机1:
nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &
主机2:
nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &
从机1:
nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &
从机2:
nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &
- 在rocketmq的bin目录下查看集群情况:
sh mqadmin clusterList -n "192.168.9.157:9876;192.168.9.150:9876;192.168.9.154:9876;192.168.9.155:987"
注:可在Windows端开启管控台,步骤下文有,需改application.properties中的namesrvAddr
4. Windows 启动 RocketMQ 管控台
-
打开下载好的文件,先进入 E:\rocketmq-externals-master\rocketmq-console\src\main\resources,修改application.properties中的namesrvAddr和server.port配置,例如:
server.port=8082 //此处配置管控台端口,浏览器访问就是用这个端口
rocketmq.config.namesrvAddr=192.168.0.158:9876;192.168.0.179:9876
- Cmd命令框执行进入E:\rocketmq-externals-master\rocketmq-console,编译生成
mvn clean package -Dmaven.test.skip=true
- 编译成功后,Cmd命令框执行进入E:\rocketmq-externals-master\rocketmq-console\target,启动‘rocketmq-console-ng-1.0.0.jar’。
java -jar rocketmq-console-ng-1.0.0.jar
- 浏览器中输入‘127.0.0.1:配置端口’,成功后即可查看。
localhost:8082
端口在E:\rocketmq-externals-master\rocketmq-console\src\main\resources中的‘application.properties’文件可看,如server.port=8082