日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

rocketmq 如何保证高可用_RocketMq容灾、高可用方案

發(fā)布時(shí)間:2023/12/9 88 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rocketmq 如何保证高可用_RocketMq容灾、高可用方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、實(shí)現(xiàn)分布式集群多副本的三種方式

1.1 M/S模式

即Master/Slaver模式。該模式在過去使用的最多,RocketMq之前也是使用這樣的主從模式來實(shí)現(xiàn)的。主從模式分為同步模式和異步模式,區(qū)別是在同步模式下只有主從復(fù)制完畢才會返回給客戶端;而在異步模式中,主從的復(fù)制是異步的,不用等待即可返回。

同步模式

同步模式特點(diǎn):高延遲、低吞吐、無數(shù)據(jù)丟失(發(fā)生故障時(shí))、自動故障轉(zhuǎn)移、強(qiáng)一致性

異步模式

異步模式特點(diǎn):低延遲、高吞吐、少量數(shù)據(jù)丟失(主掛掉時(shí))、平均修復(fù)時(shí)間較長、最終一致性

1.2 基于zookeeper服務(wù)

image.png

和M/S模式相比zookeeper模式是自動選舉的主節(jié)點(diǎn),不過rocketMq暫時(shí)不支持zookeeper,且基于ZooKeeper的服務(wù)也帶來一個比較嚴(yán)重的問題:依賴加重。因?yàn)檫\(yùn)維ZooKeeper是一件很復(fù)雜的事情。

1.3 基于raft

Raft

相比zookeeper,raft自身就可以實(shí)現(xiàn)選舉,raft通過投票的方式實(shí)現(xiàn)自身選舉leader。去除額外依賴。目前RocketMq 4.5.0已經(jīng)支持

二、Dledger介紹(摘自github)

GitHub地址:https://github.com/openmessaging/openmessaging-storage-dledger/blob/master/docs/cn/introduction_dledger.md#dledger-%E7%9A%84%E5%AE%9E%E7%8E%B0

Dledger是一個基于Raft的 Commitlog 存儲 Library。DLedger 定位是一個工業(yè)級的 Java Library,可以友好地嵌入各類 Java 系統(tǒng)中,滿足其高可用、高可靠、強(qiáng)一致的需求。Dledger是基于日志實(shí)現(xiàn)的,只擁有日志的寫入和讀出接口,且對順序讀出和隨機(jī)讀出做了優(yōu)化。

DLedger 的實(shí)現(xiàn)大體可以分為以下兩個部分: 1.選舉 Leader 2.復(fù)制日志

image.png

2.1 Dledger在RocketMq的實(shí)現(xiàn)

image.png

實(shí)現(xiàn)方式:

DLedgerCommitlog 用來代替現(xiàn)有的 Commitlog 存儲實(shí)際消息內(nèi)容,它通過包裝一個 DLedgerServer 來實(shí)現(xiàn)復(fù)制;

依靠 DLedger 的直接存取日志的特點(diǎn),消費(fèi)消息時(shí),直接從 DLedger 讀取日志內(nèi)容作為消息返回給客戶端;

依靠 DLedger 的 Raft 選舉功能,通過 RoleChangeHandler 把角色變更透傳給 RocketMQ 的Broker,從而達(dá)到主備自動切換的目標(biāo)

三、 RocketMq-Dledger集群搭建

一下主要介紹如何部署自動容災(zāi)切換的 RocketMQ-on-DLedger Group。

RocketMQ-on-DLedger Group 是指一組相同名稱的 Broker,至少需要 3 個節(jié)點(diǎn),通過 Raft 自動選舉出一個 Leader,其余節(jié)點(diǎn) 作為 Follower,并在 Leader 和 Follower 之間復(fù)制數(shù)據(jù)以保證高可用。

RocketMQ-on-DLedger Group 能自動容災(zāi)切換,并保證數(shù)據(jù)一致。

RocketMQ-on-DLedger Group 是可以水平擴(kuò)展的,也即可以部署任意多個 RocketMQ-on-DLedger Group 同時(shí)對外提供服務(wù)。

3.1 源碼構(gòu)建

3.1.1構(gòu)建Dledger

git clone https://github.com/openmessaging/openmessaging-storage-dledger.git

cd openmessaging-storage-dledger

mvn clean install -DskipTests

3.1.2 構(gòu)建RocketMq

git clone https://github.com/apache/rocketmq.git

cd rocketmq

git checkout -b store_with_dledger origin/store_with_dledger

mvn -Prelease-all -DskipTests clean install -U

3.2編寫配置

每個 RocketMQ-on-DLedger Group 至少準(zhǔn)備三臺機(jī)器(本文假設(shè)為 3)。

編寫 3 個配置文件,建議參考 conf/dledger 目錄下的配置文件樣例。

關(guān)鍵配置介紹:

name

含義

舉例

enableDLegerCommitLog

是否啟動 DLedger

true

dLegerGroup

DLedger Raft Group的名字,建議和 brokerName 保持一致

RaftNode00

dLegerPeers

DLedger Group 內(nèi)各節(jié)點(diǎn)的端口信息,同一個 Group 內(nèi)的各個節(jié)點(diǎn)配置必須要保證一致

n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913

dLegerSelfId

節(jié)點(diǎn) id, 必須屬于 dLegerPeers 中的一個;同 Group 內(nèi)各個節(jié)點(diǎn)要唯一

n0

sendMessageThreadPoolNums

發(fā)送線程個數(shù),建議配置成 Cpu 核數(shù)

16

這里貼出 conf/dledger/broker-n0.conf 的配置舉例。

brokerClusterName = RaftCluster

brokerName=RaftNode00

listenPort=30911

namesrvAddr=127.0.0.1:9876

storePathRootDir=/tmp/rmqstore/node00

storePathCommitLog=/tmp/rmqstore/node00/commitlog

enableDLegerCommitLog=true

dLegerGroup=RaftNode00

dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913

## must be unique

dLegerSelfId=n0

sendMessageThreadPoolNums=16

3.3 啟動Broker

nohup sh bin/mqbroker -c conf/dledger/xxx-n0.conf &

nohup sh bin/mqbroker -c conf/dledger/xxx-n1.conf &

nohup sh bin/mqbroker -c conf/dledger/xxx-n2.conf &

四、容災(zāi)、高可用方案推薦

目前RocketMq主要有兩種選擇

1.M/S

2.Dledger模式

兩種的優(yōu)缺點(diǎn):

Master/Slave

優(yōu)點(diǎn):實(shí)現(xiàn)簡單

缺點(diǎn):不能自動控制節(jié)點(diǎn)切換,一旦出了問題,需要人為介入。

Dledger

優(yōu)點(diǎn):可以自己協(xié)調(diào),并且去除依賴。

缺點(diǎn): 只有RocketMq 4.5.0支持

經(jīng)過上文的分析。推薦使用Dledger

總結(jié)

以上是生活随笔為你收集整理的rocketmq 如何保证高可用_RocketMq容灾、高可用方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。