RocketMQ : 4.1.0-incubating集群部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xhpscdx/article/details/77823045

1 部署结构介绍

1. 部署拓扑图

  1. Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
  2. Broker部署相对复杂,Broker 分为Master与Slave,一个Master 可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId来定 义,BrokerId为0 表示Master,非0 表示Slave。Master也可以部署多个。每个 Broker与 Name Server集群中的所有节点建立长连接,定时注册 Topic信息到所有 Name Server。
  3. Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic 路由信息,并向提供Topic服务的Master 建立长连接,且定时向Master发送心跳。Producer完全无 状态,可集群部署。
  4. Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server 取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker 配置决定。

2. 集群重要概念

  1. Disk Flush(磁盘刷新/同步操作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:

    SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
    ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。

  2. Broker Replication(Broker间数据同步/复制):集群环境下需要部署多个Broker,Broker分为两种角色:一种是master,即可以写也可以读,其brokerId=0,只能有一个;另外一种是slave,只允许读,其brokerId为非0。一个master与多个slave通过指定相同的brokerName被归为一个broker set(broker集)。通常生产环境中,我们至少需要2个broker set。Broker Replication只的就是slave获取或者是复制master的数据。

    Sync Broker:生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。
    Async Broker:生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再“异步复制”到slave。

3. 三种Broker集群方式优缺点

  1. 多Master模式(2m-noslave)
    一个集群无Slave,全是Master,例如2个Master或者3个Master
    优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
    缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。
  2. 多Master多Slave模式,异步复制(2m-2s-async)
    每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。
    优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明。不需要人工干预。性能同多Master模式几乎一样。
    缺点:Master宕机,磁盘损坏情况,会丢失少量消息。
  3. 多Master多Slave模式,同步双写(2m-noslave)
    每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。
    优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
    缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

2 环境信息

1. 版本信息

JDK: 1.8
RocketMQ : 4.1.0-incubating

1.由于官网的4.1.0-incubating下载的是源码,需要maven,git等环境进行编译打包。
2.请下载我在linux编译打包后的文件。

apache-rocketmq-4.1.0.tar.gz
apache-rocketmq-4.1.0.zip

3.在搭建环境前,请仔细了解rocket的集群结构,及每个broker的产生的文件存储结构。

1. linux os环境

  1. RocketMQ官方建议Linux下文件系统改为Ext4,对于文件删除操作相比Ext3有非常明显的提升
  2. Ext4 文件系统删除1G 大小的文件通常耗时小亍50ms,而Ext3 文件系统耗时约1s 左史,丏删除文件时,磁盘
    IO 压力极大,会导致IO 写入超时。

2. rocket节点信息

名称 broker角色 IP&port
nameSer-1 注册服务中心 172.16.30.13:9876
nameSer-2 注册服务中心 172.16.30.54:9876
broker-b-0 master 172.16.30.13:10921
broker-b-1 slave 172.16.30.54:10927
broker-a-0 master 172.16.30.13:10911
broker-a-1 slave 172.16.30.54:10917

1. 注意每个broker将监听三个端口,例如broker-b-0,本身监听10921,一个fastRemotingService占用你设置的listenPort -2的端口号, 一个HaService占用你listenPort + 1的端口号。

tcp        0      0 *:10919                     *:*                         LISTEN      22813/java          
tcp        0      0 *:10921                     *:*                         LISTEN      22813/java          
tcp        0      0 *:10922                     *:*                         LISTEN      22813/java  

3. 修改rocket默认内存,及参数配置

  1. 由于RocketMQ默认配置要求很高,比如内存至少就要4个G,开发调试环境根本吃不消,所以我们开始启动前需要先修改这些参数。否则的话,我们很有会遇到内存分配或者不够的问题,如果是压力测试,生产环境请自己合理设置。
    修改注册中心nameServ target/apache-rocketmq-all/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=320m"  
  1. 修改每个消息处理中心broker target/apache-rocketmq-all/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m  

3.修改这个是命令行使用到: target/apache-rocketmq-all/bin/tools.sh


JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m"  

4.我们一般都采用2个master,2个slave异步复制的集群结构,修改/conf/-2m-2s-async/目录下的配置文件。broker-a-0 master配置,根据需要调整下面的配置

# 统一的集群名字,所有broker要一样
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
# 每天晚上删除4点删除过期的文件
deleteWhen=04
# 文件保存有效时间48小时
fileReservedTime=48
#这里有SYNC_MASTER:同步的主从,ASYNC_MASTER:异步的主从,SLAVE:表示从
brokerRole=SYNC_MASTER
# 刷盘方式
flushDiskType=ASYNC_FLUSH
#一定要配置ip,port
brokerIP1=172.16.30.13
listenPort=10911

# broker所有的文件目录,重要
storePathRootDir=/alidata/server/rocketmq/store_am
# broker 的message消息文件,重要
storePathCommitLog=/alidata/server/rocketmq/store_am/commitlog

#自动创建topic
autoCreateTopicEnable=true

4. 启动集群服务

  1. 先启动2个nameServer,编辑下面的shell,注意rocketmq的所有服务采用kill 15关闭重启。

#!/bin/bash 
export JAVA_HOME=/usr/java/jdk1.8.0_65
warpath=/alidata/server/rocketmq/rocketmq/distribution/target/apache-rocketmq
tomcatpath=/alidata/server/mind_report_dev

#cd $tomcatpath 

tomcat_pid=`/usr/sbin/lsof -n -P -t -i:9876`

echo "tomcatpid: $tomcat_pid" 
[ -n "$tomcat_pid" ] && kill -15 $tomcat_pid

echo "kill  tomcat sucess"
sleep 5
nohup sh bin/mqnamesrv  > mqnamesrv.out &

tail -f ~/logs/rocketmqlogs/namesrv.log
  1. 依次启动broker master,slave。mqbroker后面需要指定 nameServList,及配置文件

#!/bin/bash 
export JAVA_HOME=/usr/java/jdk1.8.0_65
warpath=/alidata/server/rocketmq/rocketmq/distribution/target/apache-rocketmq
tomcatpath=/alidata/server/mind_report_dev

#cd $tomcatpath 

tomcat_pid=`/usr/sbin/lsof -n -P -t -i:10911`

echo "tomcatpid: $tomcat_pid" 
[ -n "$tomcat_pid" ] && kill -15 $tomcat_pid

echo "kill  tomcat sucess"

sleep 5

nohup  sh bin/mqbroker -n '172.16.30.13:9876;172.16.30.54:9876' -c  $warpath/conf/2m-2s-async/broker-a.properties    >broker-a-m.out &  

tail  -n  1000  broker-a-m.out 

3 rocket shmqadmin 命令的介绍

  1. rocketmq也提供命令操作行,
    创建Topic
    创建(修订)订阅组
    删除订阅组配置
    更新Broker配置文件
    查看Topic列表信息
    查看Topic路由信息
    查看Topic统计信息

更多命令行操作参考

4 rocketmq-console 的搭建

1. 版本信息

JDK: 1.8
RocketMQ : rocketmq-console-ng-1.0.0.jar

1.编辑配置启动shell
rocketmq-console-ng-1.0.0.jar

 #!/bin/bash   
export  JAVA_HOME=/usr/java/jdk1.8.0_65
warpath=/home/work/tradeSnapshottest
tomcatpath=/alidata/server/tradeSnapshottest

export JAVA_OPT=" -server -Xms256m -Xmx512m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=320m"

 tomcat_pid=`/usr/sbin/lsof -n -P -t -i:12581`

 echo "tomcatpid: $tomcat_pid" 
 [ -n "$tomcat_pid" ] && kill -9 $tomcat_pid

 echo "kill  tomcat sucess"

  sleep 5


  nohup  java -jar ./rocketmq-console-ng-1.0.0.jar --server.port=12581 --rocketmq.config.namesrvAddr='172.16.30.54:9876;172.16.30.13:9876'  --rocketmq.config.enableDashBoardCollect=false   2>&1  &
  sleep 5
  tail  -n  1000  nohup.out

2.rocketmq-console是spring-boot工程,修改环境变量设置,rocketmq.config.enableDashBoardCollect=false 关闭自动采集信息,

5 参考资料

rocketMQ 3.2 官方文档
RocketMQ最佳实践(一)4.0版本/概念介绍/安装调试/客户端demo
RocketMQ 集群

猜你喜欢

转载自blog.csdn.net/xhpscdx/article/details/77823045
今日推荐