生产环境部署RocketMQ集群模式

Posted abner123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产环境部署RocketMQ集群模式相关的知识,希望对你有一定的参考价值。

一、环境准备

1.主机信息

主机名 主机IP地址 备注
broker-k8s-1 192.168.144.131 master &namesrv
broker-k8s-2 192.168.144.132 master &namesrv
broker-k8s-3 192.168.144.133 master &namesrv

二、生产环境配置要求(因为mq对内存消耗比较大,所以生产环境建议内存给大些)

硬件:  12G+内存(broker默认分配8G,namesrv默认分配4G,可自行调整)

 

软件:

 

  1. 64bit OS, Linux/Unix/Mac is recommended;
  2. 64bit JDK 1.8+;
  3. Maven 3.2.x(非必要)
  4. Git(非必须)

正式搭建:目录只是为了规范配置文件的存放路径,名称对实际配置无用

目录介绍

  • 2m-noslave: 多Master模式
  • 2m-2s-sync: 多Master多Slave模式,同步双写
  • 2m-2s-async:多Master多Slave模式,异步复制

下载对应安装包请在下面官网中下载你需要的版本安装包

http://rocketmq.apache.org/docs/quick-start/

本文是以 rocketmq-all-4.5.2版本进行集群部署:

[root@k8s-1 rocketmq-all-4.5.2-bin-release]# pwd
/usr/local/src/rocketmq-all-4.5.2-bin-release
[root@k8s-1 rocketmq-all-4.5.2-bin-release]# ls conf/2m-noslave/ -lh
total 12K
-rw-r--r-- 1 root root 1.5K Oct 8 18:22 broker-a.properties
-rw-r--r-- 1 root root 1.5K Oct 8 18:00 broker-b.properties
-rw-r--r-- 1 root root 937 Jul 31 21:09 broker-trace.properties
[root@k8s-1 rocketmq-all-4.5.2-bin-release]#

broker-k8s-1:配置文件:

 

重点注意以下参数:

 

brokerClusterName : 集群的名称,同一个集群名称要一样的

 

brokerName : broker的名称,同集群中,此名称要不同

 

namesrvAddr : 集群所有节点的合集

 

brokerIP1 : 监听在此IP的,通常默认是本机IP地址,但是不排除有桥接等导致监听IP地址不正常的问题。
ot@k8s-1 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties
# 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
 
# 所属集群名字
brokerClusterName=rocketmq-cluster
 
# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-k8s-1
 
# 0 表示 Master,>0 表示 Slave
brokerId=0
 
# 删除文件时间点,默认凌晨4点。24小时制,单位小时
deleteWhen=04
 
# 文件保留时间,默认 72 小时。根据业务情况调整
fileReservedTime=168
 
# Broker 对外服务的监听端口
listenPort=10911
 
# nameServer地址,分号分割
namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876
 
# Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
# 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。
brokerIP1=192.168.144.131
 
# commitLog 存储路径
storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog
 
#发送消息的最大线程数
sendMessageThreadPoolNums: 64
#large thread numbers
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage: true
 
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue
 
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
 
# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER
 
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

broker-k8s-2:配置文件

重点注意以下参数:

brokerClusterName : 集群的名称,同一个集群名称要一样的
brokerName : broker的名称,同集群中,此名称要不同
namesrvAddr : 集群所有节点的合集
brokerIP1 : 监听在此IP的,通常默认是本机IP地址,但是不排除有桥接等导致监听IP地址不正常的问题。

[root@k8s-2 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties
# 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
 
# 所属集群名字
brokerClusterName=rocketmq-cluster
 
# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-k8s-2
 
# 0 表示 Master,>0 表示 Slave
brokerId=0
 
# 删除文件时间点,默认凌晨4点。24小时制,单位小时
deleteWhen=04
 
# 文件保留时间,默认 72 小时。根据业务情况调整
fileReservedTime=168
 
# Broker 对外服务的监听端口
listenPort=10911
 
# nameServer地址,分号分割
namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876
 
# Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
# 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。
brokerIP1=192.168.144.132
 
# commitLog 存储路径
storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog
 
#发送消息的最大线程数
sendMessageThreadPoolNums: 64
#large thread numbers
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage: true
 
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue
 
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
 
# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER
 
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

broker-k8s-3:配置文件

重点注意以下参数:

brokerClusterName : 集群的名称,同一个集群名称要一样的
brokerName : broker的名称,同集群中,此名称要不同
namesrvAddr : 集群所有节点的合集
brokerIP1 : 监听在此IP的,通常默认是本机IP地址,但是不排除有桥接等导致监听IP地址不正常的问题。

[root@k8s-3 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties
# 配置参考官方链接:http://rocketmq.apache.org/docs/rmq-deployment/
 
# 所属集群名字
brokerClusterName=rocketmq-cluster
 
# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-k8s-3
 
# 0 表示 Master,>0 表示 Slave
brokerId=0
 
# 删除文件时间点,默认凌晨4点。24小时制,单位小时
deleteWhen=04
 
# 文件保留时间,默认 72 小时。根据业务情况调整
fileReservedTime=168
 
# Broker 对外服务的监听端口
listenPort=10911
 
# nameServer地址,分号分割
namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876
 
# Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface
# 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置。
brokerIP1=192.168.144.133
 
# commitLog 存储路径
storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog
 
#发送消息的最大线程数
sendMessageThreadPoolNums: 64
#large thread numbers
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage: true
 
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue
 
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
 
# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER
 
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
启动集群:
在  broker-k8s-1  broker-k8s-2  broker-k8s-3 启动 broker 服务
 cd  /usr/local/src/rocketmq-all-4.5.2-bin-release/
 nohup sh bin/mqnamesrv &
在  broker-k8s-1  broker-k8s-2  broker-k8s-3 启动 broker 服务
# 机器下执行broker-a.properties文件启动
nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties -n "192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876" &

验证集群情况:

技术图片

技术图片

mq启动脚本:

#!/bin/sh
 
source /etc/profile
 
CODE_DIR="/opt/app/rocketmq-all-4.5.2-bin-release"
 
start() {
  cd ${CODE_DIR}
  nohup sh bin/mqnamesrv &> mqnamesrv.log &
  nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties -n "172.18.178.191:9876;172.18.178.192:9876;172.18.178.193:9876" &> nohup.out &
}
 
stop() {
    cd ${CODE_DIR}
    sh bin/mqshutdown broker
    sh bin/mqshutdown namesrv
}
 
status() {
  pid1=`ps ax | grep -i ‘org.apache.rocketmq.namesrv.NamesrvStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
  if [ -z "$pid1" ] ; then
      echo "No mqnamesrv running."
  else
      echo "The mqnamesrv(${pid1}) is running..."
  fi
  pid2=`ps ax | grep -i ‘org.apache.rocketmq.broker.BrokerStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
  if [ -z "$pid2" ] ; then
      echo "No mqbroker running."
      return 1;
  else
      echo "The mqbroker(${pid2}) is running..."
      return 0
  fi
   
}
case "$1" in
  ‘start‘)
    start
    ;;
 
  ‘stop‘)
    stop
    ;;
   
  ‘restart‘)
    stop
    start
    ;;
  ‘status‘)
    status
    ;;
  *)
    echo "Usage: $0 { start | stop | status |  restart }"
    exit 1
    ;;
esac
 
exit 0

mq-web启动脚本:

#!/bin/bash
 
source /etc/profile
 
CODE_DIR="/opt/app/rocketmq-console-ng"
Process_name="rocketmq-console-ng-1.0.1.jar"
 
 
status() {
PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk {print $2})
 
if [ ! -n "$PID" ]; then
  echo "NO RUNNING"
else
  echo "RUNNING"
  echo "PID IS : $PID"
fi
}
start() {
PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk {print $2})
if [ ! -n "$PID" ]; then
  cd ${CODE_DIR}
   nohup java -Xms128m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=128m -jar /opt/app/rocketmq-console-ng/rocketmq-console-ng-1.0.1.jar &> nohup.out &
else
  echo "Ready RUNNING"
  echo "PID IS : $PID"
fi
}
stop() {
PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk {print $2})
if [ ! -n "$PID" ]; then
  echo "NOT RUNNING"
else
  echo "PID IS : $PID"
  kill -9 $PID
fi
}
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    sleep 8
    start
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $0 { start | stop | restart | status  }"
    exit 1
    ;;
esac
 
exit 0

 

以上是关于生产环境部署RocketMQ集群模式的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ集群部署配置

rocketmq3.5.8 集群安装

RocketMQ集群部署

docker-compose部署rocketmq集群

rocketmq3.5.8 原理和集群安装

Linux环境快速搭建RocketMQ双Master模式