你是否在自建Ceph 集群中,犯過(guò)這五個(gè)錯(cuò)誤?
本文轉(zhuǎn)載自微信公眾號(hào)「新鈦云服」,作者祝祥。轉(zhuǎn)載本文請(qǐng)聯(lián)系新鈦云服公眾號(hào)。
Ceph是一個(gè)開(kāi)源的分布式對(duì)象,塊和文件存儲(chǔ)。該項(xiàng)目誕生于2003年,是塞奇·韋伊的博士論文的結(jié)果,然后在2006年在LGPL 2.1許可證發(fā)布。Ceph已經(jīng)與Linux內(nèi)核KVM集成,并且默認(rèn)包含在許多GNU / Linux發(fā)行版中。
當(dāng)前的工作負(fù)載和基礎(chǔ)設(shè)施需要不同的數(shù)據(jù)訪問(wèn)方法(對(duì)象,塊,文件),Ceph支持所有這些方法。它旨在具有可擴(kuò)展性,并且沒(méi)有單點(diǎn)故障。它是一款開(kāi)源軟件,可以在生產(chǎn)環(huán)境,通用硬件上運(yùn)行。
RADOS (可靠的自動(dòng)分布式對(duì)象存儲(chǔ))是Ceph的核心組件。RADOS對(duì)象和當(dāng)今流行的對(duì)象之間存在著重要的區(qū)別,例如Amazon S3,OpenStack Swift或Ceph的RADOS對(duì)象網(wǎng)關(guān)提供的對(duì)象。從2005年到2010年,對(duì)象存儲(chǔ)設(shè)備(OSD)成為一個(gè)流行的概念。這些OSD提供了強(qiáng)大的一致性,提供不同的接口,并且每個(gè)對(duì)象通常駐留在單個(gè)設(shè)備上。
Ceph分為三大塊,分別是對(duì)象存儲(chǔ)、塊設(shè)備存儲(chǔ)和文件系統(tǒng)服務(wù)。在實(shí)際運(yùn)營(yíng)中,如何發(fā)現(xiàn)和解決關(guān)鍵的存儲(chǔ)問(wèn)題?尤其是隨著規(guī)模的擴(kuò)大與業(yè)務(wù)的幾何級(jí)數(shù)的擴(kuò)張,存在運(yùn)維中不可預(yù)測(cè)的問(wèn)題,如何提前預(yù)判和防治?
在我們的大量的客戶案例中,我們遇到了,同時(shí)也幫客戶規(guī)避了大量的風(fēng)險(xiǎn)。如果您要自建Ceph集群,以下是一些需要考慮的錯(cuò)誤配置場(chǎng)景。
錯(cuò)誤 #1 – 選擇不佳的日志或緩存硬盤
在構(gòu)建 Ceph 集群時(shí),尤其是帶有 HDD 的集群時(shí),您需要使用一個(gè)SSD作為日志或者緩存,它通常用來(lái)存儲(chǔ)一些關(guān)鍵的數(shù)據(jù)(例如預(yù)寫日志和元數(shù)據(jù)又或者是bluestore中的wal與db)。這也是為大多數(shù)存儲(chǔ)場(chǎng)景提高性能的最經(jīng)濟(jì)有效的方法。
通常,大部分人會(huì)使用商業(yè)品牌服務(wù)器(用于啟動(dòng)引導(dǎo)盤)的 M.2 SATA 接口作為日志驅(qū)動(dòng)盤。問(wèn)題是大多數(shù) M.2 驅(qū)動(dòng)盤僅推薦用于安裝操作系統(tǒng),從而用于系統(tǒng)啟動(dòng),并且只有 1DWD(每天寫入量)范圍內(nèi)的耐用性。尤其是對(duì)于filestore而言, Ceph 使用預(yù)寫日志和元數(shù)據(jù)的方式,這些可能很快就會(huì)耗盡。
如果您要堅(jiān)持使用 M.2 端口,有些設(shè)備廠商可以定制化調(diào)整配置,從而增加ssd的讀寫耐用性。
錯(cuò)誤 #2 – OSD使用 RAID
在某些情況下,這比較難解決的,尤其是對(duì)于使用英特爾至強(qiáng)架構(gòu)的非密集型的 HDD 服務(wù)器。然而,RAID 功能在 Ceph 集群的上下文中沒(méi)有過(guò)多的作用。如果您必須要使用 RAID的話,請(qǐng)將其配置為 RAID-0。當(dāng)然,在理想的情況下,您也可以找到一個(gè)以直通模式運(yùn)行的 RAID 控制器(JBOD,磁盤直通)。
如果您無(wú)法擺脫使用 RAID 控制器,您還應(yīng)該注意以下兩點(diǎn):
- 禁用寫緩存(首選)。
- 有一個(gè)電池支持的緩存。
不然,您肯定會(huì)遇到問(wèn)題。我們?cè)谏a(chǎn)環(huán)境中已經(jīng)遇到過(guò)很多次了。
另外,附帶說(shuō)明一下,這些服務(wù)器還往往帶有很長(zhǎng)的電纜,這代表了額外的物理故障點(diǎn)。大部分情況下,故障都會(huì)很容易處理,但在某些時(shí)候,線纜松動(dòng)的情況下,它會(huì)造成維護(hù)方面的一些麻煩。
錯(cuò)誤 #3 – 將 MON 守護(hù)進(jìn)程與 OSD 放在同一臺(tái)主機(jī)上
在Ceph正常運(yùn)行的 99% 場(chǎng)景中,監(jiān)控服務(wù)的負(fù)載壓力很小。但是,當(dāng)您的集群處于繁忙或者故障時(shí),例如硬件出現(xiàn)故障以及數(shù)據(jù)重新均衡時(shí),它的工作將變的異常繁忙以及重要。此時(shí),您的監(jiān)視器MON會(huì)清理您的集群數(shù)據(jù),以確保您返回的內(nèi)容與您存儲(chǔ)的內(nèi)容一致。畢竟,Ceph 的最核心的宗旨就是“我們不會(huì)丟失數(shù)據(jù)”。在故障期間,監(jiān)視器會(huì)執(zhí)行校驗(yàn)和,這需要大量的計(jì)算能力。它還可能執(zhí)行將一個(gè)OSD遷移數(shù)據(jù)到另外一個(gè)OSD的任務(wù),此時(shí)您的 OSD 也會(huì)更加繁忙地工作。最后,它負(fù)責(zé)一些選舉的任務(wù),這就是為什么通常有奇數(shù)個(gè)監(jiān)視器的原因。這里記錄(https://docs.ceph.com/en/latest/rados/configuration/mon-config-ref/)是“Ceph 監(jiān)視器經(jīng)常將其數(shù)據(jù)從內(nèi)存刷新到磁盤,干擾 Ceph OSD 守護(hù)進(jìn)程的工作負(fù)載”的問(wèn)題。
因此,當(dāng)您構(gòu)建一個(gè)最小規(guī)模的集群(通常為 3 臺(tái)主機(jī))并且其中一個(gè)出現(xiàn)故障時(shí),整個(gè)集群也會(huì)崩潰,后面我們會(huì)簡(jiǎn)單講解一下。
最好的解決方案是配置單獨(dú)的監(jiān)視器和存儲(chǔ)服務(wù)守護(hù)程序。在實(shí)際生產(chǎn)中,大部分情況下,我們都沒(méi)有從MON與OSD混合放在同一臺(tái)主機(jī)中獲得多少好處。如果您擔(dān)心硬件資源的浪費(fèi),一種潛在的替代方法是將它們放在虛擬機(jī)中。這也是一個(gè)更好的選擇,即獨(dú)立了服務(wù),也節(jié)省了資源。
錯(cuò)誤 #4 – 錯(cuò)誤地設(shè)置 min_size 和副本大小
將 min_size 設(shè)置為 1 并將副本大小設(shè)置為 2 是大部分人都喜歡的配置 。它看起來(lái)類似于服務(wù)器的 RAID1,因?yàn)?,這樣可以讓系統(tǒng)在副本降級(jí)的狀態(tài)下運(yùn)行,并且在數(shù)據(jù)副本恢復(fù)的過(guò)程中依然保留比較好的效率。
但請(qǐng)記住——Ceph 不希望您丟失數(shù)據(jù)。這意味著當(dāng)你讀時(shí),它會(huì)檢查以確保你寫的數(shù)據(jù)仍然是你寫的。同時(shí),這些結(jié)果都需要在多個(gè)副本之間進(jìn)行同步與比較。當(dāng)沒(méi)有副本可供比較時(shí),Ceph 認(rèn)為您不能再信任何 read ,它即不會(huì)讓你寫也不會(huì)再讓你讀。整個(gè)系統(tǒng)都被鎖定了。因此,如果此時(shí)隨便一塊磁盤脫機(jī),即使是暫時(shí)的,集群也將停止訪問(wèn)與使用故障 OSD 關(guān)聯(lián)的歸置組。同樣,使用 min_size 1,很容易出現(xiàn)重大問(wèn)題,它沒(méi)有法子保證Ceph數(shù)據(jù)的一致性。
如果您需要增加可用存儲(chǔ)容量,另一種選擇是使用糾刪碼。您可能會(huì)犧牲一些性能,但可以獲得更高的存儲(chǔ)效率,而不會(huì)冒大量數(shù)據(jù)無(wú)法訪問(wèn)的風(fēng)險(xiǎn)。
錯(cuò)誤 #5 – 高密的服務(wù)器更好
更密集的服務(wù)器、更密集的驅(qū)動(dòng)器、更密集的 CPU – 這樣您就可以降低服務(wù)器、PCB、CPU 和網(wǎng)絡(luò)的成本,對(duì)嗎?
事實(shí)證明,當(dāng)您在集群中使用基于復(fù)制或糾刪碼的數(shù)據(jù)保護(hù)機(jī)制時(shí),最好將數(shù)據(jù)帶寬分布范圍擴(kuò)大。在 CPU 中——更密集意味著更多的時(shí)鐘周期浪費(fèi)和更大的功率預(yù)算,這會(huì)對(duì)您的機(jī)柜和功率容量產(chǎn)生額外影響。對(duì)于 25KW 功率的機(jī)架來(lái)說(shuō)可能沒(méi)什么大不了的,但是當(dāng)您的機(jī)架功率低于 8KW 時(shí)絕對(duì)是一個(gè)問(wèn)題,這也是大部分機(jī)柜的標(biāo)準(zhǔn)水平。
但最大的問(wèn)題是故障范圍。假設(shè)您使用了3臺(tái)高密的服務(wù)器來(lái)構(gòu)建了一個(gè)最小可行集群。每臺(tái)有最高配置的60快盤,每個(gè)盤的容量為 18TB。如果從單個(gè)osd盤中恢復(fù)丟失的數(shù)據(jù)需要 1 天,那么從丟失的一臺(tái)服務(wù)器中恢復(fù)數(shù)據(jù)將需要 2 個(gè)月。哪怕是遷移物理磁盤也不起作用,因?yàn)?OSD 必須在新服務(wù)器中重新創(chuàng)建。在那個(gè)時(shí)候,如果您丟失另一個(gè)盤或服務(wù)器,這時(shí)候可能就會(huì)擴(kuò)大故障,甚至丟失數(shù)據(jù)。
總結(jié)
擁有強(qiáng)大而活躍的 Ceph 用戶社區(qū)是保持Ceph項(xiàng)目持續(xù)發(fā)展的關(guān)鍵。但是這并不意味著大家可以放心的使用Ceph。反而,我們更應(yīng)該關(guān)注Ceph的使用場(chǎng)景以及相關(guān)的運(yùn)維方案。架構(gòu)以及安裝一個(gè)安全可靠的Ceph集群也變的至關(guān)重要。
Ceph確實(shí)有無(wú)限擴(kuò)容的能力,但需要良好的初始規(guī)劃,否則擴(kuò)容過(guò)程也會(huì)出現(xiàn)一些問(wèn)題。
在某些場(chǎng)景下,Ceph有些浪費(fèi)硬件,成本核算時(shí)要考慮多一些。因此,如何合理去配置副本數(shù),OSD數(shù)至關(guān)重要。不合理的規(guī)劃除了資源浪費(fèi)外,也可能導(dǎo)致性能問(wèn)題,尤其是在副本恢復(fù)或者數(shù)據(jù)均衡的時(shí)候。
Ceph的優(yōu)化方式很多,但一定要選擇有效且合理的優(yōu)化方式。