生产环境部署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,可自行调整)
软件:
- 64bit OS, Linux/Unix/Mac is recommended;
- 64bit JDK 1.8+;
- Maven 3.2.x(非必要)
- 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