自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ceph萬字總結(jié)|如何改善存儲性能以及提升存儲穩(wěn)定性

存儲 存儲軟件
通過本文,用戶能確定Ceph是否滿足自身的應用需求。在本文中,我們將深入研究Ceph的起源,研究其功能和基礎(chǔ)技術(shù),并討論一些通用的部署方案和優(yōu)化與性能增強方案。同時本文也提供了一些故障場景以及對應的解決思路。

 [[341135]]

本文轉(zhuǎn)載自微信公眾號「新鈦云服」,作者祝祥  。轉(zhuǎn)載本文請聯(lián)系新鈦云服公眾號。 

「Ceph – 簡介」

Ceph是一個即讓人印象深刻又讓人畏懼的開源存儲產(chǎn)品。通過本文,用戶能確定Ceph是否滿足自身的應用需求。在本文中,我們將深入研究Ceph的起源,研究其功能和基礎(chǔ)技術(shù),并討論一些通用的部署方案和優(yōu)化與性能增強方案。同時本文也提供了一些故障場景以及對應的解決思路。

背景

Ceph是一個開源的分布式存儲解決方案,具有極大的靈活性和適應性。Ceph項目最早起源于Sage就讀博士期間的論文(最早的成果于2004年發(fā)表),并隨后貢獻給開源社區(qū)。在經(jīng)過了數(shù)年的發(fā)展之后,目前已得到眾多云計算廠商的支持并被廣泛應用。RedHat及OpenStack都可與Ceph整合以支持虛擬機鏡像的后端存儲。

Ceph在2014年被RedHat收購后,一直由RedHat負責維護。Ceph的命名和UCSC(Ceph 的誕生地)的吉祥物有關(guān),這個吉祥物是 “Sammy”,一個香蕉色的蛞蝓,就是頭足類中無殼的軟體動物。這些有多觸角的頭足類動物,是對一個分布式文件系統(tǒng)高度并行的形象比喻。自從2012年7月3日發(fā)布第一個版本的Argonaut以來,隨著新技術(shù)的整合,Ceph經(jīng)歷了幾次開發(fā)迭代。借助適用于Openstack和Proxmox的虛擬化平臺,Ceph可支持直接將iSCSI存儲呈現(xiàn)給虛擬化平臺。同時Ceph也擁有功能強大的API。在世界上的各大公司都能發(fā)現(xiàn)Ceph的身影——提供塊存儲,文件存儲,對象存儲。

由于Ceph是目前唯一提供以下所有功能的存儲解決方案,因此Ceph越來越受歡迎,并吸引了許多大型企業(yè)的極大興趣:

  • 「軟件定義」:軟件定義存儲 (SDS) 是一種能將存儲軟件與硬件分隔開的存儲架構(gòu)。不同于傳統(tǒng)的網(wǎng)絡(luò)附加存儲 (NAS) 或存儲區(qū)域網(wǎng)絡(luò) (SAN) 系統(tǒng),SDS 一般都在行業(yè)標準系統(tǒng)或 x86 系統(tǒng)上運行,從而消除了軟件對于專有硬件的依賴性。借助Ceph,還可以為諸如糾錯碼,副本,精簡配置,快照和備份之類的功能提供策略管理。
  • 「企業(yè)級」 :Ceph旨在滿足大型組織在可用性,兼容性,可靠性,可伸縮性,性能和安全性等方面的需求。它同時支持按比例伸縮,從而使其具有很高的靈活性,并且其可擴展性潛力幾乎無限。
  • 「統(tǒng)一存儲」:Ceph提供了塊+對象+文件存儲,從而提供了更大的靈活性(大多數(shù)其他存儲產(chǎn)品都是僅塊,僅文件,僅對象或文件+塊;ceph提供的三種混合存儲是非常罕見)。
  • 「開源」:開源實現(xiàn)技術(shù)的敏捷性,通常提供多種解決問題的方法。開源通常也更具成本效益,并且可以更輕松地使組織開始規(guī)模更小,規(guī)模更大。開源解決方案背后的許多意識形態(tài)孕育了一個相互協(xié)作且參與度高的專業(yè)社區(qū),這些社區(qū)反應靈敏且相互支持。更不用說開源是未來的方向。Web,移動和云解決方案越來越多地建立在開源基礎(chǔ)架構(gòu)上。

「為什么選擇Ceph?」

「Ceph 分布式核心組件」

集群文件系統(tǒng)最初始于1990年代末和2000年代初。Lustre是最早利用可伸縮文件系統(tǒng)實現(xiàn)產(chǎn)品化的產(chǎn)品之一。多年來,出現(xiàn)了其他一些Lustre衍生產(chǎn)品,包括GlusterFS,GPFS,XtreemFS和OrangeFS等。這些文件系統(tǒng)都集中于為文件系統(tǒng)實現(xiàn)符合POSIX的掛載,并且缺乏通用的集成API。

Ceph的架構(gòu)并不需要考慮到需要與POSIX兼容的文件系統(tǒng)——這完全得益于云的時代。利用RADOS,Ceph可以擴展不受元數(shù)據(jù)約束限制的塊設(shè)備。這極大地提高了存儲性能,但是卻使那些尋求基于Ceph的大型文件系統(tǒng)掛載方法的人們望而卻步。直到Ceph Jewel(10.2.0)版本發(fā)布為止,CephFS已經(jīng)是穩(wěn)定且可靠的文件系統(tǒng)——允許部署POSIX掛載的文件系統(tǒng)。

Ceph支持塊,對象和文件存儲,并且具有橫向擴展能力,這意味著多個Ceph存儲節(jié)點(服務(wù)器)共同提供了一個可快速處理上PB數(shù)據(jù)(1PB = 1,000 TB = 1,000,000 GB)的存儲系統(tǒng)。利用作為基礎(chǔ)的硬件組件,它還可以同時提高性能和容量。

Ceph具有許多基本的企業(yè)存儲功能,包括副本,糾錯碼,快照,自動精簡配置,分層(在閃存和普通硬盤之間緩存數(shù)據(jù)的能力——即緩存)以及自我修復功能。為了做到這一點,Ceph利用了下面將要探討的幾個組件。

從Ceph Nautilus(v14.2.0)開始,現(xiàn)在有五個主要的守護程序或服務(wù),它們集成在一起以提供Ceph服務(wù)的正常運行。這些是:

  1. 「ceph-mon」:Monitor確實提供了其名稱所暗示的功能——監(jiān)視群集的運行狀況。該監(jiān)視器還告訴OSD在replication期間將數(shù)據(jù)放置在何處,并保留主CRUSH Map。
  2. 「ceph-osd」:OSD是Ceph的基礎(chǔ)數(shù)據(jù)存儲單元,它利用XFS文件系統(tǒng)和物理磁盤來存儲從客戶端提供給它的塊數(shù)據(jù)。
  3. 「ceph-mds」:MDS守護程序提供了將Ceph塊數(shù)據(jù)轉(zhuǎn)換為存儲文件的POSIX兼容掛載點的功能,就像您使用傳統(tǒng)文件系統(tǒng)一樣。
  4. 「ceph-mgr」:MGR守護程序顯示有關(guān)群集狀態(tài)的監(jiān)視和管理信息。
  5. 「ceph-rgw」:RGW守護程序是一個HTTP API守護程序,對象存儲網(wǎng)關(guān)實際上是調(diào)用librados的API來實現(xiàn)數(shù)據(jù)的存儲和讀取。而該網(wǎng)關(guān)同時提供了兼容AWS S3和OpenStack Swift的對象存儲訪問接口(API)。

從術(shù)語的角度來看,Ceph需要了解一些重要的知識。

Ceph基于CRUSH算法構(gòu)建, 并支持多種訪問方法(文件,塊,對象)。CRUSH算法確定對象在OSD上的位置,并且可以將這些相同的塊拉出以進行訪問請求。

Ceph利用了可靠,自治,分布式的對象存儲(或RADOS),該對象存儲由自我修復,自我管理的存儲節(jié)點組成。前面討論的OSD守護程序是RADOS群集的一部分。

放置組(PG)的全稱是placement group,是用于放置object的一個載體,所以群集中PG的數(shù)量決定了它的大小。pg的創(chuàng)建是在創(chuàng)建ceph存儲池的時候指定的,同時跟指定的副本數(shù)也有關(guān)系,比如是3副本的則會有3個相同的pg存在于3個不同的osd上,pg其實在osd的存在形式就是一個目錄。PG可以由管理員設(shè)置,新版本中也可以根據(jù)集群使用情況自動縮放。

RBD即RADOS Block Device的簡稱,RBD塊存儲是最穩(wěn)定且最常用的存儲類型。RBD塊設(shè)備類似磁盤可以被掛載。RBD塊設(shè)備具有快照、多副本、克隆和一致性等特性,數(shù)據(jù)以條帶化的方式存儲在Ceph集群的多個OSD中??梢栽贑eph中用于創(chuàng)建用于虛擬化的鏡像塊設(shè)備,例如KVM和Xen。通過利用與RADOS兼容的API librados,VM的訪問不是通過iSCSI或NFS,而是通過存儲API來實現(xiàn)的。

使用場景

正如我們已經(jīng)描述的那樣,Ceph是一個非常靈活和一致的存儲解決方案。對Ceph存儲對象的訪問可以通過多種方式來完成,因此Ceph具有其他類似產(chǎn)品所缺乏的大量生產(chǎn)用例。

可以將Ceph部署為S3/Swift對象存儲的替代品。通過它的RADOS網(wǎng)關(guān),可以使用http GET請求以及大量可用的Amazon S3 API工具箱訪問存儲在Ceph中的對象。

也可以通過librados API或iSCSI/NFS在包括VMWare和其他專有虛擬化平臺在內(nèi)的虛擬化環(huán)境中直接使用Ceph。

可以部署CephFS為需要訪問大型文件系統(tǒng)的操作系統(tǒng)提供POSIX兼容的掛載點。

根據(jù)以上的這些場景,我們可以利用單個存儲平臺來滿足各種計算和存儲需求。

「潛在的部署方案」

常用的Ceph部署工具主要有:ceph-deploy,ceph-ansible,基于kubernetns的Rook以及新版本基于容器的kubeadm等。當然工具不僅僅是這些。每一種部署方案都有大量的生產(chǎn)實踐。以下簡單介紹以下這幾種常用的部署方式:

「Ceph-deply」:該工具可用于簡單、快速地部署 Ceph 集群,而無需涉及繁雜的手動配置。它在管理節(jié)點上通過 ssh 獲取其它 Ceph 節(jié)點的訪問權(quán)、通過 sudo 獲取其上的管理權(quán)限、通過底層 Python 腳本自動化各節(jié)點上的 Ceph 安裝進程。它簡單到可以運行在工作站上,不需要服務(wù)器、數(shù)據(jù)庫或任何其它的自動化工具。使用ceph-deploy安裝和拆除集群非常簡單。然而它不是通用部署工具,是專為想快速安裝、運行 Ceph 的人們設(shè)計的專用工具,這樣的集群只包含必要的的初始配置選項,就沒必要安裝像 Chef 、 Puppet 或 Juju 這樣的部署工具。

「Ceph-ansible」:用于部署Ceph分布式系統(tǒng)的ansible playbook,ceph-ansible是安裝和管理完整ceph集群的最靈活的方法,當前大量的生產(chǎn)環(huán)境都會使用該安裝方式。

「Rook」:Rook 是一個編排器,能夠支持包括 Ceph 在內(nèi)的多種存儲方案。Rook 簡化了 Ceph 在 Kubernetes 集群中的部署過程。Rook 是一個可以提供 Ceph 集群管理能力的 Operator。Rook 使用 CRD 一個控制器來對 Ceph 之類的資源進行部署和管理。

「Cephadm」:較新的集群自動化部署工具,支持通過圖形界面或者命令行界面添加節(jié)點,目前不建議用于生產(chǎn)環(huán)境。cephadm的目標是提供一個功能齊全、健壯且維護良好的安裝和管理層,可供不在Kubernetes中運行Ceph的任何環(huán)境使用。Cephadm通過SSH從manager守護進程連接到主機來部署和管理Ceph集群,以添加、刪除或更新Ceph守護進程容器。它不依賴于外部配置或編排工具,如Ansible、Rook或Salt。

「結(jié)論」

Ceph的性能與功能不斷得到提升,存儲特性也不斷豐富,甚至可以與傳統(tǒng)專業(yè)存儲媲美,完備的存儲服務(wù)和低廉的投資成本,使得越來越多的企業(yè)和單位選用Ceph提供存儲服務(wù)。大量的生產(chǎn)最佳實踐也使得Ceph成為標準SDS的最優(yōu)解決方案之一。

Cephadm管理Ceph集群的整個生命周期,是官方以后力推的部署以及管理Ceph的解決方案。它首先在單個節(jié)點(一個監(jiān)視器和一個管理器)上引導一個很小的Ceph集群,然后使用編排接口擴展集群以包括所有主機并提供所有Ceph守護進程和服務(wù)。這可以通過Ceph命令行界面(CLI)或儀表板(GUI)來執(zhí)行。

Cephadm是Octopus發(fā)行版中的一個新功能,在生產(chǎn)中的使用有限。社區(qū)希望用戶嘗試cephadm,特別是對于新的集群,但請注意,有些功能仍然很粗糙。當前社區(qū)持續(xù)在改進以及相應BUG修復中。

5種最常見的CEPH失敗方案

Ceph是一種廣泛使用的存儲解決方案,可在整個分布式集群中實現(xiàn)對象級,塊級和文件級存儲。Ceph是創(chuàng)建不圍繞單個故障點進行擴展的高效存儲系統(tǒng)的理想選擇。但是,如果管理不當,Ceph可能很容易成為失敗場景的雷區(qū),這可能是一件難以完全避免的事情。本處,我們將探討最常見的五種Ceph失敗方案。

「Monitor數(shù)目不正確」

在最新版本的Ceph中,至少需要三臺運行Ceph Mon守護程序的服務(wù)器。這些可以是物理服務(wù)器(理想情況下)或者也可以是虛擬機。但是,如果您超出了Mon服務(wù)器的最小數(shù)量,則在Ceph構(gòu)建中始終保持運行奇數(shù)個守護程序非常重要。這個奇數(shù)很重要,因為它允許系統(tǒng)正確地建立一個主機來控制CRUSH Map。在確定主服務(wù)器時,每臺服務(wù)器都會“投票”認為最適合維護crush map的服務(wù)器。維護奇數(shù)個Ceph守護程序可確保永遠不會出現(xiàn)投票平局的現(xiàn)象,并且始終會建立一個主服務(wù)器。如果沒有維護奇數(shù)個守護程序,則可能會導致不穩(wěn)定,并最終導致Ceph崩潰。

「OSD數(shù)目不正確」

根據(jù)在Ceph集群中所設(shè)置的副本數(shù),您將需要足夠數(shù)量的硬盤(OSD——對象存儲設(shè)備)。當您計劃購買或升級當前Ceph中的OSD前,最重要的是要根據(jù)當前狀況進行數(shù)據(jù)量預測,以匹配未來生產(chǎn)的數(shù)據(jù)量。通常,最好至少提前6到12個月進行估算,并將此存儲量乘以所需的對象冗余量(即32TB數(shù)據(jù)* 3(副本數(shù))= 96TB所需的存儲空間)。通過適當?shù)念A測,您可以避免OSD過載,并保持CEPH環(huán)境正常運行。

「RADOS網(wǎng)關(guān)冗余不足」

RADOS (「Reliable, Autonomic Distributed Object Store」) 是Ceph的核心之一,作為Ceph分布式文件系統(tǒng)的一個子項目,特別為Ceph的需求設(shè)計,能夠在動態(tài)變化和異質(zhì)結(jié)構(gòu)的存儲設(shè)備集群之上提供一種穩(wěn)定、可擴展、高性能的單一邏輯對象(Object)存儲接口和能夠?qū)崿F(xiàn)節(jié)點的自適應和自管理的存儲系統(tǒng)。RADOS構(gòu)成了Ceph集群的核心,并且與Ceph CRUSH Map結(jié)合使用時,可以使您在服務(wù)器的集群中保持數(shù)據(jù)一致且可安全的進行數(shù)據(jù)同步與復制。可以以多種不同方式訪問Ceph數(shù)據(jù)。其中之一是通過稱為RADOS網(wǎng)關(guān)的HTTP API前端進行的。RADOS網(wǎng)關(guān)公開了一個存儲API,供外部人員調(diào)用。

如果通過RADOS網(wǎng)關(guān)訪問您的Ceph集群,那么促進API訪問的前端服務(wù)器必須冗余且能夠負載均衡,這一點非常重要。在理想的配置中,多個RADOS服務(wù)器將可用于接受請求,并且所有請求都應由一個冗余的負載均衡器進行管理。如果未進行正確配置,則非冗余RADOS網(wǎng)關(guān)服務(wù)器的故障將導致您完全失去對CEPH群集的API訪問權(quán)限。您可以使用混合的解決方案,該混合解決方案會利用本地RADOS網(wǎng)關(guān),當發(fā)生故障時則會回退到基于云的冗余網(wǎng)關(guān)上。這可以最大程度地減少額外的不必要轉(zhuǎn)換,同時保持對存儲解決方案的冗余和可靠訪問。

「硬件配置不足」

為CEPH集群維護硬件時,最重要的是要確保硬件配置滿足實際需求,具體需要考慮的如下:

  • 「電源」:確保主機的電源模塊至少是雙路冗余。還要確保每臺CEPH服務(wù)器都有一個備用電源,該備用電源的功率足以完全滿足服務(wù)器的需求。沒有適當?shù)娜哂?,您將面臨不可挽回的數(shù)據(jù)丟失的風險。
  • 「CPU」:最佳實踐要求在所有CEPH服務(wù)器上使用相同型號相同配置的CPU。這有助于在整個ceph集群中保持一致性以及穩(wěn)定性。
  • 「內(nèi)存」:與CPU相似,您使用的內(nèi)存應在CEPH服務(wù)器之間平均分配。理想情況下,存儲服務(wù)器的品牌和規(guī)格應該相同。此外,在發(fā)生硬件故障時,還應具有大量可用的冗余內(nèi)存(備件)。
  • 「硬盤」:建議將SAS磁盤用于OSD。如果有可能的話,使用故障率低于SAS盤的NVMe磁盤則會更為理想。
  • 「其他」:如果有可能的話,可以提供一些冷備機器。當存儲節(jié)點存現(xiàn)故障的時候,極端情況下可以直接進行備機更換(保留物理磁盤)。

「CEPH專業(yè)知識」

通常,CEPH失敗的原因是由于缺乏CEPH相關(guān)的專業(yè)知識。例如,所有CEPH群集中OSD節(jié)點都將利用硬盤直通模式來確保性能和可靠性。但是,如果改用RAID的話,則不僅是不推薦的,而且還會因為磁盤陣列故障而導致出現(xiàn)單點故障,最終可能引起大量數(shù)據(jù)丟失。這種錯誤很簡單,但從長遠來看,這樣的錯誤代價高昂,并且可能需要更高級的ceph專家去解決相應的問題。

Ceph常規(guī)排障

如果Ceph集群崩潰該怎么辦

由于Ceph在軟件層就內(nèi)置了所有可用的冗余和故障保護功能,因此簡單的故障不太可能造成災難性的后果,并且一般的故障相對都是比較容易恢復的。但問題是,當遇到一系列意外事件導致集群停止響應存儲請求或使所有VM虛擬機脫機時,那又該怎么辦?

「保持冷靜」

Ceph非常強大,其Crush算法可確保數(shù)據(jù)的完整性和可用性。記住這一關(guān)鍵事實將有助于您確定中斷的原因。

最常見的災難性故障場景之一是群集丟失的OSD超過維護所需的冗余級別所需的OSD。在這種情況下,快速識別并更換有問題的OSD將使您的群集恢復工作狀態(tài)。同時也讓我們確定其他潛在故障觸發(fā)因素。

「記錄和狀態(tài)」

Ceph在mon(monitor)節(jié)點和osd(object storage daemon)節(jié)點上提供了多個日志和狀態(tài)查看命令,您應該首先利用Ceph相關(guān)命令行來查看群集的運行狀況。

要評估Ceph集群的當前狀態(tài),請輸入:

  1. # ceph status 

或者使用:

  1. # ceph -s 

兩次命令的結(jié)果都應輸出類似于以下內(nèi)容:

  1. cluster b370a29d-9287-4ca3-ab57-3d824f65e339 
  2. health HEALTH_OK 
  3. monmap e1: 1 mons at {ceph1=10.0.0.8:6789/0}, election epoch 2, quorum 0 ceph1 
  4. osdmap e63: 2 osds: 2 up, 2 in 
  5. pgmap v41332: 952 pgs, 20 pools, 17130 MB data, 2199 objects 
  6. 115 GB used, 167 GB / 297 GB avail 
  7. 1 active+clean+scrubbing+deep 
  8. 951 active+clean 

如果您看到健康狀況為“HEALTH_OK”,那就說明集群狀態(tài)健康。

在某些情況下,尤其是與OSD相關(guān)的情況下,將返回HEALTH_WARN或HEALTH_ERR。這可能是由于一些不影響群集整體性能的因素所致,例如OSD重新均衡或存儲池的PG的深度清理。這些都可以安全地忽略。

在某些情況下,Ceph的命令行界面可能根本不響應這兩個命令。如果您的Ceph的身份驗證有問題,或者運行Monitor服務(wù)的節(jié)點硬件有問題,通常會發(fā)生這種情況。在第二種情況下,則需要診斷Monitor節(jié)點服務(wù)器本身的硬件問題。

「mon(Monitor)調(diào)試」

當使用多個Ceph Mon運行時,Ceph則需要仲裁(Quorum)。仲裁是確保一致性的可靠方法,因為群集需要最少的“投票”數(shù)才能繼續(xù)進行replication。

可以使用以下幾個命令來確定Ceph Mon的狀態(tài)。

  1. # ceph mon stat 

上述命令將輸出集群中所有mon的當前狀態(tài),例如:

  1. e3: 3 mons at {pve1=10.103.6.109:6789/0,pve2=10.103.6.110:6789/0,pve3=10.103.6.111:6789/0}, election epoch 30, leader 0 pve1, quorum 0,1,2 pve1,pve2,pve3 

上面表示有三個Ceph Mon已經(jīng)啟動并成功運行。其中有一個仲裁節(jié)點,狀態(tài)顯示集群運行正常。您會注意到ceph mon stat的輸出中有幾條重要的信息,包括選舉之間的時間間隔(以秒為單位)。選舉在這些時間間隔內(nèi)發(fā)生,以確定哪個監(jiān)視器應該是集群的“leader”。

與使用仲裁作為確保一致性的方法的非技術(shù)機構(gòu)一樣,每個節(jié)點都有一票表決權(quán)。在Ceph中,最佳實踐堅持我們利用大于或等于3的奇數(shù)個Ceph Mon節(jié)點。這確保了我們的群集在失去一個或者兩個仲裁節(jié)點的小概率事件中維持仲裁能力和一定程度的冗余。

如果我們真的失去了法定人數(shù)(quorum),或者沒有贏得法定人數(shù)的投票。那么,由于監(jiān)視器在其Ceph運行中所起的重要作用,則會導致Ceph群集將完全無法響應。從跟蹤數(shù)據(jù)存放位置到維護OSD的實時Map。Ceph Mon節(jié)點還提供用于返回“Ceph health”和“Ceph -s”輸出功能。如果沒有一個正常工作的Ceph Mon仲裁,則所有命令都不會有任何返回值。

檢查監(jiān)視器狀態(tài)的其他有用命令包括:

  1. #dumping the mon map 
  2. # ceph mon dump  
  3. dumped monmap epoch 3 
  4. epoch 3 
  5. fsid 4a1dc77a-37f8-4b5b-9476-853f7cace716 
  6. last_changed 2020-8-18 10:50:36.846268 
  7. created 2020-8-18 10:50:25.571368 
  8. 0: 10.103.6.109:6789/0 mon.pve1 
  9. 1: 10.103.6.110:6789/0 mon.pve2 
  10. 2: 10.103.6.111:6789/0 mon.pve3 
  11.  
  12.  
  13. # ceph quorum_status --format json-pretty #looking at quorum status 
  14.     "election_epoch": 30, 
  15.     "quorum": [ 
  16.         0, 
  17.         1, 
  18.         2 
  19.     ], 
  20.     "quorum_names": [ 
  21.         "pve1"
  22.         "pve2"
  23.         "pve3" 
  24.     ], 
  25.     "quorum_leader_name""pve1"
  26.     "monmap": { 
  27.         "epoch": 3, 
  28.         "fsid""4a1dc77a-37f8-4b5b-9476-853f7cace716"
  29.         "modified""2020-8-18 10:50:36.846268"
  30.         "created""2020-8-18 10:50:25.571368"
  31.         "features": { 
  32.             "persistent": [ 
  33.                 "kraken"
  34.                 "luminous" 
  35.             ], 
  36.             "optional": [] 
  37.         }, 
  38.         "mons": [ 
  39.             { 
  40.                 "rank": 0, 
  41.                 "name""pve1"
  42.                 "addr""10.103.6.109:6789/0"
  43.                 "public_addr""10.103.6.109:6789/0" 
  44.             }, 
  45.             { 
  46.                 "rank": 1, 
  47.                 "name""pve2"
  48.                 "addr""10.103.6.110:6789/0"
  49.                 "public_addr""10.103.6.110:6789/0" 
  50.             }, 
  51.             { 
  52.                 "rank": 2, 
  53.                 "name""pve3"
  54.                 "addr""10.103.6.111:6789/0"
  55.                 "public_addr""10.103.6.111:6789/0" 
  56.             } 
  57.         ] 
  58.     } 

「守護進程套接字(「Daemon Socket」)」

Ceph管理套接字(daemon socket)允許您直接連接到所有正在運行的Ceph守護進程。從OSD到Mon和MGR,Ceph守護程序管理套接字可以提供診斷功能,這些功能在Ceph Mon發(fā)生故障并且Ceph客戶端停止響應時可能會變得不可用。

以下命令可直接連接到Ceph守護程序,根據(jù)需求進行狀態(tài)查看。

  1. # ceph daemon {daemon-name} ##OR 
  2. # ceph daemon {path-to-socket-file} ##For Example 
  3. # ceph daemon osd.0 help 
  4.     "calc_objectstore_db_histogram""Generate key value histogram of kvdb(rocksdb) which used by bluestore"
  5.     "compact""Commpact object store's omap. WARNING: Compaction probably slows your requests"
  6.     "config diff""dump diff of current config and default config"
  7.     "config diff get""dump diff get : dump diff of current and default config setting "
  8.     "config get""config get : get the config value"
  9.     "config help""get config setting schema and descriptions"
  10.     "config set""config set   [ ...]: set a config variable"
  11.     "config show""dump current config settings"
  12.     "dump_blacklist""dump blacklisted clients and times"
  13.     "dump_blocked_ops""show the blocked ops currently in flight"
  14.     "dump_historic_ops""show recent ops"
  15.     "dump_historic_ops_by_duration""show slowest recent ops, sorted by duration"
  16.     "dump_historic_slow_ops""show slowest recent ops"
  17.     "dump_mempools""get mempool stats"
  18.     "dump_objectstore_kv_stats""print statistics of kvdb which used by bluestore"
  19.     "dump_op_pq_state""dump op priority queue state"
  20.     "dump_ops_in_flight""show the ops currently in flight"
  21.     "dump_pgstate_history""show recent state history"
  22.     "dump_reservations""show recovery reservations"
  23.     "dump_scrubs""print scheduled scrubs"
  24.     "dump_watchers""show clients which have active watches, and on which objects"
  25.     "flush_journal""flush the journal to permanent store"
  26.     "flush_store_cache""Flush bluestore internal cache"
  27.     "get_command_descriptions""list available commands"
  28.     "get_heap_property""get malloc extension heap property"
  29.     "get_latest_osdmap""force osd to update the latest map from the mon"
  30.     "getomap""output entire object map"
  31.     "git_version""get git sha1"
  32.     "heap""show heap usage info (available only if compiled with tcmalloc)"
  33.     "help""list available commands"
  34.     "injectdataerr""inject data error to an object"
  35.     "injectfull""Inject a full disk (optional count times)"
  36.     "injectmdataerr""inject metadata error to an object"
  37.     "log dump""dump recent log entries to log file"
  38.     "log flush""flush log entries to log file"
  39.     "log reopen""reopen log file"
  40.     "objecter_requests""show in-progress osd requests"
  41.     "ops""show the ops currently in flight"
  42.     "perf dump""dump perfcounters value"
  43.     "perf histogram dump""dump perf histogram values"
  44.     "perf histogram schema""dump perf histogram schema"
  45.     "perf reset""perf reset : perf reset all or one perfcounter name"
  46.     "perf schema""dump perfcounters schema"
  47.     "rmomapkey""remove omap key"
  48.     "set_heap_property""update malloc extension heap property"
  49.     "set_recovery_delay""Delay osd recovery by specified seconds"
  50.     "setomapheader""set omap header"
  51.     "setomapval""set omap key"
  52.     "status""high-level status of OSD"
  53.     "trigger_scrub""Trigger a scheduled scrub "
  54.     "truncobj""truncate object to length"
  55.     "version""get ceph version" 

例如,當多個Ceph monitor守護進程同時失敗時,Ceph守護程序可用于更新mon map。這將使您可以將新的mon map更新并導入到無法運行的Ceph Mon節(jié)點中,這也是Ceph中非常常見的一個故障解決方案。

「規(guī)避風險」

用戶應該盡量熟悉這兩種從Ceph群集崩潰或意外中斷中恢復的重要方法。這些工具功能強大,學習如何利用它們則能盡量減少數(shù)據(jù)丟失的風險,同時也能夠最快,最全的恢復Ceph集群。

當然,每一個故障場景都不同,本處僅僅是提供了一些常規(guī)的集群崩潰故障以及對應的解決方案。但更復雜的場景需要用戶根據(jù)自身所遇到的場景進行更加具體的分析以及處理。

Ceph — OSD Flapping(抖動)調(diào)試和恢復

下面我們將特別討論如果當您發(fā)現(xiàn)Ceph OSD因意外而進行peering,出現(xiàn)scrubbing或集群連接斷斷續(xù)續(xù)的情況時候該如何進行排查以及解決問題。其實,上述的這些行為也可以稱之為抖動(flapping),而且這因多種原因而引起的故障會損害群集的性能和持久性以及穩(wěn)定性。

「故障」

當一個OSD或多個OSD開始抖動(flapping)時,您可能首先會注意到讀寫速度明顯下降。這是出于多種原因。當OSD在不停的抖動(flapping)期間停止時,您實際上已經(jīng)失去了正在抖動(flapping)的所有OSD的總吞吐量,也就是說這些抖動(flapping) OSD不僅不能提供正常的存儲能力,還影響了整個集群的性能。尤其是在一個擁有數(shù)萬IOPS讀寫的大型集群上,這可能是災難性的。

OSD服務(wù)正常后,群集要做的第一件事就是嘗試進行恢復?;謴筒⒉皇且粋€非常簡單的過程,其中需要對在多個不同主機上的多個OSD中副本的塊進行校驗和驗證,以確保完整性。如果校驗和不匹配,則需要重新復制該塊。

此校驗和驗證和文件重新傳輸過程會引起Ceph集群的大量硬件資源消耗。最直接的體現(xiàn)是:服務(wù)器設(shè)備耗電量會大幅度增加,群集網(wǎng)絡(luò)上的網(wǎng)絡(luò)流量也會急劇增加。如果當前Ceph集群已經(jīng)處于一個高負載的環(huán)境,這種額外的不必要的負載可能會導致性能進一步下降,甚至導致集群停止響應,極端情況會引起Ceph集群的一連串的崩潰。

那么,如何查看Ceph集群的癥狀,以查看性能問題是否與OSD的抖動(flapping)相關(guān)?第一種也是最簡單的方法是簡單地檢查群集的運行狀況。這可以通過使用Luminous及更高版本中提供的Ceph儀表板來完成??赏ㄟ^“http://IPCEPHNODE:7000” (7000為訪問端口,在初始化的時候可以根據(jù)需求進行自定義)。您還可以在任何啟用了ceph-admin的主機上通過命令行查看Ceph群集的狀態(tài)??梢允褂?ldquo; ceph -s”命令,該命令將輸出集群的當前運行狀況。如果正在進行修復或OSD當前被標記為down,該命令將向您發(fā)出輸出警報。

「原因和解決方法」

通常,導致OSD抖動(flapping)的原因與導致OSD失敗的原因相似。不良的硬件狀況,過多的發(fā)熱,網(wǎng)絡(luò)問題以及整個系統(tǒng)的負載都可能導致OSD抖動(flapping)。

從硬件的角度來看,底層的存儲磁盤可能出現(xiàn)物理故障。所有硬盤都可通過SMART屬性監(jiān)視其當前狀態(tài)。這些值提供有關(guān)硬盤各種參數(shù)的信息,并可提供有關(guān)磁盤剩余壽命或任何可能的錯誤的信息。此外,可以執(zhí)行各種SMART測試,以確定磁盤上的任何硬件問題。因此,可以利用Smartctl來確定當前環(huán)境中的SAS或者SATA磁盤是否處于不健康狀態(tài)——這可能導致OSD故障并不停重啟。通過登錄到可能受影響的主機并輸入“ smartctl -a /dev/sdX”(其中X是設(shè)備ID)來定位物理設(shè)備,從而檢查硬盤驅(qū)動器的SMART狀態(tài)。同時還可以通過grep正則匹配去過濾所需要的參數(shù)。通過該方式,不僅將輸出硬盤當前的狀態(tài),同時會顯示即將發(fā)生故障。如果可以的話,請及時更換有故障的硬盤!

OSD抖動(flapping)的另一個原因可能很簡單,比如您的Ceph存儲網(wǎng)絡(luò)接口上的MTU不匹配。MTU或Maximum Transmission Unit,用來通知對方所能接受數(shù)據(jù)服務(wù)單元的最大尺寸,說明發(fā)送方能夠接受的有效載荷大小,也就是允許接口發(fā)送的最大數(shù)據(jù)包大小——有效地將數(shù)據(jù)包拆分為較小的塊,以適合系統(tǒng)指定的MTU。因為Ceph是一種處理大型數(shù)據(jù)塊的存儲技術(shù),所以MTU越大,代表系統(tǒng)以最少的工作量就可以獲得更多的吞吐量。

如果整個集群中的任何地方的MTU不匹配,即一臺服務(wù)器的MTU設(shè)置為9000,另一臺服務(wù)器的MTU設(shè)置為1500,你最終會遇到這樣的情況:數(shù)據(jù)傳輸卡頓,并且Ceph集群的復制也會基本停止。這也可能是Ceph OSD抖動(flapping)的另外一個原因(健康檢查與低MTU的競爭帶寬)。

要檢查接口的MTU,請在命令行上鍵入“ ifconfig”或“ ip addr”。將MTU與接口匹配,并比較群集中所有主機接口的MTU配置是否一致。

「結(jié)論」

Ceph OSD的抖動是存儲使用過程中最常見的一種故障,該故障不一定會致命,但往往會對集群性能產(chǎn)生嚴重的影響。及時發(fā)現(xiàn)OSD抖動,合理解決問題,盡量避免對集群產(chǎn)生過多的影響。

「Ceph性能優(yōu)化與增強」

上文介紹了Ceph的入門背景,討論了Ceph在云計算和對象存儲中的功能和主要組件,并簡要概述了其部署工具以及常規(guī)的故障現(xiàn)象以及對應的解決思路。下文,我們將研究Ceph的強大的功能,并探索最優(yōu)的方法來提高存儲性能。

Ceph是一個非常復雜的存儲系統(tǒng),它具有幾種我們可以用來提高性能的方式。幸運的是,Ceph的開箱即用非常好,許多性能設(shè)置幾乎利用了自動調(diào)整和縮放功能。在探索一些性能增強時,了解您的工作負載很重要,這樣您就可以選擇最適合您的選項。

「配置說明」

Ceph有幾種部署方案,其中最常見的是針對虛擬化環(huán)境,符合POSIX的文件系統(tǒng)和塊存儲的組合。這些場景中的每一個都有明顯不同的配置要求。例如,在CephFS提出的POSIX文件系統(tǒng)中,將文件系統(tǒng)元數(shù)據(jù)存儲在高速SSD或NVMe驅(qū)動器上是非常重要。對于虛擬化環(huán)境中使用RBD場景,Ceph的caching tier功能可以使用SSD或NVMe為后端普通廉價的存儲提供高速緩存的功能。

「通用硬件」

「Hyper-Threading(HT)」基本做云平臺的,VT和HT打開都是必須的,超線程技術(shù)(HT)就是利用特殊的硬件指令,把兩個邏輯內(nèi)核模擬成兩個物理芯片,讓單個處理器都能使用線程級并行計算,進而兼容多線程操作系統(tǒng)和軟件,減少了CPU的閑置時間,提高的CPU的運行效率。

「關(guān)閉節(jié)能」關(guān)閉節(jié)能后,對性能還是有所提升的,所以堅決調(diào)整成性能型(Performance)。當然也可以在操作系統(tǒng)級別進行調(diào)整,詳細的調(diào)整過程請參考鏈接,但是不知道是不是由于BIOS已經(jīng)調(diào)整的緣故,所以在CentOS 6.6上并沒有發(fā)現(xiàn)相關(guān)的設(shè)置。

  1. for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f <span class="katex math inline">CPUFREQ ] || continue; echo -n performance></span>CPUFREQ; done 

「NUMA」簡單來說,NUMA思路就是將內(nèi)存和CPU分割為多個區(qū)域,每個區(qū)域叫做NODE,然后將NODE高速互聯(lián)。node內(nèi)cpu與內(nèi)存訪問速度快于訪問其他node的內(nèi)存,NUMA可能會在某些情況下影響ceph-osd。解決的方案,一種是通過BIOS關(guān)閉NUMA,另外一種就是通過cgroup將ceph-osd進程與某一個CPU Core以及同一NODE下的內(nèi)存進行綁定。但是第二種看起來更麻煩,所以一般部署的時候可以在系統(tǒng)層面關(guān)閉NUMA。CentOS系統(tǒng)下,通過修改/etc/grub.conf文件,添加numa=off來關(guān)閉NUMA。

  1. kernel /vmlinuz-2.6.32-504.12.2.el6.x86_64 ro root=UUID=870d47f8-0357-4a32-909f-74173a9f0633 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM   biosdevname=0 numa=off 

「RAM」

為Ceph選擇的主機及其基礎(chǔ)服務(wù)應具有足夠的CPU線程,內(nèi)存和網(wǎng)絡(luò)設(shè)備,以處理群集的預期吞吐量。Ceph建議每1TB OSD原始磁盤空間使用1GB RAM。如果主機具有96TB的原始磁盤空間,則應計劃至少需要96GB的RAM。我們建議每個OSD至少使用1個CPU內(nèi)核。OSD可以定期消耗整個CPU來執(zhí)行重新平衡操作。

「避免使用超融合!」

不建議以超融合方式在Ceph節(jié)點上運行其他應用程序,因為在由于磁盤故障而導致的群集重建過程中,每個OSD的OSD RAM使用量可能遠遠超過建議的1GB。如果其他應用程序爭奪RAM,則重建性能以及隨后的Ceph群集本身的讀寫性能都會受到嚴重影響。

「不要使用硬件RAID控制器!」

讓Ceph為您完成數(shù)據(jù)處理。使用硬件RAID控制器可能導致Ceph在RAID重建期間未意識到的不一致和性能下降。SAS HBA的價格為$100-$200,高性能的僅占很小的溢價。這將是確保Ceph集群性能的最佳配置。

「基礎(chǔ)存儲OSD」

當構(gòu)建一個新的Ceph群集時,其中一個主要的工作是對象存儲守護程序(OSD)的底層存儲的選擇。容量需求可能決定了該解決方案所需要的底層存儲。預算可能允許購買大容量的SSD驅(qū)動器或NVMe。無論選擇了什么樣的底層存儲,累計底層存儲的性能都將直接影響Ceph集群的性能(OSD性能越佳,則Ceph集群性能也越佳)。

在需要使多個10G萬兆網(wǎng)絡(luò)接口的環(huán)境中,或者對于讀寫時延極低的應用程序,選擇SSD或NVMe磁盤可能更有意義。這些將為OSD提供企業(yè)級磁盤的完整吞吐量,包括在整個群集中的組合IOPS。

SATA和SAS類型磁盤確實提供了比SSD和NVMe更大的標準存儲容量,但是IOPS與吞吐量有限(受限于OSD所使用的存儲介質(zhì))。因此,群集中將需要更大的磁盤陣列,以提供與更快的磁盤相似的甚至遠超的性能。

「緩存層」

Ceph Luminous中的新增功能,對于出于預算原因或使用大容量磁盤的項目,可以充分提前預估存儲容量的用戶而言,緩存層(Cache Tier)是一項極佳的性能增強解決方案。構(gòu)建緩存層(Cache Tier)需要為每個Ceph存儲節(jié)點提供少數(shù)量的SSD或NVMe磁盤,并修改Crush Map映射以創(chuàng)建單獨的存儲類。

最佳實踐表明,除非您能夠準確預測實際數(shù)據(jù)量,否則緩存應不小于活動存儲池的1/10到1/8的容量。因此,如果您有100TB的數(shù)據(jù)池,則應計劃為您的緩存層提供大約10TB的存儲空間。

「Crush Map」

CRUSH 算法通過計算數(shù)據(jù)存儲位置來確定如何存儲和檢索。CRUSH 授權(quán) Ceph 客戶端直接連接 OSD ,而非通過一個集中服務(wù)器或代理。數(shù)據(jù)存儲、檢索算法的使用,使 Ceph 避免了單點故障、性能瓶頸、和伸縮的物理限制。

CRUSH 需要一張集群的 Map,且使用 CRUSH Map 把數(shù)據(jù)偽隨機地、盡量平均地分布到整個集群的 OSD 里。CRUSH Map 包含 OSD 列表、把設(shè)備匯聚為物理位置的“桶”列表、和指示 CRUSH 如何復制存儲池里的數(shù)據(jù)的規(guī)則列表。

CRUSH Map負責確保數(shù)據(jù)最終到達群集中應有的位置,并在將IO請求轉(zhuǎn)換為磁盤位置以進行數(shù)據(jù)檢索中發(fā)揮作用。正確的CRUSH Map將考慮設(shè)備的適當權(quán)重,通常由磁盤大小決定,盡管您可以根據(jù)磁盤IOPS等其他因素來修改權(quán)重(一般不建議這樣做)。

「系統(tǒng)調(diào)整」

一個經(jīng)過適當調(diào)優(yōu)的系統(tǒng)將是實現(xiàn)Ceph預期性能的關(guān)鍵。請?zhí)貏e關(guān)注網(wǎng)絡(luò)和sysctl優(yōu)化。一些關(guān)鍵參數(shù)包括:

  • 「系統(tǒng)MTU」 :將其設(shè)置為9000以允許大幀。眾所周知,存儲流量在TCP堆棧上非常頻繁,應允許其盡可能多地傳輸數(shù)據(jù)而不會造成碎片,以確保您能夠充分使用存儲網(wǎng)絡(luò)。
  • 「Swappiness」 :通常,使用swap分區(qū)是不太好的。每當您從內(nèi)存切換到磁盤時,操作系統(tǒng)就會用完執(zhí)行基本功能所需的內(nèi)存,并且不得不將其中的某些內(nèi)存強制降低到速度慢得多的磁盤上。在查看性能時,不能忽略Ceph群集的RAM分配的正確大小。可以在linux系統(tǒng)中配置Sysctl相應的參數(shù),以強制linux停止使用交換分區(qū)。我們建議值為1,默認值通??梢栽?0到40之間。數(shù)字越大,內(nèi)核嘗試交換的頻率就越高。
  • 「“ noatime”」 :在大多數(shù)已掛載的文件系統(tǒng)上使用此選項,以跟蹤磁盤上文件的上次訪問時間。由于這是由OSD自己單獨處理的,因此在速度較慢的磁盤上禁用noatime可以提高性能。

「Ceph架構(gòu)調(diào)整」

關(guān)于Ceph的配置以及優(yōu)化的思路整體涉及如下:

  1. Mon節(jié)點對于群集的正常運行至關(guān)重要。嘗試并使用獨立的Mon節(jié)點,請確保資源獨享;或者,如果它們在共享環(huán)境中運行,則需要隔離Mon進程。為了實現(xiàn)冗余,請在Ceph集群中將Mon節(jié)點盡量均勻分布。
  2. Journal日志因雙寫緣故,對影響影響較大。理想情況下,您應該在單獨的物理磁盤上運行操作系統(tǒng),OSD數(shù)據(jù)和OSD日志,以最佳的方式提高整體吞吐量??梢钥紤]將SSD用作Journal分區(qū)來提供讀寫吞吐量。
  3. 如果使用的是bluestore而非filestore的話,也請考慮rocksdb與wal的存儲使用SSD分區(qū)。
  4. 糾錯碼是對象存儲的一種數(shù)據(jù)持久性特性。當存儲大量一次寫入、不經(jīng)常讀取的數(shù)據(jù)時,請使用糾錯碼。但是請記住,這是一個折衷方案:糾錯碼可以大大降低每GB的成本,但與副本相比,其IOPS性能較低。
  5. 支持dentry和inode緩存可以提高性能,尤其是在具有許多較小對象的群集上。
  6. 使用緩存分層,可以根據(jù)需求在熱層和冷層之間自動遷移數(shù)據(jù),從而提高群集的性能。為了獲得最佳性能,請將SSD用于高速緩存池,并將存儲池托管在具有較低延遲的服務(wù)器上。
  7. 部署奇數(shù)個Mon節(jié)點(3個或5個)以進行法定投票。添加更多的Mon可使您的群集更持久。但是,這有時會降低性能,因為Mon之間還有更多數(shù)據(jù)要保持同步。
  8. 排查群集中的性能問題時,請始終從最低級別(磁盤,網(wǎng)絡(luò)或其他硬件)開始,然后逐步升級至更高級別(塊設(shè)備和對象網(wǎng)關(guān))。
  9. PG和PGP數(shù)量一定要根據(jù)OSD的數(shù)量進行調(diào)整,不合理的PG數(shù)目會導致數(shù)據(jù)分布不均衡。
  10. Ceph OSD存在木桶原理,單個OSD的性能下降可能會影響整個集群的性能,所以要及時發(fā)現(xiàn)低性能的OSD,然后更換或者直接踢出集群。

「結(jié)論」

根據(jù)以上幾種方法可以正確實現(xiàn)Ceph以提供您期望的性能。利用磁盤緩存,緩存分層和適當配置的系統(tǒng),可以確保磁盤性能不會成為基礎(chǔ)架構(gòu)的瓶頸。

寫在最后

雖然開源存儲對于希望減少集中式商業(yè)存儲上的用戶而言來說是一個福音,但文檔和支持可能會受到限制。在沒有商業(yè)支持的前提下,除了靠社區(qū)的支持外,剩下的就靠用戶對軟件本身的熟悉程度。只有不斷的嘗試,不斷的優(yōu)化,不斷的回饋社區(qū),才能使開源軟件發(fā)展的更好。

參考:

https://ceph.readthedocs.io

http://www.slideshare.net/Inktank_Ceph/dell-ceph-22nd-london-v5

http://ceph.com/docs/master/start/hardware-recommendations/

http://www.inktank.com/inktank-ceph-enterprise/inktank-ceph-enterprise-1-2-arrives-with-erasure-coding-and-cache-tiering

 

責任編輯:武曉燕 來源: 新鈦云服
相關(guān)推薦

2021-01-21 08:03:20

Ceph云環(huán)境性能

2023-01-06 09:04:51

系統(tǒng)

2020-07-28 08:07:14

ElasticSear

2013-05-23 16:00:20

負載均衡網(wǎng)絡(luò)優(yōu)化網(wǎng)絡(luò)升級

2014-01-03 16:57:25

高端存儲華為EMC

2015-07-09 13:19:17

Ceph分布式存儲性能調(diào)優(yōu)

2012-04-12 13:48:37

無線網(wǎng)絡(luò)

2023-04-26 18:36:13

2018-11-08 15:44:10

UCloud云硬盤IO

2011-07-28 16:17:10

2018-06-27 16:54:11

紅帽Linux 6.10企業(yè)

2016-12-21 09:33:40

2010-08-11 09:08:51

KDE 4.5.0

2023-08-02 07:42:01

推薦系統(tǒng)rankin

2024-12-12 09:18:21

2022-05-12 18:09:18

Kubernetes公有云

2022-05-19 08:47:31

ITCIO企業(yè)

2025-02-06 11:44:56

2009-07-01 18:01:20

JSP代碼塊緩沖OSCache

2021-01-18 09:43:58

Node.js前端服務(wù)端
點贊
收藏

51CTO技術(shù)棧公眾號