系统部署架构,使用的模式是 2m-2s-sync
broker 机器信息
- Master 1:172.18.24.5
- Slave 1:172.18.24.6
- Master 2:172.18.24.7
- Slave 2:172.18.24.8
namesrv 机器信息(这里为了演示,复用了 3 台主机做 Name Server。正式生产环境应该要考虑配置单独的 3 台机器做 Name Server)
- Name Server 1:172.18.24.5
- Name Server 2:172.18.24.6
- Name Server 3:172.18.24.7
安装 jdk 环境(在 4 台主机 Master 1、Slave 1、Master 2、Slave 2 上操作)
// 到 oracle 官网下载好 jdk 安装包
# ls jdk-8u181-linux-x64.tar.gz
jdk-8u181-linux-x64.tar.gz
# tar xvf jdk-8u181-linux-x64.tar.gz -C /usr/local/
# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# source /etc/profile
安装 rocketmq(在 4 台主机上操作)
# cd /usr/local/src/
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip
# unzip rocketmq-all-4.4.0-bin-release.zip -d /usr/local/
# cd /usr/local/rocketmq-all-4.4.0-bin-release/
配置 rocketmq broker-a(在 Master 1 上操作)
# vim conf/2m-2s-sync/broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.18.24.5:9876;172.18.24.6:9876;172.18.24.7:9876
配置 rocketmq broker-a-s(在 Slave 1 上操作)
# vim conf/2m-2s-sync/broker-a-s.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.18.24.5:9876;172.18.24.6:9876;172.18.24.7:9876
配置 rocketmq broker-b(在 Master 2 上操作)
# vim conf/2m-2s-sync/broker-b.properties
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.18.24.5:9876;172.18.24.6:9876;172.18.24.7:9876
配置 rocketmq broker-b-s(在 Slave 2 上操作)
# vim conf/2m-2s-sync/broker-b-s.properties
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.18.24.5:9876;172.18.24.6:9876;172.18.24.7:9876
在 4 台主机上操作,更改默认日志路径和JVM大小
# mkdir -p /data/logs/rocketmqlogs
# sed -i 's#${user.home}/logs/#/data/logs/#g' conf/logback_broker.xml
# sed -i 's#${user.home}/logs/#/data/logs/#g' conf/logback_namesrv.xml
# sed -i 's#${user.home}/logs/#/data/logs/#g' conf/logback_tools.xml
# vim bin/runbroker.sh
// 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
# vim bin/runserver.sh
// 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# vim bin/tools.sh
// 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
启动集群
启动 Name Server,在 3 台 Name Server 上操作
nohup sh bin/mqnamesrv > /data/logs/rocketmqlogs/mqnamesrv.log 2>&1 &
启动 Master 1,在 Master 1 上操作
# sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties > /data/logs/rocketmqlogs/broker-a.log 2>&1 &
启动 Slave 1,在 Slave 1 上操作
# sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties > /data/logs/rocketmqlogs/broker-a-s.log 2>&1 &
启动 Master 2,在 Master 2 上操作
# sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties > /data/logs/rocketmqlogs/broker-b.log 2>&1 &
启动 Slave 2,在 Slave 2 上操作
# sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties > /data/logs/rocketmqlogs/broker-b-s.log 2>&1 &
查看 NameServer(9876) 和 Broker(10909、10911、10912) 启动情况,在 4 台主机上操作
# netstat -nltup|egrep "9876|10909|10911|10912"
tcp 0 0 0.0.0.0:9876 0.0.0.0:* LISTEN 1560/java
tcp 0 0 0.0.0.0:10909 0.0.0.0:* LISTEN 1775/java
tcp 0 0 0.0.0.0:10911 0.0.0.0:* LISTEN 1775/java
tcp 0 0 0.0.0.0:10912 0.0.0.0:* LISTEN 1775/java
测试集群生产消费情况
// 在 4 台主机上操作
# export NAMESRV_ADDR='172.18.24.5:9876;172.18.24.6:9876;172.18.24.7:9876'
// 在其中 3 台机器上操作,启动 3 个消费者
# sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
// 在其中 1 台机器上操作,启动一个生产者,在 3 个消费者机器就可以看到消费信息
# sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer