博客 / 詳情

返回

VictoriaMetrics 中文教程(10)集羣版簡介

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。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.