集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略
首先要聲明一點,zk集群中,leader服務器有著比較重要的存在,Follower 服務器只是處理非事務性請求,leader服務器主要負責事務性請求,Follower 服務器在遇到事務性請求以后還是會轉發給leader服務器處理,所以整個集群的性能就收到leader服務器性能的影響,這也是zk設計時的一個弊端。
既然leader服務器處理事務性請求,必然會造成數據變更,但是對外提供的服務器并沒有數據變更,所以這里分布式系統中必然會有zk集群的數據同步,要不然數據就不一致了。同步的過程如下
同步條件是指在 ZooKeeper 集群中何時觸發數據同步的機制。要想進行集群中的數據同步,首先需要 ZooKeeper 集群中存在用來進行數據同步的 Learning 服務器。 也就是說,當 ZooKeeper 集群中選舉出 Leader 節點后,除了被選舉為 Leader 的服務器,其他服務器都作為 Learnning 服務器,并向 Leader 服務器注冊。之后系統就進入到數據同步的過程中。
Leader 的事務性的會話請求會被同步,
同步方式如下
DIFF 同步
DIFF 同步即差異化同步的方式,首先會向該 Learnning 服務器發送一個 DIFF 不同指令。在收到該條指令后,Learnning 服務器會進行差異化方式的數據同步操作。在這個過程中,Leader 服務器會將一些 Proposal(事務請求) 發送給 Learnning 服務器。之后 Learnning 服務器在接收到來自 Leader 服務器的 commit 命令后執行數據持久化的操作。
TRUNC+DIFF 同步
TRUNC+DIFF 同步代表先回滾再執行差異化的同步,這種方式一般發生在 Learnning 服務器上存在一條事務性的操作日志,但在集群中的 Leader 服務器上并不存在的情況 。發生這種情況的原因可能是 Leader 服務器已經將事務記錄到本地事務日志中,但沒有成功發起 Proposal 流程。當這種問題產生的時候,ZooKeeper 集群會首先進行回滾操作,在 Learning 服務器上的數據回滾到與 Leader 服務器上的數據一致的狀態后,再進行 DIFF 方式的數據同步操作。
TRUNC 同步
TRUNC 同步是指僅回滾操作,就是將 Learnning 服務器上的操作日志數據回滾到與 Leader 服務器上的操作日志數據一致的狀態下。之后并不進行 DIFF 方式的數據同步操作。
SNAP 同步
SNAP 同步的意思是全量同步,是將 Leader 服務器內存中的數據全部同步給 Learnning 服務器。在進行全量同步的過程中,Leader 服務器首先會向 ZooKeeper 集群中的 Learning 服務器發送一個 SNAP 命令,在接收到 SNAP 命令后, ZooKeeper 集群中的 Learning 服務器開始進行全量同步的操作。隨后,Leader 服務器會從內存數據庫中獲取到全量數據節點和會話超時時間記錄器,將他們序列化后傳輸給 Learnning 服務器。Learnning 服務器接收到該全量數據后,會對其反序列化后載入到內存數據庫中。
此方法會判斷是那種同步方式最后,最后會將請求放入packetsNotCommitted.add(pif); list中,
最后會用此方法進行數據變更操作。
總結
以上是生活随笔為你收集整理的集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c linux 获取cpuid_Linu
- 下一篇: action怎么获得 ajax date