久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進(jìn)行etcd的分析

140次閱讀
沒有評論

共計(jì) 2243 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

這篇文章給大家介紹如何進(jìn)行 etcd 的分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

機(jī)制概念

Raft:etcd 所采用的保證分布式系統(tǒng)強(qiáng)一致性的算法

Node:一個(gè) Raft 狀態(tài)機(jī)實(shí)例

Member:一個(gè) etcd 實(shí)例它管理著一個(gè) Node,并且可以為客戶端請求提供服務(wù)

Cluster:由多個(gè) Member 構(gòu)成可以協(xié)同工作的 etcd 集群

Peer:對同一個(gè) etcd 集群中另外一個(gè) Member 的稱呼

Client:向 etcd 集群發(fā)送 HTTP 請求的客戶端

WAL:預(yù)寫式日志,etcd 用于持久化存儲(chǔ)的日志格式

snapshot:etcd 防止 WAL 文件過多而設(shè)置的快照,存儲(chǔ) etcd 數(shù)據(jù)狀態(tài)

Proxy:etcd 的一種模式,為 etcd 集群提供反向代理服務(wù)

Leader:Raft 算法中通過競選而產(chǎn)生的處理所有數(shù)據(jù)提交的節(jié)點(diǎn)

Follower:競選失敗的節(jié)點(diǎn)作為 Raft 中的從屬節(jié)點(diǎn),為算法提供強(qiáng)一致性保證

Candidate:當(dāng) Follower 超過一定時(shí)間接收不到 Leader 的心跳時(shí)轉(zhuǎn)變?yōu)?Candidate 開始競選

Term:某個(gè)節(jié)點(diǎn)成為 Leader 到下一次競選時(shí)間,稱為一個(gè) Term

Index:數(shù)據(jù)項(xiàng)編號(hào) Raft 中通過 Term 和 Index 來定位數(shù)據(jù)

Etcd 的 Raft

由于 Raft 算法在做決策時(shí)需要多數(shù)節(jié)點(diǎn)的投票,所以 etcd 一般部署集群推薦奇數(shù)個(gè)節(jié)點(diǎn),推薦的數(shù)量為 3、5 或者 7 個(gè)節(jié)點(diǎn)構(gòu)成一個(gè)集群。

腦裂解決方案

引入一個(gè)新的概念, region leader

region leader 是一個(gè)邏輯上的概念

任意時(shí)刻對于某一個(gè) region 來說, 一定只擁有一個(gè) region leader

每個(gè) region leader 在任期之內(nèi)嘗試每隔 t 時(shí)間間隔, 在 raft group 內(nèi)部更新一下 region leader 的 lease.

所有的讀寫請求都必須通過 region leader 完成

但是值得注意的是,region leader 和 raft leader 可能不是一個(gè)節(jié)點(diǎn)。當(dāng) region leader 和 raft leader 不重合的時(shí)候,region leader 會(huì)將請求轉(zhuǎn)發(fā)給當(dāng)前的 raft leader

當(dāng)網(wǎng)絡(luò)出現(xiàn)分區(qū)時(shí),會(huì)出現(xiàn)以下幾種情況:

region leader 落在多數(shù)派,老 raft leader 在多數(shù)派這邊

region leader 落在多數(shù)派,老 raft leader 在少數(shù)派這邊

region leader 落在少數(shù)派,老 raft leader 在多數(shù)派這邊

region leader 落在少數(shù)派,老 raft leader 在少數(shù)派這邊

存儲(chǔ) (v3)

v3 和之前版本差別太大,僅以其為準(zhǔn)

Backend:BoltDB

基本特點(diǎn)

單機(jī)

支持事務(wù)

鍵值對

事務(wù)處理

增、刪、讀:都要獲取一個(gè)事務(wù)

只讀事務(wù):只讀,只能查找 Bucket 和 K/V

讀寫事務(wù):可讀寫

結(jié)束時(shí):若無異常,則提交事務(wù)

有異常:拋棄整個(gè)事務(wù)

MVCC 結(jié)構(gòu)層次

revision:對同一個(gè) key 每次修改都對應(yīng)一個(gè) revision – main:每次事務(wù) +1 – sub:同次事務(wù)每次對其操作 +1 generation:– 一個(gè) key 在生命周期內(nèi)可能被頻繁刪除 – 從某次創(chuàng)建到該次刪除的所有 revision 集合組成一個(gè) generation key:每個(gè) key 是由多個(gè) generation 組成多版本 keyIndex:組織這個(gè)多版本 key 的結(jié)構(gòu)體叫做 keyIndex

維護(hù)

多個(gè)版本同時(shí)保持,需要不定期清理

刪除過老版本

ectd 提供了命令行工具

實(shí)現(xiàn)

type keyIndex struct {key []byte
 modified revision // 最新版本 revision
 generations []generation // 代
type generation struct {
 ver int64
 created revision //  創(chuàng)建這個(gè)代的第一個(gè)版本
 revs []revision// 版本數(shù)組
type revision struct {
 main int64 // 事務(wù) id,全局遞增
 sub int64 //  事務(wù)內(nèi)遞增
}

例子 插入數(shù)據(jù)

(key1, value1)
(key2, value2)

更新數(shù)據(jù)

(key1, update1)
(key2, update2)

存儲(chǔ)的記錄

rev={1 0}, key=key1, value= value1 
rev={1 0}, key=key2, value= value2 
rev={2 0}, key=key1, value= update1 
rev={2 1}, key=key2, value= update2

內(nèi)存索引:KeyIndex

基本特點(diǎn)

基于 Google 開源

基于 btree

組件

HTTP Server:用于處理用戶發(fā)送的 API 請求以及其它 etcd 節(jié)點(diǎn)的同步與心跳信息請求。

Store:用于處理 etcd 支持的各類功能的事務(wù),包括數(shù)據(jù)索引、節(jié)點(diǎn)狀態(tài)變更、監(jiān)控與反饋、事件處理與執(zhí)行等等,是 etcd 對用戶提供的大多數(shù) API 功能的具體實(shí)現(xiàn)。

Raft:Raft 強(qiáng)一致性算法的具體實(shí)現(xiàn),是 etcd 的核心。

WAL:Write Ahead Log(預(yù)寫式日志),是 etcd 的數(shù)據(jù)存儲(chǔ)方式

除了在內(nèi)存中存有所有數(shù)據(jù)的狀態(tài)以及節(jié)點(diǎn)的索引以外,etcd 就通過 WAL 進(jìn)行持久化存儲(chǔ)

WAL 中,所有的數(shù)據(jù)提交前都會(huì)事先記錄日志

Snapshot 是為了防止數(shù)據(jù)過多而進(jìn)行的狀態(tài)快照

Entry 表示存儲(chǔ)的具體日志內(nèi)容

關(guān)于如何進(jìn)行 etcd 的分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計(jì)2243字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 永春县| 万宁市| 唐河县| 隆安县| 津南区| 搜索| 合水县| 惠来县| 磐安县| 沧源| 宜良县| 新民市| 柳江县| 铁力市| 仙桃市| 梅河口市| 梁平县| 河间市| 罗定市| 广汉市| 子洲县| 新河县| 武安市| 宿迁市| 扬州市| 佳木斯市| 夏邑县| 乌拉特中旗| 军事| 中西区| 林芝县| 云阳县| 漳州市| 敦煌市| 巴塘县| 仪征市| 金昌市| 凤台县| 弥勒县| 高阳县| 罗田县|