RocketMQ 集群部署

 

RocketMQ 集群部署

系统部署架构,使用的模式是 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

内核参数优化

系统I/O和虚拟内存设置

echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf

echo 'vm.min_free_kbytes=5000000' >> /etc/sysctl.conf

echo 'vm.drop_caches=1' >> /etc/sysctl.conf

echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf

echo 'vm.max_map_count=655360' >> /etc/sysctl.conf

echo 'vm.dirty_background_ratio=50' >> /etc/sysctl.conf

echo 'vm.dirty_ratio=50' >> /etc/sysctl.conf

echo 'vm.page-cluster=3' >> /etc/sysctl.conf

echo 'vm.dirty_writeback_centisecs=360000' >> /etc/sysctl.conf

echo 'vm.swappiness=10' >> /etc/sysctl.conf

 

系统文件句柄设置

echo 'ulimit -n 1000000' >> /etc/profile

echo 'admin hard nofile 1000000' >> /etc/security/limits.conf

 

系统I/O调度算法

deadline

安装 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 https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
# unzip rocketmq-all-4.7.1-bin-release.zip -d /usr/local/
# cd /usr/local/rocketmq-all-4.7.1-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 台主机上操作,修改bin/runserver.sh文件, 更改默认日志路径和JVM大小

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 


启动集群
启动 Name Server,在 3 台 Name Server 上操作

在每台机器上创建目录 mkdir /data/logs/rocketmqlogs/

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值