rocketmq双master集群安装

RocketMQ的集群部署方式有多种,其中包括单个Master、多个Master、多Master多Slave模式(异步复制)以及多Master多Slave模式(同步双写)。本次以多Master集群模式为例搭建一个双机Master的RocketMQ集群环境。

RocketMQ是java写的,所以可以自己编译,也可以直接下载编译好的,具体可以参考官方教程中的下载地址,http://rocketmq.apache.org/release_notes/release-notes-4.2.0/

下面说一下编译安装

1.准备环境

  1. 64bit OS, Linux/Unix/Mac is recommended;
  2. 64bit JDK 1.8+;
  3. Maven 3.2.x
  4. Git

2.编译,如果下载编译后文件跳过些步

先下载源码,解压后进行编译

  > unzip rocketmq-all-4.2.0-source-release.zip
  > cd rocketmq-all-4.2.0/
  > mvn -Prelease-all -DskipTests clean install -U
  > cd distribution/target/apache-rocketmq

可以看到生成上面的rocketmq的文件,同时target目录下还有一个apache-rocketmq.zip和apache-rocketmq.tar.gz是对上述文件夹的打包产物。我们上传服务器可以用这个。


3.修改配置

3.1.修改RocketMQ的配置文件:${rocket_home}/conf/2m-noslave/broker-a.properties  broker-b.properties(两台都要修改)

#所属集群名字
brokerClusterName=rocketmq-cluster 
#broker名字,注意此处不同的配置文件填写的不一样 
#broker-a.properties就写broker-a,broker-b.properties就写broker-b
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.1.106:9876;192.168.1.107:9876
#在发送消息时,自动创建服务器不存在的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
#定期检查Hanged文件间隔时间(单位毫秒)
#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
#刷CommitLog,至少刷几个PAGE
#flushCommitLogLeastPages=4 
#刷ConsumeQueue,至少刷几个PAGE
#flushConsumeQueueLeastPages=2 
#刷CommitLog,彻底刷盘间隔时间
#flushCommitLogThoroughInterval=10000 
#刷ConsumeQueue,彻底刷盘间隔时间
#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

因为有两个master主节点,所以主节点1启动依赖broker-a.properties,主节点2启动依赖broker-b.properties,如果是三个Master,那么还会有一个broker-c.properties,以此类推。

如果无法正确获取broker的ip地址,可以在配置文件中加入brokerIP1=10.0.116.13来设置固定ip

3.2.创建数据存储路径(两台机器都要创建)

mkdir /opt/soft/rocketmq/store
mkdir /opt/soft/rocketmq/logs
mkdir /opt/soft/rocketmq/store/{commitlog,consumequeue,index,checkpoint,abort}

3.3 修改日志文件配置

cd /opt/soft/rocketmq/conf && sed -i 's#${user.home}#/opt/soft/rocketmq#g' *.xml

3.4 修改启动脚本参数(JVM参数的配置)(两台都要修改)


##分别修改 runbroker.sh runserver.sh tools.sh 的JAVA_OPT部分,调整内存为自己合适大小
vi /opt/soft/rocketmq/bin/runbroker.sh
#修改为以下内容
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=320m"

4. 启动服务

先启动两台机器的NameServer,再启动两台机器的Borker,关机的时候顺序相反,先关闭两台机器的Broker,再关闭两台机器的Nameserver。

4.1 启动nameserver(两台都要启动)

分别在两台机器上执行

nohup sh bin/mqnamesrv > /dev/null 2>&1 &

使用tail -f /opt/soft/rocketmq/logs/rocketmqlogs/namesrv.log查看nameserver启动日志

4.2 启动broker(两台都要启动)

注意:这里第一个节点就用broker-a.properties  第二个节点就用broker-b.properties

nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

使用netstat -ntlp可以看到nameserver的9876端口 和broker通信的10911接口都已经被占用

使用tail -f /usr/local/rocketmq/logs/rocketmqlogs/broker.log查看broker启动日志

5.停止rocketMQ服务

关闭namesrv服务:sh /usr/local/rocketmq/bin/mqshutdown namesrv

关闭broker服务 :sh /usr/local/rocketmq/bin/mqshutdown broker

6.rocketMq监控平台rocketmq-console搭建

rocketmq下载地址:https://github.com/apache/incubator-rocketmq-externals/tree/master/rocketmq-console

下载源码后,找到配置文件application.properties,并按照自己需求进行配置。

例如:

rocketmq.config.namesrvAddr=namesrv服务地址(ip1:port;ip2:port)


在文件根目录执行命令:

mvn clean package -Dmaven.test.skip=true

然后在target目录下找到文件rocketmq-console-ng-1.0.0.jar


启动rocketmq-console,执行命令:

java -jar rocketmq-console-ng-1.0.0.jar

也可以在启动的时候通过参数指定nameserver地址,如下:

nohup java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876

本文主要参考https://blog.csdn.net/qq_34021712/article/details/78169014

猜你喜欢

转载自blog.csdn.net/liufei198613/article/details/80913048