zoukankan      html  css  js  c++  java
  • RocketMQ高可用集群

    集群支持:

      RocketMQ天生对集群的支持非常友好

    单Master:

      优点:除了配置简单没什么优点

      缺点:不可靠,该机器重启或宕机,将导致整个服务不可用

    多Master:

      优点:配置简单,性能最高

      缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性

    多Master多Slave异步模式:

      每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级

      优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预

      缺点:Master宕机或磁盘损坏时会有少量消息丢失

    多Master多Slave同步模式:

      每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功

      优点:服务可用性与数据可用性非常高

      缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主。

      需要注意的是,在RocketMQ里面,1台机器只能要么是Master,要么是Slave。这个在初始的机器配置里面,就定死了。不会像kafka那样存在master动态选举的功能。其中Master的broker id = 0,Slave的broker id > 0。有点类似于mysql的主从概念,master挂了以后,slave仍然可以提供读服务,但是由于有多主的存在,当一个master挂了以后,可以写到其他的master上。

    集群搭建:2M-2S-SYNC(两主两从同步写)

      环境准备:rocket-4.4.0 ,JDK1.8 ,同时定好4个节点的端口,我这里主节点为默认10911,从节点设置成 10950,另外nameserver都是默认9876端口,这些都好了之后一定记得将这些端口全部开放。我这里两台节点分别是192.168.1.101,192.168.1.102.

      记得修改两台机器上的 runbroker.sh 与 runserver.sh 的虚拟机参数。

      设置好节点的数据存储路径:

    mkdir /mysoft/rocketmq/data 
    mkdir /mysoft/rocketmq/data/store 存储路径
    mkdir /mysoft/rocketmq/data/store/commitlog //commitLog 存储路径
    mkdir /mysoft/rocketmq/data/store/consumequeue //消费队列存储路径存储路径
    mkdir /mysoft/rocketmq/data/store/index //消息索引存储路径

      这里需要配置4个配置文件,我们就在原来配置上进行一些简单的增加及修改,分别是:

    • 192.168.1.101上的 ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a.properties,${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b-s.properties
    • 192.168.1.102上的 ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b.properties,${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a-s.properties.

      修改日志文件(两台机器):

    mkdir -p /mysoft/rocketmq/logs
    cd /mysoft/rocketmq/conf && sed -i 's#${user.home}#/mysoft/rocketmq#g' *.xml

    192.168.1.101:${ROCKETMQ-HOME}/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=192.168.1.101:9876;192.168.1.102:9876
    #store存储路径,master与slave目录要不同
    storePathRootDir=/mysoft/rocketmq/data/store
    #commitLog存储路径
    storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
    brokerIP1=192.168.1.101
    #很重要 slave通信用
    brokerIP2=192.168.1.101

      ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b-s.properties:

    brokerClusterName=DefaultCluster
    brokerName=broker-b
    brokerId=1
    brokerIP1=192.168.1.101
    deleteWhen=04
    listenPort=10950
    fileReservedTime=48
    brokerRole=SLAVE
    flushDiskType=ASYNC_FLUSH
    namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
    storePathRootDir=/mysoft/rocketmq/data/store/slave
    storePathCommitLog=/mysoft/rocketmq/data/store/slave/commitlog

    192.168.1.102上的 ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b.properties:

    brokerClusterName=DefaultCluster
    brokerName=broker-b
    brokerId=0
    brokerIP1=192.168.1.102
    deleteWhen=04
    fileReservedTime=48
    namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
    storePathRootDir=/mysoft/rocketmq/data/store
    storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
    brokerRole=SYNC_MASTER
    flushDiskType=ASYNC_FLUSH
    brokerIP2=192.168.1.102

      ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a-s.properties:

    brokerClusterName=DefaultCluster
    brokerName=broker-a
    listenPort=10950
    brokerId=1
    deleteWhen=04
    fileReservedTime=48
    brokerIP1=192.168.1.102
    brokerRole=SLAVE
    namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
    storePathRootDir=/mysoft/rocketmq/data/store/slave
    storePathCommitLog=/mysoft/rocketmq/data/store/slave/commitlog
    flushDiskType=ASYNC_FLUSH

      具体的配置可以参考一下这个文件去根据自身业务需求进行设置:

    //所属集群名称,如果多个master,那么每个master配置的名称应该一致,要不然识别不了
    brokerClusterName=rocketmq-cluster
    //broker名称
    brokerName=broker-a
    //0 表示master,>0 表示slave
    brokerId=0
    //nameServer地址,分号隔开
    namesrvAddr=192.168.5.100:9876;192.168.5.101:9876
    //在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    //是否允许broker自动创建topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    //是否允许broker自动创建订阅组,建议线下开始,线上关闭
    autoCreateSubscriptionGroup=true
    //broker对外服务的监听端口,
    //同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些
    listenPort=10911
    //删除文件的时间节点,默认凌晨4点
    deleteWhen=04
    //文件保留时间,默认48小时
    fileReservedTime=48
    //commitLog每个文件的大小,默认大小1g
    mapedFileSizeCommitLog=1073741824
    //consumeQueue每个文件默认存30w条,根据自身业务进行调整
    mapedFileSizeConsumeQueue=300000
    destroyMapedFileInterval=120000
    redeleteHangedFileInterval=120000
    //检查物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    //store存储路径,master与slave目录要不同
    storePathRootDir=/mysoft/rocketmq/data/store
    //commitLog存储路径
    storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
    //限制的消息大小
    maxMessageSize=65536
    flushCommitLogLeastPages=4
    flushConsumeQueueLeastPages=2
    flushCommitLogThoroughInterval=10000
    flushConsumeQueueThoroughInterval=60000
    checkTransactionMessageEnable=false
    //发消息线程池数
    sendMessageThreadPoolNums=128
    //拉去消息线程池数
    pullMessageThreadPoolNums=128
    //broker角色:
    //ASYSC_MASTER 异步复制master
    //SYSC_MASTER 同步复制master
    //SLAVE 从
    brokerRole=SYSC_MASTER
    ///刷盘方式
    //ASYNC_FLUSH 异步刷盘
    //SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH

      先启动两台的 namesrv 。记得查看日志信息,确保两台都启动了 。然后启动broker。

    //192.168.1.101
    nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a.properties &
    nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &
    //192.168.1.102
    nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b.properties &
    nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties &

      启动后一定去看一下日志,出现以下信息应该就是启动成功了:

      也可以通过命令查看:sh mqadmin clusterlist -n 192.168.1.101:9876

      至此集群启动完成,客户端再链接的时候通过设置 namesrv 如下去链接,其他一致:

    consumer.setNamesrvAddr("192.168.1.101:9876;192.168.1.102:9876");
  • 相关阅读:
    Spark 之 内存模型
    Python 之 windows上安装和pycharm 使用
    Kafka之 kafka消费->SparkStreaming|写入->Kafka|kafka消费->hbase
    SparkStreaming之 任务失败后,自动重启
    微信小程序常用赋值方法小结
    eclipse中xml文件Ctrl+左键不跳转解决办法
    SpringCloud简介以及相关组件
    spring怎么设置定时任务
    Http协议请求的不同类型
    Spring各个jar包作用
  • 原文地址:https://www.cnblogs.com/wuzhenzhao/p/11505616.html
Copyright © 2011-2022 走看看