VictoriaMetrics 中文教程(10)叢集版介紹

SRETalk發表於2024-10-29

VictoriaMetrics

VictoriaMetrics 中文教程系列文章:

  • VictoriaMetrics 中文教程(01)簡介
  • VictoriaMetrics 中文教程(02)安裝
  • VictoriaMetrics 中文教程(03)如何配置 Prometheus 使其把資料遠端寫入 VictoriaMetrics
  • VictoriaMetrics 中文教程(04)對接 Grafana 同時介紹 vmui
  • VictoriaMetrics 中文教程(05)對接各類監控資料採集器
  • VictoriaMetrics 中文教程(06)容量規劃
  • VictoriaMetrics 中文教程(07)高可用(High availability)方案
  • VictoriaMetrics 中文教程(08)VictoriaMetrics 的儲存
  • VictoriaMetrics 中文教程(09)VictoriaMetrics 18 條 Troubleshooting 建議和提示

叢集版簡介

VictoriaMetrics 叢集版也是開源的,但是維護更復雜,畢竟元件更多。如果資料量低於每秒​​一百萬個資料點,建議使用單節點版本,而不是叢集版本。單節點版本可以完美地適應 CPU 核心數、RAM 和可用儲存空間。與叢集版本相比,單節點版本更易於配置和操作,因此在選擇叢集版本之前請三思。

突出的功能

  • 支援單節點版本的所有功能。
  • 效能和容量水平擴充套件。
  • 支援時間序列資料的多個獨立名稱空間(又稱多租戶)。
  • 支援複製 replication。

VictoriaMetrics 架構概覽

VictoriaMetrics 叢集由以下服務組成:

  • vmstorage - 儲存原始資料並返回給定標籤過濾器在給定時間範圍內的查詢資料
  • vminsert - 接受提取的資料並根據指標名稱及其所有標籤的一致性雜湊將其分佈在 vmstorage 節點之間
  • vmselect - 透過從所有配置的 vmstorage 節點獲取所需資料來執行查詢

每個服務都可以獨立擴充套件,並且可以在最合適的硬體上執行。vmstorage 節點彼此不瞭解,彼此不通訊,也不共享任何資料。這是一個無共享架構。它提高了叢集可用性,並簡化了叢集維護以及叢集擴充套件。

VictoriaMetrics-叢集架構

請注意,儘管 vmselect 是無狀態的,但仍需要一些磁碟空間(幾 GB)用於臨時快取。有關更多詳細資訊,請參閱 -cacheDataPath 命令列標誌。

多租戶

VictoriaMetrics 叢集支援多個相互隔離的租戶(又稱名稱空間)。租戶透過 accountID 或 accountID:projectID 進行標識,這些標識放在寫入和讀取的請求 URL 中。有關 VictoriaMetrics 租戶的一些事實:

  • 每個 accountID 和 projectID 都由 [0 .. 2^32) 範圍內的任意 32 位整數標識。如果缺少 projectID,則自動將其分配為 0。預計有關租戶的其他資訊(例如身份驗證令牌、租戶名稱、限制、會計等)將儲存在單獨的關聯式資料庫中。此資料庫必須由位於 VictoriaMetrics 叢集前面的單獨服務(例如 vmauth 或 vmgateway)管理。
  • 當第一個資料點寫入給定租戶時,會自動建立租戶。
  • 所有租戶的資料均勻分佈在可用的 vmstorage 節點上。當不同租戶的資料量和查詢負載不同時,這可保證 vmstorage 節點之間的負載均勻。
  • 資料庫效能和資源使用情況與租戶數量無關。它主要取決於所有租戶中活躍時間序列的總數。如果某個時間序列在過去一小時內至少收到一個樣本,或者在過去一小時內受到查詢的影響,則該時間序列被視為活躍時間序列。
  • 可以透過 http://<vmselect>:8481/admin/tenants url獲取已註冊租戶列表。
  • VictoriaMetrics 透過指標公開各個租戶統計資料。

很多人知道,叢集版本的讀寫地址是:

  • 讀:http://{vmselect}:8481/select/0/<suffix>,比如 http://{vmselect}:8481/select/0/prometheus/api/v1/query
  • 寫:http://{vminsert}:8480/insert/0/<suffix>,比如 http://{vminsert}:8480/insert/0/prometheus/api/v1/write

這裡的 0 是 accountID,<suffix> 是具體的路徑。0 表示 accountID 為 0,projectID 也為 0,即預設租戶。

叢集版啟動

最小叢集必須包含以下節點:

  • 具有 -retentionPeriod-storageDataPath 命令列引數的單個 vmstorage 節點
  • 帶有 -storageNode=<vmstorage_host> 的單個 vminsert 節點
  • 帶有 -storageNode=<vmstorage_host> 的單個 vmselect 節點

為了實現高可用性,建議為每個服務執行至少兩個節點。在這種情況下,當單個節點暫時不可用時,叢集將繼續工作,其餘節點可以處理增加的工作負載。當底層硬體發生故障、軟體升級、遷移或其他維護任務期間,該節點可能會暫時不可用。

最好執行許多小型 vmstorage 節點而不是少數大型 vmstorage 節點,因為當某些 vmstorage 節點暫時不可用時,這可以減少剩餘 vmstorage 節點上的工作負載增加。

必須在 vminsert 和 vmselect 節點前放置一個 http 負載均衡器,例如 vmauth 或 nginx。它必須根據 url 格式包含以下路由配置:

  • /insert 開頭的請求必須路由到 vminsert 節點上的埠 8480。
  • /select 開頭的請求必須路由到 vmselect 節點上的埠 8481。

可以透過在相應節點上設定 -httpListenAddr 來改變埠。

只讀模式

-storageDataPath 指向的目錄包含的可用空間少於 -storage.minFreeDiskSpaceBytes 時,vmstorage 節點會自動切換到只讀模式。vminsert 節點停止向此類節點傳送資料,並開始將資料重新路由到剩餘的 vmstorage 節點。

當 vmstorage 進入只讀模式時,它會將 http://vmstorage:8482/metrics 上的 vm_storage_is_read_only 指標設定為 1。當 vmstorage 未處於只讀模式時,該指標設定為 0。

Replication 和資料安全

預設情況下,VictoriaMetrics 建議使用者把 -storageDataPath 指向的高可用的底層儲存(例如 Google 計算持久磁碟),從而保證資料的永續性。如果由於某種原因無法使用複製的持久持久磁碟,VictoriaMetrics 支援應用程式級複製。

可以透過將 -replicationFactor=N 命令列標誌傳遞給 vminsert 來啟用複製。這將指示 vminsert 在 N 個不同的 vmstorage 節點上儲存每個攝取樣本的 N 個副本。這保證瞭如果最多 N-1 個 vmstorage 節點不可用,所有儲存的資料仍然可供查詢。

-replicationFactor=N 命令列標誌傳遞給 vmselect,指示它如果在查詢期間少於 -replicationFactor 的 vmstorage 節點不可用,則不要將響應標記為部分。

叢集必須包含至少 2*N-1 個 vmstorage 節點,其中 N 是複製因子,以便在 N-1 個儲存節點不可用時維持新提取資料的給定複製因子。

VictoriaMetrics 以毫秒精度儲存時間戳,因此在啟用複製時必須將 -dedup.minScrapeInterval=1ms 命令列標誌傳遞給 vmselect 節點,以便它們可以在查詢期間對從不同 vmstorage 節點獲得的重複樣本進行去重。如果從配置相同的 vmagent 例項或 Prometheus 例項將重複資料推送到 VictoriaMetrics,則必須根據去重文件將 -dedup.minScrapeInterval 設定為 scrape 配置中的 scrape_interval

請注意,複製無法避免災難,因此建議定期進行備份。

請注意,複製會增加資源使用率(CPU、RAM、磁碟空間、網路頻寬),最多可增加 -replicationFactor=N 倍,因為 vminsert 將傳入資料的 N 份副本儲存到不同的 vmstorage 節點,而 vmselect 需要在查詢期間對從 vmstorage 節點獲得的複製資料進行重複資料刪除。因此,把複製交由 -storageDataPath 指向的底層複製持久儲存(如 Google Compute Engine 持久磁碟)更具成本效益,這樣可以防止資料丟失和資料損壞。它還提供一致的高效能,並且可以在不停機的情況下調整大小。基於 HDD 的持久磁碟應該足以滿足大多數用例。建議在 Kubernetes 中使用持久的複製持久卷。

Deduplication

VictoriaMetrics 的叢集版本以與單節點版本相同的方式支援資料重複資料刪除。唯一的區別是,當同一時間序列的樣本和樣本重複最終位於不同的 vmstorage 節點上時,無法保證重複資料刪除。這可能發生在以下情況下:

  • 當新增/刪除 vmstorage 節點時,時間序列的新樣本將被重新路由到另一個 vmstorage 節點;
  • 當 vmstorage 節點暫時不可用時(例如,在重新啟動期間)。然後新的樣本被重新路由到剩餘的可用 vmstorage 節點;
  • 當 vmstorage 節點沒有足夠的容量來處理傳入的資料流時,vminsert 會將新樣本重新路由到其他 vmstorage 節點。

建議為 vmselect 和 vmstorage 節點設定相同的 -dedup.minScrapeInterval 命令列標誌值,以確保查詢結果的一致性,即使儲存層尚未完成重複資料刪除。

總結

VictoriaMetrics 叢集版相比單機版,更適合大規模的監控資料儲存和查詢。但是,叢集版的維護和運維成本更高,需要更多的硬體資源。在選擇叢集版之前,請三思。VictoriaMetrics 支援 replication,掛掉部分節點不影響資料安全,不過,建議不要開啟,而是交由雲盤等底層儲存來保證資料的永續性。如果沒有條件使用雲端儲存,再考慮開啟 replication。

相關文章