匯出器:偵測微事故以改善存儲性能

09.27.2019  - 作者  在 簡易代管

開源軟體,透明化和基礎架構是 Gandi 本質的三大概念。我們近期的其中一個目標就是希望能更快地偵測到微小的問題,進而提高我們為用戶提供的服務品質。

Nicolas Belouin,代管團隊的系統工程師,他開發了一些工具以更好地監控 Gandi 的存儲設備性能。

如果您有興趣,您們可以在 Gandi 的 GitHub 上找到這些開源工具。

Gandi 存儲設備基礎架構的摘要

Gandi 存儲設備主要提供給兩個環境使用:一個是 IaaS,另一個是 PaaS。 兩者都是以 FreeBSD 系統為底的儲存技術 (filers) 為基礎,該系統會儲存每個存儲卷 (硬碟),就如同 ZFS 空間一樣。

提供給兩種不同的用戶使用:

  • Gandi 雲 (IaaS) 服務使用的是 iSCSI。這使我們可以直接提供給用戶使用『區塊』。透過這種方式,我們的客戶能夠使用他們認為合適的儲存方式。在 FreeBSD 上, 管理該服務的程式稱為 “CTLD”。
  • Gandi Simple Hosting 服務則是透過 NFS 的方式使用讓用戶使用檔案系統。在這裡,我們使用的是 “Ganesha” 去作為 NFS 的服務。

為什麼要使用這些匯出器呢?

雖然 Gandi 之前已經擁有能夠偵測主要事故 (例如:存儲設備無回應) 的工具,但為了能夠監控這些不同的服務 (CTLD 或是 Ganesha) 而選擇使用匯出器。然而,實際上並沒有任何一個簡單的方法可以偵測這些在微小或是極微小的事故(像是:存儲設備的性能下降)。因此需要一個系統在客戶資料數據傳遞異常而可能導致事故的時候通知我們。現階段的目標是在存儲設備上不再有讀取/寫入操作的時候偵測出問題。雖然服務程式依然是啟用的,但有時會處於不穩定的狀態。

請注意,我們不會直接監控每個檔案系統中的每個空間,因為客戶可能有幾個儲存空間但是不執行任何操作。如果『操作』的數量下降到太低或突然間下降太多,就會進行檔案系統監控。

而這就是 Ganesha 和 CTLD 匯出器的目標:能夠更好、更快速地偵測到微小問題,以提高我們為用戶提供的服務品質

此外,還有一些額外效果:

  • 對檔案系統的狀態有更好地了解
  • 輕鬆取得那些以前較不易取得的複雜數據,例如檔案系統正在使用的儲存空間的實際數量和時間
  • 更快地預測到何時檔案系統會達到飽和

最後,關於這些匯出器的選擇,我們選擇的是 Prometheus,因為它也是 Gandi 內部使用的匯出器。

那這些匯出器又是如何運作呢?

所有匯出器都是以 Golang 撰寫。可以使用靜態編譯的方式,簡化部署的相依性。它擁有 Prometheus 的函式庫,因此可以輕鬆地與其它技術整合以偵測問題。以 Ganesha NFS 服務器來說,使用 D-Bus 匯出統計數據的整合就相對簡單。

對 CTLD 而言,匯出器使用一些呼叫系統以取得資訊。

具體來說,匯出器都遵循一個相同的原則:它們要在特定的標準埠上建立 HTTP 伺服器。Prometheus 計畫有一個 Wiki 頁面,每個匯出器的建立者都將在那裡註冊他們要使用於項目的埠,以協調社群。

這樣一來,它可以在『保留』埠上進行偵聽。當它收到請求後,會去查詢底層系統 (Ganesha 或 CTLD)、接著計算數據,然後將資料以統一格式發送給請求者。

匯出器安裝在所有存儲設備上,並在所選的標準埠上進行資料傳遞。

數據被重新傳送回 Prometheus 服務,該服務會定期取得要收集的來源列表。它將去查詢所有檔案系統,以取得整個存儲基礎架構上的數據。最後,這些數據會被呈現在我們的 Grafana 上, 讓團隊能夠使用可視儀表板。

我們目前正在努力建立警報功能。自三個月前實施以來,它已經成功分析多起事故。

Xen 匯出器

為了更好地追踪我們的 PaaS 和 IaaS 解決方案中 “主機” 的使用情況,代管團隊也致力於研究 Xen 匯出器。為了運行我們的 Cloud 資源計費服務,我們已經具有關於虛擬機器的數據,然而我們仍然沒有足夠關於我們主機伺服器運行狀況的數據。

由於安全要素,Gandi 不再在其 IaaS 處理器上使用超執行緒。為了衡量其影響,我們還需要以更精確的方式追蹤性能。

Xen 匯出器的角色是追蹤有關主機和虛擬機器的所有數據。目前有一種很好的 Xen 匯出器,但是它適用於 Xen 伺服器( Citrix 發行的 Xen 的商業版本),而我們使用的則是 libXL。

我們因此開發 Xen 匯出器以與 libXL 協同運作。

該匯出器也是使用 Go 建立的,因為 Xen 為 libXL 提供 Go 介面。 儘管這個介面目前有一定的限制,但已經足以滿足匯出器的需求。

最後,如果您對 Xen 匯出器有興趣,請注意,該匯出器目前不使用標準 Xen 進行編譯,因為它需要我們對 Xen 項目進行某些補充,而這些補充仍在等待發佈。

Gandi 在 GitHub 上的項目

開源軟體是 Gandi DNA 的一部分

透過公開我們的計畫,其它具有相同問題的公司或個人用戶也可以使用我們工作的成果,並為改善其功能做出貢獻。另一目標則是建立一個貢獻者的社群,以使項目能夠繼續地在 Gandi 內獨立進行。

通常我們會一直努力拉近這些匯出器與社群之間的距離。我們在網路上發現許多沒有完全遵守規則的匯出器,也因為這樣限制了它們重複使用和共享的能力。

這就是為什麼要使其容易重複使用,Gandi 嘗試盡可能地保持標準,並始終保持最大的彈性。

詞彙表

有什麼相關問題想要問我們的 Hosting 團隊嗎?請不吝於文章下方留言或是透過後方連結與我們聯繫:https://help.gandi.net

點選連結,了解更多關於 Gandi 的 Simple Hosting 服務