集群支持:

  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=
deleteWhen=
fileReservedTime=
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.101:;192.168.1.102:
#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=
brokerIP1=192.168.1.101
deleteWhen=
listenPort=
fileReservedTime=
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.101:;192.168.1.102:
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=
brokerIP1=192.168.1.102
deleteWhen=
fileReservedTime=
namesrvAddr=192.168.1.101:;192.168.1.102:
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=
brokerId=
deleteWhen=
fileReservedTime=
brokerIP1=192.168.1.102
brokerRole=SLAVE
namesrvAddr=192.168.1.101:;192.168.1.102:
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=
//nameServer地址,分号隔开
namesrvAddr=192.168.5.100:;192.168.5.101:
//在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=
//是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
//是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=true
//broker对外服务的监听端口,
//同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些
listenPort=
//删除文件的时间节点,默认凌晨4点
deleteWhen=
//文件保留时间,默认48小时
fileReservedTime=
//commitLog每个文件的大小,默认大小1g
mapedFileSizeCommitLog=
//consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=
destroyMapedFileInterval=
redeleteHangedFileInterval=
//检查物理文件磁盘空间
diskMaxUsedSpaceRatio=
//store存储路径,master与slave目录要不同
storePathRootDir=/mysoft/rocketmq/data/store
//commitLog存储路径
storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
//限制的消息大小
maxMessageSize=
flushCommitLogLeastPages=
flushConsumeQueueLeastPages=
flushCommitLogThoroughInterval=
flushConsumeQueueThoroughInterval=
checkTransactionMessageEnable=false
//发消息线程池数
sendMessageThreadPoolNums=
//拉去消息线程池数
pullMessageThreadPoolNums=
//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");

RocketMQ高可用集群的更多相关文章

  1. rocketmq高可用集群部署(RocketMQ-on-DLedger Group)

    rocketmq高可用集群部署(RocketMQ-on-DLedger Group) rocketmq部署架构 rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂. 单ma ...

  2. RocketMQ的高可用集群部署

    RocketMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RocketMQ 集群物理部署结构 Rocket 物理部署结构 Name Server: 单点,供Producer和Cons ...

  3. Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)

    之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...

  4. RabbitMQ和Kafka的高可用集群原理

    前言 小伙伴们,通过前边文章的阅读,相信大家已经对RocketMQ的基本原理有了一个比较深入的了解,那么大家对当前比较常用的RabbitMQ和Kafka是不是也有兴趣了解一些呢,了解的多一些也不是坏事 ...

  5. RabbitMQ学习系列(六): RabbitMQ 高可用集群

    前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...

  6. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  7. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  8. Linux企业集群用商用硬件和免费软件构建高可用集群PDF

    Linux企业集群:用商用硬件和免费软件构建高可用集群 目录: 译者序致谢前言绪论第一部分 集群资源 第1章 启动服务 第2章 处理数据包 第3章 编译内容 第二部分 高可用性 第4章 使用rsync ...

  9. rabbitmq+ keepalived+haproxy高可用集群详细命令

    公司要用rabbitmq研究了两周,特把 rabbitmq 高可用的研究成果备下 后续会更新封装的类库 安装erlang wget http://www.gelou.me/yum/erlang-18. ...

随机推荐

  1. rsync服务端排错思路

    rsync服务端排错思路       rsync服务端排错思路 查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf 查看配置文件里host allow,host ...

  2. thinkphp类型转换

    类型转换 说白了就是在model类中声明的字段输出类型:其语法如下: 注意strtotime()函数可以将诸如‘2018-12-21’这样的日期字符串转为整数存入数据库 自动完成---等于提前对某一表 ...

  3. Struts 2 实现Action的几种方式_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Action用于处理用户的请求,因此也被称为业务控制器.每个Action类就是一个工作单元,Struts 2框架负责将用 ...

  4. JVM基础——面试、笔试

    1.java内存与内存溢出 1.1 JVM分为哪些区,每一个区干嘛的?(见java虚拟机38页) (1)程序计数器(线程私有) 当前线程执行字节码的信号指示器.(每个线程都会在程序计数器中存储其指令, ...

  5. docker容器共享宿主机环境,从而为镜像体积减负

    一.背景介绍 响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理.可是随着服务越来越多,镜像也越来越多.每次制作镜像的时候都需要将依赖打进容器,这样一个jre的 ...

  6. 工作笔记--js-点赞按钮和踩踩按钮互斥??怎么写?

    效果图: html: css: .an{ margin-top:0px; position: relative; .popzframe,.popcframe{ display: none; word- ...

  7. linux登陆客户端自动执行命令

    登陆客户端的时候,检查一下磁盘空间,内存,或是谁在线,每次都要手动去敲命令. 小技巧: cd ~ vi .bashrc 添加: echo "####Check Disk Use####&qu ...

  8. 参数上使用自定义注解在aop中无法获取到该参数

    https://ask.csdn.net/questions/769477 /** * 环绕增强,验证权限 * @param joinPoint 目标对象 * @param authCheck 自定义 ...

  9. sh_02_判断年龄改进版

    sh_02_判断年龄改进版 # 输入用户年龄 age = int(input("请输入年龄:")) # 判断是否满 18 岁 (>=) if age >= 18: # ...

  10. 苹果cms如何添加播放器预加载和缓冲广告

    1,来到系统后台>>系统>>播放器参数设置  可以看到添加预加载和缓冲广告的输入框.文件格式为html 自己写一个html的网页上传到网站进行调用即可.链接前面不要加http或 ...