最近有很多朋友拿著一篇關於「ceph運維那些坑」的文章來找我,起初我並沒有在意,畢竟對於一個「新物種」來說,存在質疑是再正常不過的。不過,當後來陸續有更多的合作夥伴甚至圈內同行來問我如何看待這篇文章時,我覺得作為一名Ceph開發和運維的技術者,理應站出來為Ceph說點什麼。

首先,原作者分析Ceph運維中遇到的問題是真實存在的,甚至在實際的運維過程中還出現過其他更複雜的問題。因為最初的Ceph只是社區提供的一套開源版,因而想要實現產品化需要趟過很多次「坑」,就像最早的安卓系統一樣。

我想任何產品在一開始都難以做到十全十美,因為技術本身就是在發現問題與解決問題的道路上不斷前進發展的。不過,在這裡我想澄清的事實是:連初涉Ceph的運維人員都能發現的問題,研究Ceph多年的資深技術人員們肯定也早已發現。接下來我就根據那篇文章中提到的坑,來說一說在實際產品化過程中我們是如何解決它們的。

一.擴容問題

Ceph本身基於Crush演算法,具備了多種數據複製策略,可以選擇在磁碟、主機、機櫃等等位置附著。例如:如果採取3副本的數據保護策略,就可以通過複製策略來決定這3個副本是否同時分佈在不同的磁碟、不同的主機、不同的隔離域、不同的機櫃等位置來保證部分硬體故障後數據安全性和服務運行不中斷。Ceph底層是用資源池(POOL)來實現數據邏輯隔離,往往我們會出現因容量或性能不足需要對資源池進行擴容的問題,但是在容量擴容過程中,勢必會帶來進行數據重新平衡的要求。Ceph中數據以PG為單位進行組織,因此當數據池中加入新的存儲單元(OSD)時,通過調整OSDMAP會帶來數據重平衡。正如文章所提到的,如果涉及到多個OSD的擴容是可能導致可用PG中OSD小於min_size,從而發生PG不可用、IO阻塞的情況。為了盡量避免這種情況的出現,只能將擴容粒度變小,比如每次只擴容一個OSD或者一個機器、一個機櫃(主要取決於存儲隔離策略),但是這樣註定會帶來極大的運維工作量,甚至連擴容速度可能都趕不上數據增長速度。

正是針對這個問題,元核雲分散式存儲產品在運維管理平臺層面進行了優化。擴容發生時,運維人員只需要將待擴容的伺服器信息以及策略加入到運維管理平臺中,後面的事情都由運維管理平臺進行自動化處理。簡單來說,運維平臺會根據PG的狀態和待擴容OSD資源,尋求一個最優的擴容方式,即在不影響PG可用性的情況下,循序漸進地進行OSD擴容,直到擴容動作完全完成為止。

例如:在三副本的場景下,當某一個PG加入兩個OSD後,運維平臺會通過演算法把擴容分為兩次完成,每次僅擴容一個OSD,這樣就能保證PG的min_size始終大於1。而這整個過程完全由運維平臺自動完成,對運維管理員完全透明。

二.數據遷移過程中的IO爭用問題

文章中提到的第二個問題主要是講: 在頻繁數據遷移過程中帶來的IO爭用問題。當集羣規模變大後,硬碟損壞、PG數量擴充可能會變得常態化。

以我們的運維經驗來看,客戶大概每年都會有幾次的相關運維操作。在我們運維過的所有集羣中,最大的超過了1000個存儲節點,而在這過程中會遭遇到每個月損壞1-2臺硬碟、3個月左右進行一次集中換盤的情況。這些運維操作都需要通過數據遷移來進行數據恢復,數據恢復過程中會對硬碟的IO進行爭用,如何有效、智能地控制並恢復IO,並做到使業務IO不受影響,是Ceph運維管理的核心工作。

在元核雲自動化運維管理平臺中,會採用時間策略、流量策略來控制數據恢復的速率。我們會在業務的高峯期,8:00——18:00這一時間段內使用某種流量恢復策略,在業務的低峯期,18:00——第二天8:00這一時間段使用另一種流量恢復策略。在流量恢復策略中,可以基於磁碟的IO利用率情況,來動態調整數據流量恢復速率,比如說設置恢複流量佔用IO利用率閾值不能超過50%,則總會保證不因恢複流量導致IO的利用率超過50%,當業務IO佔比越大,恢復IO佔比就越小,當業務IO利用率超過50%時,則停止恢復IO。此種方式可以靈活有效地利用閑時IO,在不影響業務IO的情況下,快速完成數據遷移恢復。

三.PG數量調整問題

在解決了數據遷移過程中的PG可用性問題和IO爭用問題後,關於文章中提到的PG數量調整問題自然也就解決了。

數據遷移本身是一個常態化的過程,當控制了數據在遷移過程中的不良影響,同時在OSDMap變化過程中,PG始終能夠保持可用狀態,那麼就並不會像那篇文章中所說的那樣,調整PG數量會帶來災難性的後果。

何況,從實際上看來PG的調整確實也不是一個經常性的動作。

四.集羣利用率問題

文章中提到的存儲成本問題主要是講集羣可用率問題,即:Ceph集羣規模增大後,偽隨機演算法導致了存儲資源分佈不均衡,磁碟利用率方差過大的問題。

其實要做到保證每塊盤的數據均衡,這是一個比較複雜的過程。因為首先要確保數據分佈能夠遵循每個Pool的Rule-Set規則,同時又要保證每個Pool對應的PG較為合理的分佈在每個OSD中(因為有些Pool是放元數據的,並不會承載大量的數據),同時還要保證當PG數量發生變化時不會發生災難性的數據遷移(stable_mod)。

元核雲在Ceph基礎上開發了智能數據分佈管理特性,它能通過預先設定好的計算模型,反覆迭代計算,預測出一個最優的數據分佈,在現實運維經驗中,我們可以保證OSD之間的數據容量之差不超過2%,存儲集羣空間可用率達到95%以上。此特性功能會對因集羣初始化、擴容、硬體故障等原因導致的數據遷移後的數據失衡進行管控,實現較優的空間使用率。

五.運維複雜度問題

正如文章所提到的,Ceph本身是一個十分複雜的體系,要做到穩定運維非常看重團隊的實力。

元核雲除了對Ceph核心進行了深度優化,還提供了一套支持跨數據中心多Ceph集羣的自動化運維管理平臺,能極大提高運維效率、降低Ceph存儲集羣運維成本。目前我們通過這套運維平臺,做到了五個數據中心上千個節點的存儲集羣,每年僅需一個運維人力的案例。

總而言之,對於那篇文章中提到的「坑」,其實我們早已做好了充分的預防策略。紙上談兵都是容易的,實際操作卻比之複雜千萬倍。怎樣才能跳出人云亦云的圈子,真正認識到事實的本來面目,還是需要有長久的實踐操作經驗纔能夠看清楚。

元核雲主導負責的某大型金融集團近50PB+的分散式存儲方案,屬於國內金融行業最大的Ceph存儲案例,達到了4年的軟體存儲產品本身零故障記錄,期間也經歷了各種網路異常、伺服器和硬碟故障、伺服器擴容、操作系統打補丁和升級、存儲軟體打補丁和升級等運維問題,仍然完好地維護了存儲數據。軟體定義存儲軟體系統屬於工程型項目,需要大規模的生產實踐經驗和時間積累,遇「坑」填「坑」,才能保證其產品的成熟度。存儲畢竟是底層核心的關鍵技術產品,數據的最後一道防線,如果要正式進行生產應用,還是建議大家使用成熟的商業化Ceph存儲產品。


以上部分圖片源於網路,若涉侵權,請聯繫我方刪除


推薦閱讀:
相關文章