国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

TiKV 集群版本的安全遷移

Freelander / 1014人閱讀

摘要:次版本號(hào)當(dāng)做了向下兼容的功能性新增。因?yàn)榇藭r(shí)集群的版本已經(jīng)是更高的版本了,而加入舊版本的節(jié)點(diǎn)需要對(duì)舊版本進(jìn)行兼容,為了防止已有的特性降級(jí),直接拒絕不兼容的版本加入,目前默認(rèn)主版本號(hào)和此版本號(hào)一樣則為兼容的版本。

問(wèn)題描述

在 TiDB 的產(chǎn)品迭代中,不免會(huì)碰到一些兼容性問(wèn)題出現(xiàn)。通常協(xié)議上的兼容性 protobuf 已經(jīng)能幫我們處理的很好,在進(jìn)行功能開(kāi)發(fā),性能優(yōu)化時(shí),通常會(huì)保證版本是向后兼容的,但并不保證向前兼容性,因此,當(dāng)集群中同時(shí)有新舊版本節(jié)點(diǎn)存在時(shí),舊版本不能兼容新版本的特性,就有可能造成該節(jié)點(diǎn)崩潰,影響集群可用性,甚至丟失數(shù)據(jù)。目前在有不兼容的版本升級(jí)時(shí),會(huì)要求進(jìn)行離線升級(jí),但這會(huì)影響到服務(wù),我們需要一個(gè)適合的機(jī)制來(lái)進(jìn)行不停服務(wù)的升級(jí)。因此我們需要在進(jìn)行滾動(dòng)升級(jí)時(shí),讓這些不能保證整個(gè)集群的向后兼容性的功能不被啟用。只有在保證集群中所有節(jié)點(diǎn)都已經(jīng)升級(jí)完成后,我們才安全的啟用這些功能。

常見(jiàn)的當(dāng)我們對(duì)引入新的 RaftCommand 的時(shí)候,舊版本的 TiKV 并不能識(shí)別新的添加的 RaftCommand,對(duì)于不能認(rèn)知的 RaftCommand TiKV 有不同的處理,可能會(huì)報(bào)錯(cuò)退出或忽略。比如為了支持 Raft Learner, 在 raftpb 里對(duì)添加新的 ConfChange 類型。 當(dāng) PD 在進(jìn)行 Region 調(diào)度時(shí),會(huì)先發(fā)送 AddLearner 到 TiKV 上,接受到這個(gè)命令的肯定是這個(gè) Region 的 Leader,在進(jìn)行一系列檢查后,會(huì)將該命令 Proposal, 而 Follwer 如果是舊版本的話,在 Apply 這條 Command 就會(huì)出錯(cuò)。而在滾動(dòng)升級(jí)時(shí),很有可能存在 Leader 是新版本,F(xiàn)ollwer 是老版本的情況。

引入版本檢查機(jī)制

TiDB 的版本定義是遵循 Semver 的版本規(guī)則的。版本格式一般由主版本號(hào)(Major),次版本號(hào)(Minor),修訂號(hào)(Patch),版本號(hào)遞增規(guī)則如下:

主版本號(hào):當(dāng)進(jìn)行了不兼容的 API 修改。

次版本號(hào):當(dāng)做了向下兼容的功能性新增。

修訂號(hào):當(dāng)做了向下兼容的問(wèn)題修正。

先行版本號(hào)(PreRelase)及版本編譯信息可以加到“主版本號(hào).次版本號(hào).修訂號(hào)”的后面,作為延伸。比如 TiDB 目前的版本是 2.1.0-beta,先行版號(hào)為 beta 版。

在此之前,集群并沒(méi)有版本的概念,雖然每個(gè)組件都有各自的版本信息,但各個(gè)節(jié)點(diǎn)的各自組件的版本都可以任意的。沒(méi)有一個(gè)管理機(jī)制可以管理或查看所有組件的版本信息。為了解決滾動(dòng)升級(jí)過(guò)程中存在多個(gè)版本的兼容性問(wèn)題,這里引入集群版本的概念,并由 TiDB 集群的中心節(jié)點(diǎn) PD 來(lái)進(jìn)行管理和檢查。

具體實(shí)現(xiàn) 1.升級(jí)集群

在 PD 中,會(huì)設(shè)置一個(gè) cluster_version 的鍵值對(duì),對(duì)應(yīng)當(dāng)前運(yùn)行集群中 TiKV 節(jié)點(diǎn)中最舊的版本。也就是必須要兼容這個(gè)版本, 因此不能打開(kāi)集群中其他新版本的節(jié)點(diǎn)的一些不兼容的特性。

在集群?jiǎn)?dòng)的時(shí)候,每個(gè) TiKV 都需要向 PD 注冊(cè),注冊(cè)時(shí)會(huì)帶上版本信息。當(dāng)當(dāng)前 TiKV 的版本低于集群版本的時(shí)候,該 TiKV 會(huì)注冊(cè)失敗。因?yàn)榇藭r(shí)集群的版本已經(jīng)是更高的版本了,而加入舊版本的節(jié)點(diǎn)需要對(duì)舊版本進(jìn)行兼容,為了防止已有的特性降級(jí),直接拒絕不兼容的版本加入,目前默認(rèn)主版本號(hào)和此版本號(hào)一樣則為兼容的版本。

如果 TiKV 的版本高于或等于當(dāng)前的 cluster_version 時(shí), TiKV 能夠注冊(cè)成功并成功啟動(dòng)。每次注冊(cè)都會(huì)觸發(fā) PD 的一次檢查,會(huì)檢測(cè)當(dāng)前集群中正常運(yùn)行的 TiKV 的最低版本,并與當(dāng)前的 cluster_version 進(jìn)行比對(duì),如果最低版本比 cluster_version 更加新,則將 cluster_version 更新。因此每次滾動(dòng)升級(jí)的時(shí)候,能夠自動(dòng)更新集群的版本。

2. 版本特性的開(kāi)啟

TiKV 很多功能是需要 PD 的參與,目前這些新功能的開(kāi)啟也是通過(guò) PD 進(jìn)行控制的。在 PD 中,會(huì)將每個(gè)版本新特性記錄下來(lái),在 TiKV 2.0 中,對(duì)應(yīng)有 Raft Leaner, Region Merge。 TiKV 2.1 中有 Batch Split,Joint Consensus 等。這些特性都需要 PD 的參與與控制。比如說(shuō) Add Leaner,Region Merge,Joint Consensus 需要 PD 下發(fā)調(diào)度給 TiKV,Batch Split 則是 TiKV 主動(dòng)發(fā)起并請(qǐng)求 PD 分配新的 Region ID。因此這些功能都是能通過(guò) PD 進(jìn)行控制的。PD 會(huì)通過(guò)比對(duì)當(dāng)前的集群版本,選擇開(kāi)啟當(dāng)前集群版本所支持的新特性。從而保證版本的兼容性。

3. 集群回滾

當(dāng)升級(jí)完成后,如果遇到問(wèn)題需要進(jìn)行集群進(jìn)行回滾時(shí), 需要手動(dòng)修改集群版本后。PD 提供了 pdctl 可以通過(guò)命令手動(dòng)修改集群的 cluster_version,這時(shí)舊版本的 TiKV 就能注冊(cè)并啟動(dòng),從而進(jìn)行回滾。

PD 對(duì) cluster_version 是通過(guò) etcd 進(jìn)行了持久化,在每次 PD 啟動(dòng)的時(shí)候,leader 都會(huì)從 etcd kv 中加載出 clustrer_version,然后提供服務(wù)。從而保證在 PD leader 切換后 cluster_version 的一致性。另外 PD 本身的版本可能會(huì)小于當(dāng)前 cluster_version。因此在滾動(dòng)升級(jí)的時(shí)候,需要先升級(jí) PD,如果只升級(jí)了 TiKV,雖然 cluster_version 已經(jīng)更新到新的版本的,但 PD 并不能開(kāi)啟新的功能,因?yàn)閷?duì)它來(lái)說(shuō)是不支持的。如果出現(xiàn)這種情況,PD 的日志中會(huì)有報(bào)警。在升級(jí)的時(shí)候,最好按 PD,TiKV,TiDB 的順序逐一對(duì)各個(gè)組件。

后續(xù)計(jì)劃

上面提到的新功能特性一般都是需要 PD 參與的。而有些特性不需要PD的參與,因此需要保證這種特性在 TiKV 之間是可以兼容的,實(shí)現(xiàn)的時(shí)候可以采用類是 http2 <-> http 的方式,對(duì)請(qǐng)求進(jìn)行降級(jí)裝發(fā),保留兩套接口等。另為 TiDB 目前是自身保證可以無(wú)縫兼容,但與 TiKV 可能存在兼容性問(wèn)題,往后同樣考慮讓TiDB 也在 PD上進(jìn)行注冊(cè)。

作者:陳書(shū)寧

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/17781.html

相關(guān)文章

  • Cloud + TiDB 技術(shù)解讀

    摘要:作為一個(gè)開(kāi)源的分布式數(shù)據(jù)庫(kù)產(chǎn)品,具有多副本強(qiáng)一致性的同時(shí)能夠根據(jù)業(yè)務(wù)需求非常方便的進(jìn)行彈性伸縮,并且擴(kuò)縮容期間對(duì)上層業(yè)務(wù)無(wú)感知。另外本身維護(hù)了數(shù)據(jù)多副本,這點(diǎn)和分布式文件系統(tǒng)的多副本是有重復(fù)的。 作者:鄧栓來(lái)源:細(xì)說(shuō)云計(jì)算 作為一款定位在 Cloud-native 的數(shù)據(jù)庫(kù),現(xiàn)如今 TiDB 在云整合上已取得了階段性的進(jìn)展。日前 Cloud TiDB 產(chǎn)品在 UCloud 平臺(tái)正式開(kāi)啟...

    JouyPub 評(píng)論0 收藏0
  • TiDB和MongoDB分片集群架構(gòu)比較

    摘要:此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。分片集群通過(guò)就可以實(shí)現(xiàn)負(fù)載均衡,不需要單獨(dú)部署負(fù)載均衡組件。是一個(gè)集群,通過(guò)協(xié)議保持?jǐn)?shù)據(jù)的一致性副本數(shù)量可配置,默認(rèn)保存三副本,并通過(guò)做負(fù)載均衡調(diào)度。 此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問(wèn)網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 最近閱讀了TiDB源碼的說(shuō)明文檔,跟MongoDB的分片集群做了下簡(jiǎn)單對(duì)比。 首先展示TiDB的整體架構(gòu) ...

    KaltZK 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<