分享不易,關注轉發,随筆感悟,職場心得。
介紹在大數據企業中,需要一個平台,使我們的業務用戶能夠通過對龐大的數據集執行交互式分析來做出相對清晰的數據驅動決策。這個場景需要一個可以處理大量數據的 OLAP 系統。為了做到這一點,可以利用 ClickHouse(關于ClickHouse之前有發文分析,我們已經投入生産使用了兩年,效果客觀,結果滿意,未來持續跟進),它可以在幾秒鐘内對數十億行數據運行分析查詢。
但是,管理和維護一個存儲和處理 TB 級數據的數據庫集群可能是一項艱巨的任務。通過這篇文章,将回顧我們平台的架構來分享一些對設置 ClickHouse 分布式集群有用的最佳實踐。我們的很多B端客戶也是基于我們的DaaS,基于我們的集群,構建儀表闆,使他們能夠做出更明智的業務決策。
架構
該平台的架構設計需要保持高度可用且易于擴展,還需要屏蔽底層基礎設施的細節,這樣我們能夠對基礎架構進行更改,而不會造成任何停機或對用戶産生影響。
架構概述:
以下是對關鍵組件以及它們如何與系統其餘部分交互的說明:
1.負載均衡器關于負載局衡器的落地可以場景有多種技術方案, 負載均衡器是我們的客戶端和平台之間的接口。負載均衡器将流量定向到 Chproxy 服務器,該服務器進一步與 ClickHouse 集群通信。
負載均衡器會配置健康檢查,通過LB 不斷輪詢 Chproxy 服務器将流量定向到健康服務器,并在主服務器不可用的情況下切換到故障轉移服務器。
2. 代理Chproxy 是為 ClickHouse 數據庫開發的開源第 3 方代理層。
Chproxy 為我們提供以下好處:
Chproxy 進程在我們的服務器上會配置為自定義 Linux 服務,在出現任何故障時會自動啟動。
3. ClickHouse 集群ClickHouse 集群是平台的核心和靈魂,是一個共享集群,我們的許多客戶會在不同的場景下應用它。
此類系統處理 TB 級數據非常常見。在這種情況下,在多個節點之間拆分數據,俗稱為Sharding。分片可以水平擴展集群,并結合多台服務器的功能來共同處理資源密集型查詢。
為了确保高可用性,可創建每個分片的跨 DC 副本。這樣可以保證服務器或整個 DC 的故障不會導緻平台崩潰。異步複制是使用 ClickHouse 平台的 Replicated 引擎實現的。
在我們平台的初始階段,我們曾經在服務器節點之間進行分片循環複制的方法。ClickHouse 集群中的每個節點都攜帶一個分片的原始數據以及另一個分片的副本。但是,采用這種方法會對讀取查詢産生不可預知的影響。
為了解決這個問題,我們決定在集群中分離服務于讀取和寫入流量的副本。執行複雜寫入操作的 ETL 作業的所有流量在寫入集群中的副本之間共享。寫入副本的數據由 ClickHouse 異步複制到讀取副本。使用 ClickHouse 中的first_or_random負載平衡,讀取查詢由讀取集群中的副本處理,但是,如果一個分片的讀取副本不可用,它将由寫入集群中的副本處理。
總的來說,這種方法提供了以下好處:
ClickHouse 使用 Apache ZooKeeper 執行數據複制。ZooKeeper 存儲副本的元數據,用于确保所有副本同步。
ZooKeeper 集成由運行在不同機器上的三個 ZooKeeper 服務器創建,确保 ZooKeeper 服務在任何一個 ZooKeeper 服務器崩潰的情況下可用。
結論這種平台架構設計使客戶或者業務用戶能夠在幾秒鐘内根據海量數據做數字決策。同時兼顧了高度可用且易于擴展。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!