作者:陳宇
現任愛可生南區專案經理,負責專案整體質量、安全、進度、成本管理的責任保證體系。對開源技術執著,為客戶負責,喜歡極限運動,足球。
本文來源:原創投稿
*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。
一、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