RocketMQ集群搭建-双主双从高可用

目录

 

一、部署架构

二、环境准备

三、部署nameServer

a、机器A

b、机器B

四、部署broker

 

a、机器A配置

b、机器B配置

五、启动broker

六、安装console客户端


一、部署架构

架构图

本次搭建的RocketMQ集群是双主双从的高可用模式,目前因为机器有限,所有使用的是两台Linux服务器。

服务器名称ip角色
机器A192.168.0.1nameServer、master:broker-A、slave:broker-B-slave、mq-console
机器B192.168.0.2nameServer、master:broker-B、slave:broker-A-slave

 

 

 

 

  • nameServer:两台机器都有一个nameServer,提供路由管理、服务注册、服务发现的功能。nameServer集群间互不通信。可以进行横向扩展;
  • broker:两台机器互为主备broker,broker是RocketMQ的核心,提供了消息的接收,存储,拉取等功能。当broker-master挂掉之后,消费者依然可以从broker-slave消费消息;
  • mq-console:是mq的客户端,可以页面化操作管理mq集群;

二、环境准备

java环境jdk1.8 64位
服务器两台1核2G内存服务器,Linux64位,开放端口号9876、8080、10911、10922

 

 

 

三、部署nameServer

从官网(http://rocketmq.apache.org/release_notes/release-notes-4.7.1/)下载二进制包:rocketmq-all-4.7.1-bin-release.zip

a、机器A

1、创建文件夹

# cd /data
# mkdir rocketmq
# cd rocketmq

2、上传文件到 /data/rocketmq

3、解压rocketmq-all-4.7.1-bin-release.zip

 

# upzip rocketmq-all-4.7.1-bin-release.zip

4、修改文件夹rocketmq-all-4.7.1-bin-release名称为rocketmq-4.7.1,方便后续配置操作

# mv rocketmq-all-4.7.1-bin-release rocketmq-4.7.1

5、创建日志存放的文件夹logs

# mkdir logs

6、修改namesever的启动配置,调小点内存参数

 

# cd /data/rocketmq/rocketmq-4.7.1/bin
# vim runserver.sh

配置修改如下:(因为机器内存小,所以设置使用的内存小点)

找到这行:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
然后修改成自己要的配置,这里配置jvm内存
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=64m"

7、创建启动文件sh

# cd /data/rocketmq
# touch mqNameServerStart.sh
# chmod +x mqNameServerStart.sh
# vim mqNameServerStart.sh

编辑的内容如下:

#!/bin/sh

cd /data/rocketmq/rocketmq-4.7.1/bin

nohup sh mqnamesrv >/data/rocketmq/logs/mqnamesrv.log 2>&1 &

exit

8、启动nameserver

 

# ./mqNameServerStart.sh
# cat /data/rocketmq/logs/mqnamesrv.log 

b、机器B

第二台机器B部署nameServer跟机器A的一样,重复第1步到第8步启动就可以。

四、部署broker

rocketmq默认给出了三种建议配置模式

2m-2s-async(主从异步),----本文采用这种两主两从的高可用模式

2m-2s-sync(主从同步)

2m-noslave(仅master)

我们接下来会这样设置:

机器A的master使用broker-a.properties配置文件,对应的是机器B的slave使用的broker-a-slave.properties配置文件;

机器B的master使用broker-b.properties配置文件,对应的是机器A的slave使用的broker-b-slave.properties配置文件;

这样配置互为master、slave主从服务。

 

a、机器A配置

1、创建文件夹store,store-s(store-a:master数据存储文件夹,store-b-s:salve数据存储文件夹)

 

# mkdir store-a store-b-s

2、机器A上修改master的broker-a.properties配置文件

 

# cd /data/rocket/rocketmq-4.7.1/conf/2m-2s-async
# vim broker-a.properties

配置内容如下面:

# 集群名称,这里要master和slave保持一样
brokerClusterName=cjsCluster
# broker名字
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认48小时,这里设置5天
fileReservedTime=120
#Broker 的角色 - ASYNC_MASTER 异步复制Master
brokerRole=ASYNC_MASTER
#刷盘方式 - ASYNC_FLUSH 异步刷盘
flushDiskType=ASYNC_FLUSH
#开启账号密码连接,需要配置plain_acl.yml文件里面的账号密码用于连接
aclEnable=true

# Broker 对外服务的监听端口
listenPort=10911
# nameserver地址,分号分割
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#本机IP
brokerIP1=192.168.0.1
storePathRootDir=/data/rocketmq/rocketmq-4.7.1/store-a
storePathCommitLog=/data/rocketmq/rocketmq-4.7.1/store-a/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/data/rocketmq/rocketmq-4.7.1/store-a/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/rocketmq-4.7.1/store-a/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/rocketmq-4.7.1/store-a/checkpoint
#abort文件存储路径
abortFile=/data/rocketmq/rocketmq-4.7.1/store-a/abort
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

3、机器A上修改slave的broker-b-slave.properties配置文件

 

# cd /data/rocket/rocketmq-4.7.1/conf/2m-2s-async
# vim broker-b-s.properties

配置内容如下面:这里要注意配置里的 listenPort=10922 端口号,同一台机器不能用太靠近master使用的10911端口号,否则启动会报地址被占用的错误。

# 集群名称
brokerClusterName=cjsCluster
# broker名字
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时,这里设置5天
fileReservedTime=120
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#开启账号密码连接
aclEnable=true

# Broker 对外服务的监听端口
listenPort=10922
# nameserver地址,分号分割
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#本机IP
brokerIP1=192.168.0.1
storePathRootDir=/data/rocketmq/rocketmq-4.7.1/store-b-s
storePathCommitLog=/data/rocketmq/rocketmq-4.7.1/store-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/data/rocketmq/rocketmq-4.7.1/store-b-s/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/rocketmq-4.7.1/store-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/rocketmq-4.7.1/store-b-s/checkpoint
#abort文件存储路径
abortFile=/data/rocketmq/rocketmq-4.7.1/store-b-s/abort
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

4、机器A上修改brokersever的启动配置,调小点内存参数(内存有限)

 

# cd /data/rocketmq/rocketmq-4.7.1/bin
# vim runbroker.sh

配置修改如下:

找到这行:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
然后修改成自己要的配置,这里配置jvm内存
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

5、机器A上修改文件plain_acl.yml,加入ACL验证

内容配置为:

 

 

globalWhiteRemoteAddresses:
- 192.168..

accounts:
- accessKey: cjs123
  secretKey: 12345678
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: SUB
  topicPerms:
  groupPerms:

- accessKey: admin123
  secretKey: 12345678
  whiteRemoteAddress:
  admin: true

配置注意点:

  • globalWhiteRemoteAddresses 配置的ip白名单不需要使用下面的accessKey和secretKey就可以进行所有操作;其他非白名单的ip需要用下面的accessKey和secretKey才能进行相应权限操作;所以这里要慎重设置;
  • admin的配置:false代表是普通用户,可配置一定权限;true是管理员账号,可以进行所有操作;
  • accessKey和secretKey长度上有限制,必须大于6个字符

6、机器A上编写启动文件

# cd /data/rocketmq
# touch mqbrokerStart-a.sh
# touch mqbrokerStart-b-s.sh
# chmod +x mqbrokerStart-a.sh
# chmod +x mqbrokerStart-b-s.sh

master启动文件mqbrokerStart-a.sh内容如下:

#!/bin/sh

cd /data/rocketmq/rocketmq-4.7.1/bin

nohup sh mqbroker -c /data/rocketmq/rocketmq-4.7.1/conf/2m-2s-async/broker-a.properties > /data/rocketmq/logs/broker-a.log 2>&1 &

exit

slave启动文件mqbrokerStart-b-s.sh内容如下:

#!/bin/sh

cd /data/rocketmq/rocketmq-4.7.1/bin

nohup sh mqbroker -c /data/rocketmq/rocketmq-4.7.1/conf/2m-2s-async/broker-b-s.properties > /data/rocketmq/logs/broker-b-s.log 2>&1 &

exit

b、机器B配置

1、创建文件夹store-b,store-a-s文件(store-b:master数据存储文件,store-a-s:salve数据存储文件)

 

 

# mkdir store-b store-a-s

2、机器B上修改master的broker-b.properties配置文件

 

# cd /data/rocket/rocketmq-4.7.1/conf/2m-2s-async
# vim broker-b.properties

配置内容如下面:

# 集群名称
brokerClusterName=cjsCluster
# broker名字
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时,这里设置5天
fileReservedTime=120
#Broker 的角色 - ASYNC_MASTER 异步复制Master
brokerRole=ASYNC_MASTER
#刷盘方式 - ASYNC_FLUSH 异步刷盘
flushDiskType=ASYNC_FLUSH
#开启账号密码连接
aclEnable=true

# Broker 对外服务的监听端口
listenPort=10911
# nameserver地址,分号分割
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#本机IP
brokerIP1=192.168.0.2
storePathRootDir=/data/rocketmq/rocketmq-4.7.1/store-b
storePathCommitLog=/data/rocketmq/rocketmq-4.7.1/store-b/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/data/rocketmq/rocketmq-4.7.1/store-b/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/rocketmq-4.7.1/store-b/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/rocketmq-4.7.1/store-b/checkpoint
#abort文件存储路径
abortFile=/data/rocketmq/rocketmq-4.7.1/store-b/abort
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

3、机器B上修改slave的broker-a-slave.properties配置文件

 

# cd /data/rocket/rocketmq-4.7.1/conf/2m-2s-async
# vim broker-a-s.properties

配置内容如下面:这里要注意配置里的 listenPort=10922 端口号,同一台机器不能用太靠近master使用的10911端口号,否则启动会报地址被占用的错误。

# 集群名称
brokerClusterName=cjsCluster
# broker名字
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时,这里设置5天
fileReservedTime=120
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#开启账号密码连接
aclEnable=true

# Broker 对外服务的监听端口
listenPort=10922
# nameserver地址,分号分割
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#本机IP
brokerIP1=192.168.0.2
storePathRootDir=/data/rocketmq/rocketmq-4.7.1/store-a-s
storePathCommitLog=/data/rocketmq/rocketmq-4.7.1/store-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/data/rocketmq/rocketmq-4.7.1/store-a-s/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq/rocketmq-4.7.1/store-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq/rocketmq-4.7.1/store-a-s/checkpoint
#abort文件存储路径
abortFile=/data/rocketmq/rocketmq-4.7.1/store-a-s/abort
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

4、机器B上修改brokersever的启动配置,调小点内存参数(内存有限)

 

# cd /data/rocketmq/rocketmq-4.7.1/bin
# vim runbroker.sh

配置修改如下:

找到这行:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
然后修改成自己要的配置,这里配置jvm内存
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

5、机器B上修改文件plain_acl.yml,加入ACL验证

内容配置为:(使用跟机器A一样的配置)

 

 

globalWhiteRemoteAddresses:
- 192.168..

accounts:
- accessKey: cjs123
  secretKey: 12345678
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: SUB
  topicPerms:
  groupPerms:

- accessKey: admin123
  secretKey: 12345678
  whiteRemoteAddress:
  admin: true

6、机器B上编写启动文件

# cd /data/rocketmq
# touch mqbrokerStart-b.sh
# touch mqbrokerStart-a-s.sh
# chmod +x mqbrokerStart-b.sh
# chmod +x mqbrokerStart-a-s.sh

master启动文件mqbrokerStart-b.sh内容如下:

#!/bin/sh

cd /data/rocketmq/rocketmq-4.7.1/bin

nohup sh mqbroker -c /data/rocketmq/rocketmq-4.7.1/conf/2m-2s-async/broker-b.properties > /data/rocketmq/logs/broker-b.log 2>&1 &

exit

slave启动文件mqbrokerStart-a-s.sh内容如下:

#!/bin/sh

cd /data/rocketmq/rocketmq-4.7.1/bin

nohup sh mqbroker -c /data/rocketmq/rocketmq-4.7.1/conf/2m-2s-async/broker-a-s.properties > /data/rocketmq/logs/broker-a-s.log 2>&1 &

exit

五、启动broker

1、机器A上启动master:broker-a

# cd /data/rocketmq
# ./mqbrokerStart-a.sh

2、机器B上启动master:broker-b

# cd /data/rocketmq
# ./mqbrokerStart-b.sh

3、机器A上启动slave:broker-b-s

# cd /data/rocketmq
# ./mqbrokerStart-b-s.sh

4、机器B上启动slave:broker-a-s

# cd /data/rocketmq
# ./mqbrokerStart-a-s.sh

启动成功日志如下

5、查看安装是否ok

查看集群情况

# cd /data/rocketmq/rocketmq-4.7/bin/
# ./mqadmin clusterList -n 127.0.0.1:9876

六、安装console客户端

1、下载代码

从git上下载项目git clone https://github.com/apache/rocketmq-externals

使用IDEA打开项目rocketmq-console

2、修改配置文件application.properties

#数据路径,自己配置
rocketmq.config.dataPath=/data/rocketmq/console/data
# 开启登录校验
rocketmq.config.loginRequired=true 

3、修改账号配置文件users.properties,参数后面的1代表管理员,0是用户

 

# 定义管理员账号,key=账号,value=密码
admin=123456,1

# 定义普通账号
cjs123=123456,0

4、打成jar包:rocketmq-console-ng-2.0.0.jar

5、机器A上传jar包到/data/rocketmq/console文件夹中

# cd /data/rocketmq
# mkdir console
# cd console
# mkdir data

6、机器A上创建启动文件

# cd /data/rocketmq
# touch mqConsoleStart.sh

mqConsoleStart.sh内容如下:

#!/bin/sh

JAVA_OPTS="-Xms256m -Xmx512m -Xmn125m -Xss256k -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m -XX:+UseConcMarkSweepGC  -XX:+CMSParallelRemarkEnabled -XX:ParallelCMSThreads=2 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection -server"

nohup java $JAVA_OPTS -jar /data/rocketmq/rocketmq-console-ng-2.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=192.168.0.1:9876;192.168.0.2:9876 >/data/rocketmq/logs/mqconsole.log 2>&1 &

exit

7、启动console

# ./mqConsoleStart.sh

8、浏览器上访问console

访问网页:http://192.168.0.1:8080

账号密码: admin/123456

9、创建主题

因为集群设置了生产者和消费者使用的普通账号不能自动创建主题topic,所以需要用console进行手动创建主题topic。

console因为是部署在白名单ip段,所以是可以进行主题的增删改操作。

点击主题菜单,新增按钮:

10、创建消费组

同样,需要创建对应的消费组,才能消费消息

 

好啦,整个部署就到此结束。感谢大家的阅读。

 

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值