5 分鐘完成 ZooKeeper 資料遷移

語言: CN / TW / HK

前言

Cloud Native

MSE 提供了託管版的 ZooKeeper,包含比開源 ZooKeeper 更強大更穩定的功能,能幫助您免去運維 ZooKeeper 叢集的煩惱,當我們需要從自建 ZooKeeper 遷移到 MSE ZooKeeper 上面時,往往依賴舊叢集的資料,MSE 提供了多種資料遷移的方案,其中主流的方案可以通過  MSE Sync  進行實時同步,這樣能夠達到平滑不停機的目的,本文將介紹另外一種資料遷移的方式,主要針對業務支援停機的場景,進行一個補充,操作相比更加簡單快速。

實現原理

Cloud Native

在對 ZooKeeper 進行了若干次事務操作之後,ZooKeeper 會將記憶體資料全量寫入到本地磁碟中,生成一個 snapshot 開頭的快照檔案,這個快照檔案就包含了該叢集的全量資料。同時 ZooKeeper 在節點啟動的時候,會首先載入該快照檔案進行一次資料初始化。

基於此原理,我們可以將任意要遷移叢集的快照檔案,放到目標叢集的快照路徑中,然後重啟目標叢集就可以將遷移叢集的資料載入到自己的記憶體中了,這樣就完成了一次全量資料的遷移。

資料匯入實踐

Cloud Native

步驟一:獲取快照檔案

“支援開源 ZooKeeper 3.4.x~3.8.x 的資料遷移匯入到 MSE ZooKeeper”

我們先找到自建 ZooKeeper 的 Snap 快取檔案:

檔名為 “snapshot.xxx”格式的:是 ZooKeeper 某個時刻的全量資料,ZooKeeper 會定時寫到磁碟中的。

  • 檔案路徑

snapshot.xxx 檔案的儲存路徑:會配置在 ZooKeeper 的 zoo.cfg(zoo.cfg 預設放在 zookeeper 目錄的 conf 資料夾下)配置檔案中,dataDir 項,例如:

dataDir=/home/admin/zookeeper/zkData
  • 獲取檔案

snapshot.xxx 一般在目錄中會存在多個,拿最近時間生成那個即可:

步驟二 :準備 MSE 叢集

以下表格供參考,購買還需要參考 QPS/TPS 等維度的約束,例如讀寫資料較小,QPS/TPS 相應也能提高,具體以業務場景為準:

步驟三:上傳快照檔案

從註冊配置中心列表頁點選你購買的例項,進入 ZooKeeper 的基礎資訊頁:

從“節點管理”進入管理頁面:

點選“資料匯入”,上傳 Snapshot 檔案,檔案大小限制會根據你當前 ZooKeeper 配置自動提示,例如本次購買的 4C8G,提示最大不可超過 800M 大小:

上傳完了之後,3 個節點的叢集大概 5 分鐘左右,資料即可匯入重啟完成。

結果驗證

資料匯入完成之後,即可通過 endpoint 進行 MSE ZooKeeper 的訪問,獲取到遷移資料。

“mse-xxxx-p.zk.mse.aliyuncs.com” 為叢集的 endpoint:

 CuratorFrameworkFactory.builder().connectString("mse-xxxx-p.zk.mse.aliyuncs.com:2181")
.sessionTimeoutMs(10000).retryPolicy(
retryPolicy).
build().start();


ZooKeeper zk = new ZooKeeper("mse-xxxx-p.zk.mse.aliyuncs.com:2181", 30000,
new Watcher() {
@Override
public void process(WatchedEvent event) {


System.out.println("ZooKeeper=====" + event);
}
});

購買 MSE Zookeeper 享受企業級服務

Cloud Native