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

rocketmq部署架构

rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂。

  1. 单master模式

    这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。

  2. 多master

    一个集群无Slave,全是Master,例如2个Master或者3个Master

    • 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
    • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。
  3. 多master异步复制slave

    每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

    • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
    • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。
  4. 多master同步复制slave。

    每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:

    • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
    • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。
  5. RocketMQ-on-DLedger Group(可自动主从容灾)

    之前的几种方式,能解决数据冗余备份,一定高可用问题。但是master故障后,多master多slave架构能提供继续想slave消费数据。但是生产数据呢?这会导致生产服务中断不可用。所以又出现了RocketMQ-on-DLedger Group架构。可自主容灾。引入了DLedger工具。

rocketmq架构:

部署架构

部署架构:RocketMQ-on-DLedger Group

服务器数量3台。

部署操作步骤

  1. 官网下载rocketmq二进制包

    官网下载地址:http://rocketmq.apache.org/dowloading/releases/

  2. 解压并安装

    cd /opt
    wget http://192.168.0.155:9999/rocketmq-all-4.9.1-bin-release.zip
    unzip rocketmq-all-4.9.1-bin-release.zip
    mkdir /data/rocketmq-4.9.1-raftcluster
  3. 3台主机分别配置nameserver

    修改bin目录下的文件:runserver.sh,将jvm调整至1G。(由于我服务器资源内存有限)

  4. 3台主机分别启动nameserver

    cd ./bin   #切换到bin目录
    nohup sh mqnamesrv > ./nameserver.log 2>&1 &

    每台nameserver是不需要互相通信,NameServer之间数据不同步。和hdfs的nameserver不是一样的概念。

    通过命令netstat -tunlp | grep 9876检查端口9876是否存在

  5. 编辑broker的配置文件

    第一台主机node0的配置(192.168.0.218):vim ./conf/dledger/broker-n0.conf

    内容如下:

    brokerClusterName = RaftCluster  #集群名
    brokerName=RaftNode00 #broker组名,建议和dLegerGroup名一致
    listenPort=30911
    namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
    storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node00
    storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node00/commitlog
    enableDLegerCommitLog=true
    dLegerGroup=RaftNode00 #dleger组名
    dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911 #注意配置格式
    ## must be unique
    dLegerSelfId=n0 #每个dleger组下面的实例ip,保证唯一
    sendMessageThreadPoolNums=4 #发送线程数,建议和服务器cpu一致

    第二台主机node1的配置(192.168.0.89):vim ./conf/dledger/broker-n1.conf

    内容如下:

    brokerClusterName = RaftCluster  #集群名
    brokerName=RaftNode00 #broker组名,建议和dLegerGroup名一致
    listenPort=30911
    namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
    storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node01
    storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node01/commitlog
    enableDLegerCommitLog=true
    dLegerGroup=RaftNode00 #dleger组名
    dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911 #注意配置格式
    ## must be unique
    dLegerSelfId=n1 #每个dleger组下面的实例ip,保证唯一
    sendMessageThreadPoolNums=4

    第三台主机node2的配置(192.168.0.77):vim ./conf/dledger/broker-n2.conf

    内容如下:

    brokerClusterName = RaftCluster
    brokerName=RaftNode00
    listenPort=30911
    namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
    storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node02
    storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node02/commitlog
    enableDLegerCommitLog=true
    dLegerGroup=RaftNode00
    dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911 #注意配置格式
    ## must be unique
    dLegerSelfId=n2
    sendMessageThreadPoolNums=4
  6. 修改3台broker的jvm大小,默认是8G

    ./bin目录下,由于我服务器没有8G内存,需修改jvm大小。

    vim runbroker.sh

  1. 每台实例启动broker实例进程

    cd /data/rocketmq-4.9.1-raftcluster/rocketmq-all-4.9.1-bin-release/bin  #安装路径
    
    #在第一台服务器上启动broker
    nohup ./mqbroker -c ../conf/dledger/broker-n0.conf > ./broker.log 2>&1 & #在第二台服务器上启动broker
    nohup ./mqbroker -c ../conf/dledger/broker-n1.conf > ./broker.log 2>&1 & #在第三台服务器上启动broker
    nohup ./mqbroker -c ../conf/dledger/broker-n2.conf > ./broker.log 2>&1 &

    验证:

    查看输出日志或者用netstat -tunlp | grep 30911命令查看端口是否启动

  2. 用命令行查看dleger集群的状态

    sh bin/mqadmin clusterList -n 127.0.0.1:9876

  3. 安装rocketmq-console的web管理页面(rocketmq-dashboard)

    备注:新版本rocketmq-console已经改名叫rocketmq-dashboard

    rocketmq-dashboard下载地址为:https://github.com/apache/rocketmq-dashboard

    unzip rocketmq-dashboard-master.zip
    cd rocketmq-dashboard-master
    mvn clean package -Dmaven.test.skip=true #打包如果失败,可以多尝试几次 #构建成功后,jar包在target目录里面 #启动rocketmq-dashboardd的jar包
    java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr="192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876" --server.port=8080

    访问服务器的192.168.0.218:8080端口,能看到集群信息,如下:

  1. RocketMQ-on-DLedger Group集群部署完成。

其他

  1. rocketmq的默认日志文件在启动用户的家目录下的logs里面。

    如需变更需要修改以下3个文件

  1. 本教程部署的RocketMQ-on-DLedger Group。只有一个分片,如果服务器数量充足,可以部署多分片。部署方式参考前面的操作步骤。只是部署更多的服务器,修改配置而已。

rocketmq高可用集群部署(RocketMQ-on-DLedger Group)的更多相关文章

  1. RocketMQ的高可用集群部署

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

  2. hbase高可用集群部署(cdh)

    一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...

  3. (十)RabbitMQ消息队列-高可用集群部署实战

    原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...

  4. RocketMQ(2)---Docker集群部署RocketMQ

    RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...

  5. RabbitMQ的高可用集群部署

    RabbitMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RabbitMQ部署的三种模式 1.1 单一模式 单机情况下不做集群, 仅仅运行一个RabbitMQ. # docker-c ...

  6. MySQL MHA 高可用集群部署及故障切换

    MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...

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

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

  8. Hadoop部署方式-高可用集群部署(High Availability)

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...

  9. Kubernetes容器集群 - harbor仓库高可用集群部署说明

    之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...

随机推荐

  1. MySQL 实例空间使用率过高的原因和解决方法

    用户在使用 MySQL 实例时,会遇到空间使用告警甚至超过实例限额被锁定的情况.在 RDS 控制台的实例基本信息中,即会出现如下信息: 本文将介绍造成空间使用率过高的常见原因及其相应的解决方法.对于M ...

  2. NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板

    这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...

  3. MFC中L, _T(),TEXT,_TEXT区别以及含义

    字符串前面加L表示该字符串是Unicode字符串. _T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变.因此,Visual C++里边 ...

  4. Pulsar の 保证消息的顺序性、幂等性和可靠性

    原文链接:Pulsar の 保证消息的顺序性.幂等性和可靠性 一.背景 前面两篇文章,已经介绍了关于Pulsar消费者的详细使用和自研的Pulsar组件. 接下来,将简单分析如何保证消息的顺序性.幂等 ...

  5. Mysql常用sql语句(4)- distinct 去重数据

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 我们使用select进行数据查询时是会返回所有匹 ...

  6. VMware Vsphere 虚拟化

    总体架构 主要组件: 1)ESXi 底层虚拟化层,用于将物理服务器虚拟成资源池,提供管理接口,方便其他的管理组件进行管理,其实体形态是iso文件,刻成启动光盘可直接安装在服务器裸机上: 安装在实体服务 ...

  7. Spring Boot中使用@Async实现异步调用,加速任务的执行!

    什么是"异步调用"?"异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行 ...

  8. 隐私安全设置:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.

    背景 访问一个内部网站时,遇到下面的问题,导致网站不能打开:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.从错误信息来看,这是由于网站的证书问题导致 ...

  9. Redis核心原理与实践--列表实现原理之quicklist结构

    在上一篇文章<Redis列表实现原理之ziplist结构>,我们分析了ziplist结构如何使用一块完整的内存存储列表数据. 同时也提出了一个问题:如果链表很长,ziplist中每次插入或 ...

  10. C++快速读入

    使用C++的标准cin进行读入速度比较慢,尤其是在大数据的情况下,所以我们需要使用一种方法,按照字符读入,最后再"组装"成整数.由于字符读入比数字要快,所以这样做可以提高读入速度. ...