RocketMQ 主备自动切换模式部署

这篇具有很好参考价值的文章主要介绍了RocketMQ 主备自动切换模式部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

主备自动切换模式部署

Controller 部署​

Controller 嵌入 NameServer 部署​

Controller 独立部署​

Broker 部署​

兼容性​

升级注意事项​


主备自动切换模式部署

 RocketMQ 主备自动切换模式部署,RocketMQ,java-rocketmq,rocketmq,java

 

该文档主要介绍如何部署支持自动主从切换的 RocketMQ 集群,其架构如上图所示,主要增加支持自动主从切换的 Controller 组件,其可以独立部署也可以内嵌在 NameServer 中。

Controller 部署​

Controller 组件提供选主能力,若需要保证 Controller 具备容错能力,Controller 部署需要三副本及以上(遵循 Raft 的多数派协议)。

注意

Controller 若只部署单副本也能完成 Broker Failover,但若该单点 Controller 故障,会影响切换能力,但不会影响存量集群的正常收发。

Controller 部署有两种方式。一种是嵌入于 NameServer 进行部署,可以通过配置 enableControllerInNamesrv 打开(可以选择性打开,并不强制要求每一台 NameServer 都打开),在该模式下,NameServer 本身能力仍然是无状态的,也就是内嵌模式下若 NameServer 挂掉多数派,只影响切换能力,不影响原来路由获取等功能。另一种是独立部署,需要单独部署 Controller 组件。

Controller 嵌入 NameServer 部署​

RocketMQ 主备自动切换模式部署,RocketMQ,java-rocketmq,rocketmq,java

嵌入 NameServer 部署时只需要在 NameServer 的配置文件中设置 enableControllerInNamesrv=true,并填上 Controller 的配置即可。

enableControllerInNamesrv = true
controllerDLegerGroup = group1
controllerDLegerPeers = n0-127.0.0.1:9877;n1-127.0.0.1:9878;n2-127.0.0.1:9879
controllerDLegerSelfId = n0
controllerStorePath = /home/admin/DledgerController
enableElectUncleanMaster = false
notifyBrokerRoleChanged = true

参数解释:

  • enableControllerInNamesrv:Nameserver 中是否开启 controller,默认 false。
  • controllerDLegerGroup:DLedger Raft Group 的名字,同一个 DLedger Raft Group 保持一致即可。
  • controllerDLegerPeers:DLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致。
  • controllerDLegerSelfId:节点 id,必须属于 controllerDLegerPeers 中的一个;同 Group 内各个节点要唯一。
  • controllerStorePath:controller 日志存储位置。controller 是有状态的,controller 重启或宕机需要依靠日志来恢复数据,该目录非常重要,不可以轻易删除。
  • enableElectUncleanMaster:是否可以从 SyncStateSet 以外选举 Master,若为 true,可能会选取数据落后的副本作为 Master 而丢失消息,默认为 false。
  • notifyBrokerRoleChanged:当 Broker 副本组上角色发生变化时是否主动通知,默认为 true。

参数设置完成后,指定配置文件启动 Nameserver 即可。

$ nohup sh bin/mqnamesrv -c namesrv.conf &

Controller 独立部署​

RocketMQ 主备自动切换模式部署,RocketMQ,java-rocketmq,rocketmq,java

独立部署执行以下脚本即可

$ nohup sh bin/mqcontroller -c controller.conf &

mqcontroller 脚本在源码包 distribution/bin/mqcontroller,配置参数与内嵌模式相同。

注意

独立部署Controller后,仍然需要单独部署NameServer提供路由发现能力

Broker 部署​

Broker 启动方法与之前相同,增加以下参数

  • enableControllerMode:Broker controller 模式的总开关,只有该值为 true,自动主从切换模式才会打开。默认为 false。
  • controllerAddr:controller 的地址,多个 controller 中间用分号隔开。例如controllerAddr = 127.0.0.1:9877;127.0.0.1:9878;127.0.0.1:9879
  • syncBrokerMetadataPeriod:向 controller 同步 Broker 副本信息的时间间隔。默认 5000(5s)。
  • checkSyncStateSetPeriod:检查 SyncStateSet 的时间间隔,检查 SyncStateSet 可能会 shrink SyncState。默认5000(5s)。
  • syncControllerMetadataPeriod:同步 controller 元数据的时间间隔,主要是获取 active controller 的地址。默认10000(10s)。
  • haMaxTimeSlaveNotCatchup:表示 Slave 没有跟上 Master 的最大时间间隔,若在 SyncStateSet 中的 slave 超过该时间间隔会将其从 SyncStateSet 移除。默认为 15000(15s)。
  • storePathEpochFile:存储 epoch 文件的位置。epoch 文件非常重要,不可以随意删除。默认在 store 目录下。
  • allAckInSyncStateSet:若该值为 true,则一条消息需要复制到 SyncStateSet 中的每一个副本才会向客户端返回成功,可以保证消息不丢失。默认为 false。
  • syncFromLastFile:若 slave 是空盘启动,是否从最后一个文件进行复制。默认为 false。
  • asyncLearner:若该值为 true,则该副本不会进入 SyncStateSet,也就是不会被选举成 Master,而是一直作为一个 learner 副本进行异步复制。默认为false。
  • inSyncReplicas:需保持同步的副本组数量,默认为1,allAckInSyncStateSet=true 时该参数无效。
  • minInSyncReplicas:最小需保持同步的副本组数量,若 SyncStateSet 中副本个数小于 minInSyncReplicas 则 putMessage 直接返回 PutMessageStatus.IN_SYNC_REPLICAS_NOT_ENOUGH,默认为1。

在Controller模式下,Broker配置必须设置 enableControllerMode=true,并填写 controllerAddr,并以下面命令启动:

$ nohup sh bin/mqbroker -c broker.conf &

注意

自动主备切换模式下Broker无需指定brokerId和brokerRole,其由Controller组件进行分配

兼容性​

该模式未对任何客户端层面 API 进行新增或修改,不存在客户端的兼容性问题。

Nameserver 本身能力未做任何修改,Nameserver 不存在兼容性问题。如开启 enableControllerInNamesrv 且 controller 参数配置正确,则开启 controller 功能。

Broker若设置 enableControllerMode=false,则仍然以之前方式运行。若设置 enableControllerMode=true,则需要部署 controller 且参数配置正确才能正常运行。

具体行为如下表所示:

旧版 Nameserver 旧版 Nameserver+独立部署 Controller 新版 Nameserver 开启 controller功能 新版 Nameserver 关闭 controller 功能
旧版 Broker 正常运行,无法切换 正常运行,无法切换 正常运行,无法切换 正常运行,无法切换
新版 Broker 开启 Controller 模式 无法正常上线 正常运行,可以切换 正常运行,可以切换 无法正常上线
新版 Broker 不开启 Controller 模式 正常运行,无法切换 正常运行,无法切换 正常运行,无法切换 正常运行,无法切换

升级注意事项​

从上述兼容性表述可以看出,NameServer 正常升级即可,无兼容性问题。在不想升级 Nameserver 情况,可以独立部署 Controller 组件来获得切换能力。

针对 Broker 升级,分为两种情况:

(1)Master-Slave 部署升级成 Controller 切换架构

可以带数据进行原地升级,对于每组 Broker,停机主、备 Broker,保证主、备的 CommitLog 对齐(可以在升级前禁写该组 Broker 一段时间,或则通过拷贝方式保证一致),升级包后重新启动即可。

注意

若主备 CommitLog 不对齐,需要保证主上线以后再上线备,否则可能会因为数据截断而丢失消息。

(2)原 DLedger 模式升级到 Controller 切换架构

由于原 DLedger 模式消息数据格式与 Master-Slave 下数据格式存在区别,不提供带数据原地升级的路径。在部署多组 Broker 的情况下,可以禁写某一组 Broker 一段时间(只要确认存量消息被全部消费即可,比如根据消息的保存时间来决定),然后清空 store 目录下除 config/topics.json、subscriptionGroup.json 下(保留 topic 和订阅关系的元数据)的其他文件后,进行空盘升级。文章来源地址https://www.toymoban.com/news/detail-631578.html

到了这里,关于RocketMQ 主备自动切换模式部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop集群 手动主备切换 (Active - Standby)

    手动切换 node01 备用节点 StandbyNameNode 为 主节点 ActiveNameNode,node02为备用节点SNN 查看节点状态 hdfs haadmin -getServiceState nn1 命令切换节点状态 到 hadoop 目录下执行: 1、将 NN2 切换为 Standby 备用节点 bin/hdfs haadmin -transitionToStandby --forcemanual nn2 2、将 NN1 切换为 Active 备用节点 bin/hd

    2024年02月03日
    浏览(31)
  • 【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(双主双从+同步模式)

    rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。 单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,

    2024年02月04日
    浏览(55)
  • 【RocketMQ入门-安装部署与Java API测试】

    虚拟机VWMare:安装centos7.6操作系统 源码包:rocketmq-all-5.1.3-source-release.zip 单master部署,在一台虚拟机上安装部署name server和proxy以及broker 流程图: 源码包安装需要事先安装部署maven,下载apache-maven-3.6.3-bin.tar.gz安装包,然后解压并配置环境变量,如下命令: 配置环境变量(此

    2024年02月13日
    浏览(29)
  • MYSQL主从(主备)部署

    1、主机规划,示例环境用配置1主2从 类型 服务器IP 数据库版本 Master 192.168.100.1 Mysql:5.7.27 Save1 192.168.100.2 Mysql:5.7.27 Save2 192.168.100.3 Mysql:5.7.27 2、服务器环境准备 2.1 安装docker 在3台服务器上安装docker,安装过程跳过 2.2 mysql镜像上传 ...... 1、创建数据和配置文件挂载目录(3台服务

    2024年02月06日
    浏览(39)
  • 2022-08-18 网工进阶(二十七) VRRP进阶知识-报文格式、定时器、状态机、主备(选举、切换、回切)、负载分担、监视、与MSTP结合应用

    2022-01-12 网工基础(二十)GRE原理与配置 VRRP原理与配置_鹅一只的博客-CSDN博客_gre的应用场景 相关命令 创建VRRP备份组并给备份组配置虚拟IP地址 配置路由器在备份组中的优先级 VRRP只有一种报文,即Advertisement报文,基于组播方式发送,因此只能在同一个广播域传递。 Advert

    2024年02月11日
    浏览(43)
  • Linux-安装redis6.2.1及主备复制模式(replication)

    地址==》https://redis.io/download/ 例:/data/replication/ 目录redis-6.2.1修改为7000-master 再copy一份为从节点备份,文件夹命名为7001-slave 分别进入文件夹7000-master和7001-slave,执行命令 编译后,会在/data/replication/7000-master/src/和目录/data/replication/7001-slave/src/下生成执行文件,如下 修改主节

    2024年02月10日
    浏览(27)
  • java14 使用增强的模式匹配切换表达式

    野旷天低树,江清月近人。——唐代杜甫《月夜忆舍弟》 使用增强的模式匹配切换表达式(Switch Expressions with Enhanced Pattern Matching) Java 14中引入的“Switch Expressions with Enhanced Pattern Matching”这个功能。 这个功能可以让我们在使用switch case语句时,同时进行类型检查和类型转换,从

    2023年04月08日
    浏览(29)
  • openGauss学习笔记-61 openGauss 数据库管理-常见主备部署方案

    61.1 单中心 图 1 单中心部署图 组网特点: 单AZ部署,可以配置一个同步备一个异步备 优势: 三个node完全等价,故障任意一个node都可以提供服务; 成本低。 劣势: 高可用能力较低,发生AZ级故障只能依赖节点恢复; 适用性: 适用于对高可用性要求较低的业务系统。 61.2 同

    2024年02月09日
    浏览(44)
  • 防火墙直路部署,上下行连接交换机的主备备份组网

    组 网 需 求 如图所示,企业的两台FW的业务接口都工作在三层,上下行分别连接二层交换机。上行交换机连接运营商的接入点,运营商为企业分配的IP地址为1.1.1.1。现在希望两台FW以主备备份方式工作。正常情况下,流量通过FW_A转发。当FW_A出现故障时,流量通过FW_B转发,保

    2024年02月06日
    浏览(38)
  • java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM

    目录 基础篇 一、Get 和 Post 的区别 二、Java 多态的具体体现 三、StringBuffer StringBuilder String 区别 四、==和 equals 区别 五、重写 equals 需要重写 hashCode 吗 六、java 的基本数据类型 七、List, Set, Collection, Collections   八、ArrayList 和 LinedList 区别 九、HashMap 和 Hashtable 区别 十、Forward

    2023年04月20日
    浏览(121)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包