技術分享 | ClickHouse-Keeper 初探

愛可生雲資料庫發表於2022-03-18

作者:陳宇

現任愛可生南區專案經理,負責專案整體質量、安全、進度、成本管理的責任保證體系。對開源技術執著,為客戶負責,喜歡極限運動,足球。

本文來源:原創投稿

*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。


一、ClickHouse-Keeper 是什麼:

ClickHouse 社群在 21.8 版本中開始引入了 ClickHouse-Keeper ,直至 ClickHouse 21.12 釋出公告提到 ClickHouse Keeper 功能基本完成。

ClickHouse Keeper 是 ZooKeeper 的替代品,與 ZooKeeper 不同,ClickHouse Keeper 是用 C++ 編寫的,並使用 RAFT 演算法實現,該演算法允許對讀寫具有線性化能力,具有多種不同語言的開源實現。

二、Zookeeper與ClickHouse-Keeper一些場景對比

為什麼要引入 ClickHouse-Keeper 呢?主要是 ClickHouse 使用 Zookeeper 有著眾多痛點:

  • 使用java開發
  • 運維不便
  • 要求獨立部署
  • zxid overflow 問題
  • snapshot 和 log 沒有經過壓縮
  • 不支援讀的線性一致性

而 ClickHouse-Keeper 存在著以下優點:

  • 使用 C++ 開發,技術棧與 ClickHouse 統一
  • 即可獨立部署,又可整合到 ClickHouse 中
  • 沒有 zxid overflow 問題
  • 讀效能更好,寫效能相當
  • 支援對 snapshot 和 log 的壓縮和校驗
  • 支援讀寫的線性一致性

三、配置方式

相較之前的叢集配置,沒有太大區別,而 ClickHouse-Keeper 僅當<keeper_server>標籤存在於配置中時才會執行,配置模板如下:

四、啟動命令

clickhouse-keeper --config /etc/your_path_to_config/config.xml

五、引數說明

  • tcp_port:客戶端連線的埠(ZooKeeper 的預設值為2181)
  • tcp_port_secure:用於客戶端和 keeper-server 之間 SSL 連線的安全埠
  • server_id:Keeper叢集的每個節點唯一ID
  • log_storage_path:日誌路徑,最好將日誌儲存在IO效能強裝置
  • snapshot_storage_path:快照路徑

<keeper_server>.<coordination_settings>部分

  • operation_timeout_ms:單個客戶端操作超時配置
  • min_session_timeout_ms:客戶端會話最小超時
  • session_timeout_ms:客戶端會話的最大超時
  • dead_session_check_period_ms:檢查過期會話並將其刪除的頻率
  • heart_beat_interval_ms:leader 向 follower 傳送心跳的頻率
  • election_timeout_lower_bound_ms:如果 follower 在此時間間隔內沒有收到 leader 的心跳,則可以發起 leader 選舉
  • rotate_log_storage_interval:在單個檔案中儲存多少日誌記錄
  • reserved_log_items:壓縮前要儲存多少日誌記錄
  • snapshot_distance:建立快照的頻率
  • snapshots_to_keep:快照保留份數
  • max_requests_batch_size:在將請求傳送到 RAFT 之前,請求中的最大批處理請求大小
  • raft_logs_level:raft日誌記錄級別
  • auto_forwarding:允許將follower的寫請求轉發給leader
  • shutdown_timeout:等待完成內部連線並關閉的時間

<keeper_server>.<raft_configuration>部分

  • Id:叢集的每個節點ID
  • Hostname:伺服器的主機名
  • Port:伺服器監聽埠

六、狀態檢查

6.1、ruok 主要用於診斷 Keeper 的客戶端/伺服器

命令如下:

echo ruok | nc 127.0.0.1 9181

成功則返回 imok

6.2、確保 ClickHouse-Server 知道 keeper 叢集,我們可以查詢 system.zookeeper 表

注:輸出以上資訊代表安裝成功

七、如何遷移 Zookeeper 至ClicHouse-Keeper

既然 ClickHouse-Keeper 優勢這麼明顯,那麼如何將 Zookeeper 中的資料遷移到 ClickHouse-Keeper 中呢?官方提供了遷移工具 ClickHouse-Keeper-Converter, 它能夠將 Zookeeper 中的資料 dump 成 ClicHouse-Keeper 能夠載入的 snapshot 。

遷移步驟如下

  • 停止所有 Zookeeper 節點
  • 找到 Zookeeper-leader 節點並再次停止(這一步是為了讓 leader 節點生成一份 snapshot )
  • 執行 ClickHouse-Keeper-Converter ,生成 Keeper 的 snapshot 檔案

命令參考:

clickhouse-keeper-converter --zookeeper-logs-dir /var/lib/zookeeper/version-2 --zookeeper-snapshots-dir /var/lib/zookeeper/version-2 --output-dir /path/to/clickhouse/keeper/snapshots
  • 啟動 ClickHouse-Keeper ,使其載入上一步中的 snapshot

參考文獻:https://clickhouse.com/docs/e...

相關文章