RocketMQ集群搭建记录(三主三从)

一、方案目标:

- 三主三从
- 异步同步消息
- 异步刷盘

 二、机器信息:

共三台机器,每台上分别布有一台主从。

如下:

机器1     broker-a   broker-b-s
机器2     broker-b   broker-c-s
机器3     broker-c   broker-a-s

三、搭建步骤:

1 上传解压,新建目录

  上传压缩包至 /tmp,解压到/usr/local

unzip 压缩包名(rocketXXXX) -d /usr/local

 重命名文件夹:

cd /usr/local
mv rocketXXXX rocketmq

 创建目录:

#/data目录的空间至少为1T+
#机器1
mkdir -pv {/rocketmqdata/store-a,/rocketmqdata/store-b-s,/rocketmqdata/store-a/commitlog,/rocketmqdata/store-b-s/commitlog}
#机器2
mkdir -pv {/rocketmqdata/store-b,/rocketmqdata/store-c-s,/rocketmqdata/store-b/commitlog,/rocketmqdata/store-c-s/commitlog}
#机器3
mkdir -pv {/rocketmqdata/store-c,/rocketmqdata/store-a-s,/rocketmqdata/store-c/commitlog,/rocketmqdata/store-a-s/commitlog}

设置环境变量:

vim etc/profile​
export ROCKETMQ_HOME=/usr/local/rocketmq
export PATH=$PATH:$ROCKETMQ_HOME/bin


​//使配置生效source /etc/profile

2 修改配置文件

安装包解压后2m-2s-async目录下默认只有broker-a,broker-b相关的四个配置文件,没有broker-c的配置文件。只需要将broker-a或者broker-b任意一份文件复制重命名即可。

节点一:修改broker-a.properties、broker-b-s.properties 节点二:修改broker-b.properties、broker-c-s.properties 节点三:修改broker-c.properties、broker-a-s.properties

主broker:

namesrvAddr=xxxx:9876
brokerClusterName=testCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
storePathRootDir=/rocketmqdata/store-a
storePathCommitLog=/rocketmqdata/store-a/commitlog
brokerIP1=xxxx
#主从同步地址
brokerIP2=xxxx
#是否开启ACL验证
aclEnable = true

从broker::

namesrvAddr=xxxx:9876
brokerClusterName=testCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10921
storePathRootDir=/rocketmqdata/store-b-s
storePathCommitLog=/rocketmqdata/store-b-s/commitlog
brokerIP1=xxxx
#主从同步地址
brokerIP2=xxxx
#是否开启ACL验证
aclEnable = true

注意主从的不同之处:

  • brokername              Master与slave使用相同的broker名称来表明相互关系
  • rokerId                         0表示Master,大于0表示不同slave的ID,一个master broker可以有多个slave
  • brokerRole                    有三种 SYNC_MASTER ASYNC_MASTER SLAVE,SYNC表示Slave与Master消息同步完成后,再返回发送成功的状态
  • listenPort                     broker监听的端口号,同一台机器多个broker则要设置不同端口号
  • storePathRootDir        存储消息以及一些配置信息的根目录
  • storePathCommitLog    存储commitlog

3 启动nameserver

在三台机器上启动nameserver:

nohup sh /usr/local/rocketmq/bin/mqnamesrv 2>&1 &

得到无单点的nameserver服务。端口号为 IP:9876

4 启动broker

命令如

nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties 2>&1 &

nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties 2>&1 &

5 验证

## 设置名称服务地址
export NAMESRV_ADDR='xxxx:9876'
## 投递消息
sh /usr/local/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
## 任意一台机器消费消息
sh /usr/local/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...

6 (可选)关闭

sh /usr/local/rocketmq/bin/mqshutdown broker
sh /usr/local/rocketmq/bin/mqshutdown namesrv

四 配置rocketmq-console

参考链接:https://zhuanlan.zhihu.com/p/61141452

1 下载源码  Release rocketmq-console 1.0.0 version*的ZIP包,解压,并cd到源码的根路径

2 执行命令前本地需要安装 Maven 并设置环境变量 `M2_HOME` 指向 Maven 安装根目录,并将 `%M2_HOME%\bin` 添加到环境变量 Path 中。本地执行MVN打包


mvn clean package -D maven.test.skip=true
 

得到为rocketmq-console-ng-1.0.0.jar包。

3 上传至rocketmq/admin

 执行

 nohup java -jar /usr/local/rocketmq/admin/rocketmq-console-ng-1.0.0.jar --server.port=12581 --rocketmq.config.namesrvAddr=xxx:9876  &

--server.port为运行的这个web应用的端口,如果不设置的话默认为8080;--rocketmq.config.namesrvAddr为RocketMQ命名服务地址,如果不设置的话默认为“”。

4 访问界面

curl命令:curl 地址:端口

 

五 配置鉴权机制

关闭broker与nameserver,修改plain_acl.yml,再次启动。

 

常见问题:

1 connect to null failed

## 设置名称服务地址
export NAMESRV_ADDR=' xxx:9876'

2 缺少JDK环境

yum -y list java*
 
yum install -y java-1.8.0-openjdk.x86_64
 
java -version

3  ACL配置文件

用户名不能太短

4 service not available now, maybe disk full, CL: 0.93 CQ: 0.93 INDEX: 0.93, m

磁盘需要扩容

5  Brockerbusy

[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 206ms, size of queue: 5

疑似硬盘瓶颈,待解决

你可能感兴趣的:(后端开发)