在 tidb 的產品迭代中,不免會碰到一些相容性問題出現。通常協議上的相容性 protobuf 已經能幫我們處理的很好,在進行功能開發,效能優化時,通常會保證版本是向後相容的,但並不保證向前相容性,因此,當集群中同時有新舊版本節點存在時,舊版本不能相容新版本的特性,就有可能造成該節點崩潰,影響集群可用性,甚至丟失資料。目前在有不相容的版本公升級時,會要求進行離線公升級,但這會影響到服務,我們需要乙個適合的機制來進行不停服務的公升級。因此我們需要在進行滾動公升級時,讓這些不能保證整個集群的向後相容性的功能不被啟用。只有在保證集群中所有節點都已經公升級完成後,我們才安全的啟用這些功能。
tidb 的版本定義是遵循 semver 的版本規則的。版本格式一般由主版本號(major),次版本號(minor),修訂號(patch),版本號遞增規則如下:
主版本號:當進行了不相容的 api 修改。
次版本號:當做了向下相容的功能性新增。
修訂號:當做了向下相容的問題修正。
先行版本號(prerelase)及版本編譯資訊可以加到「主版本號.次版本號.修訂號」的後面,作為延伸。比如 tidb 目前的版本是 2.1.0-beta,先行版號為 beta 版。
在此之前,集群並沒有版本的概念,雖然每個元件都有各自的版本資訊,但各個節點的各自元件的版本都可以任意的。沒有乙個管理機制可以管理或檢視所有元件的版本資訊。為了解決滾動公升級過程中存在多個版本的相容性問題,這裡引入集群版本的概念,並由 tidb 集群的中心節點 pd 來進行管理和檢查。
在 pd 中,會設定乙個cluster_version
的鍵值對,對應當前執行集群中 tikv 節點中最舊的版本。也就是必須要相容這個版本, 因此不能開啟集群中其他新版本的節點的一些不相容的特性。
在集群啟動的時候,每個 tikv 都需要向 pd 註冊,註冊時會帶上版本資訊。當當前 tikv 的版本低於集群版本的時候,該 tikv 會註冊失敗。因為此時集群的版本已經是更高的版本了,而加入舊版本的節點需要對舊版本進行相容,為了防止已有的特性降級,直接拒絕不相容的版本加入,目前預設主版本號和此版本號一樣則為相容的版本。
如果 tikv 的版本高於或等於當前的cluster_version
時, tikv 能夠註冊成功並成功啟動。每次註冊都會觸發 pd 的一次檢查,會檢測當前集群中正常執行的 tikv 的最低版本,並與當前的cluster_version
進行比對,如果最低版本比cluster_version
更加新,則將cluster_version
更新。因此每次滾動公升級的時候,能夠自動更新集群的版本。
tikv 很多功能是需要 pd 的參與,目前這些新功能的開啟也是通過 pd 進行控制的。在 pd 中,會將每個版本新特性記錄下來,在 tikv 2.0 中,對應有 raft leaner, region merge。 tikv 2.1 中有 batch split,joint consensus 等。這些特性都需要 pd 的參與與控制。比如說 add leaner,region merge,joint consensus 需要 pd 下發排程給 tikv,batch split 則是 tikv 主動發起並請求 pd 分配新的 region id。因此這些功能都是能通過 pd 進行控制的。pd 會通過比對當前的集群版本,選擇開啟當前集群版本所支援的新特性。從而保證版本的相容性。
當公升級完成後,如果遇到問題需要進行集群進行回滾時, 需要手動修改集群版本後。pd 提供了 pdctl 可以通過命令手動修改集群的cluster_version
,這時舊版本的 tikv 就能註冊並啟動,從而進行回滾。
pd 對cluster_version
是通過 etcd 進行了持久化,在每次 pd 啟動的時候,leader 都會從 etcd kv 中載入出clustrer_version
,然後提供服務。從而保證在 pd leader 切換後cluster_version
的一致性。另外 pd 本身的版本可能會小於當前cluster_version
。因此在滾動公升級的時候,需要先公升級 pd,如果只公升級了 tikv,雖然cluster_version
已經更新到新的版本的,但 pd 並不能開啟新的功能,因為對它來說是不支援的。如果出現這種情況,pd 的日誌中會有報警。在公升級的時候,最好按 pd,tikv,tidb 的順序逐一對各個元件。
上面提到的新功能特性一般都是需要 pd 參與的。而有些特性不需要pd的參與,因此需要保證這種特性在 tikv 之間是可以相容的,實現的時候可以採用類是http2 http
的方式,對請求進行降級裝發,保留兩套介面等。另為 tidb 目前是自身保證可以無縫相容,但與 tikv 可能存在相容性問題,往後同樣考慮讓tidb 也在 pd上進行註冊。
SVN版本庫的遷移
兩台伺服器,進行 svn的遷移 系統平台 windows server 2003 版本庫 test 源伺服器 192.168.1.14 目標伺服器 192.168.1.12 源svn版本庫的 path d svn test 要遷移到的 path e svn test 首先說明 這個目標伺服器上的sv...
FastDFS集群整體遷移的問題
這是自己在fastdfs技術群裡關於集群整體遷移討論的聊天記錄 0.618 873085561 11 10 34 有做過fastdfs檔案伺服器資料遷移的嗎?龍 263209498 11 11 08 fastdfs集群整體遷移的問題。如果新舊ip位址一一對應,而且是一樣的,那非常簡單,直接將data...
集群之間資料的遷移
場景 舊集群的資料要遷移到新集群上面 hadoop distcp option hdfs master ip 8020 hive warehouse db tab name hdfs master ip 8020 hive warehouse db tab name option的內容可以hadoo...