# IT明星不是夢 # Ceph持久化存儲爲k8s應用提供存儲方案(1)

目錄:1)Ceph介紹
2)部署Ceph集羣
採用版本【2020最新nautilus (stable)14.2.7】html

爲何使用Ceph?

ceph其實早在2004年的時候寫的第一行代碼,它是到2012年纔有的第一個開發版本,到2014年的時候ceph才慢慢有公司在生產上應用了,那時候通常有的版本也不是很穩定,也是進行一些二次的研發,包裝成一些本身的東西,不過如今ceph的版本已經很穩定了,已經適合在生產用了,目前用的比較多的,社區影響比較好的是這個luminous版本,這個版本也是比較穩定,也是比較流行,目前也是用的比較多。java

另外就是ceph和其餘存儲有些不同的地方,它可擴展,有很好的性能,有穩定存儲的計算模塊,在沒用ceph以前用的通常都是一些傳統的存儲或者就是商業的存儲,像商業的成本通常比較高,須要一些設備或者存儲到雲端,另外就是拿服務器作掛載共享,這種一個是不利於橫向擴展,它很難保證數據的穩定性,數據的訪問速率,由於用掛載模式的話,它掛載的模式訪問是比較差的,因此基於這種緣由來採用ceph,目前像騰訊、樂視、新浪、國外的公司雅虎也都是用的ceph,像國內用的比較成功的x-sky這個用的也比較多,因此這個ceph已經很穩定了,目前市面的ceph人員也比較缺乏。node

GlusterFS和ceph的區別

分佈式存儲的話無疑就是橫向擴展,任何一個節點掛了的話,能夠不總體影響一個運行,可能一臺x86服務器一些ssd和hdd的盤組合起來就能夠把這個存儲運行起來,(ssd固態硬盤)(hdd硬盤驅動器,常說的電腦c盤)那麼分佈式存儲多節點多副本,橫向擴展,主要成本很低,它能夠把資源隔離,支持很低服務模式,塊,對象,文件系統,也是隨着節點增長,性能也是有所提升的,因此淘汰了不少集中式的存儲,如今也是慢慢的走向分佈式的存儲。python

Ceph架構介紹

ceph主要使用底層的rados存儲,最核心的,外面封裝了一個librados對文件系統對對象提供一些支持,外層有rgw、rbd、cephfs經過這些數據,將它提供給用戶去使用
# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
第一個rgw也就是對象存儲,rbd是塊存儲,cephfs是文件系統存儲,它的底層是rados,上層是librados這個其實就是一個開發庫,librados中間還有一個封裝的對象,主要和上面層進行關聯,把存儲空間經過軟件隔離出來,而後提供給用戶去使用
像這個rbd聽的比較多,塊存儲其實就是一塊磁盤,cephfs就是共享mount,至關於之前的將它釋放出去,rgw可能就比較先進了,通常用的比較多的就是rgw,rdb塊存儲和cephfs也用的不是不少,rgw用的話可能會作一些開發。# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
也就是塊存儲有個rbd,由於rados提供的這些對底層提供這些接口,我支持不少東西,你過來鏈接我就能夠了,MDS就是咱們所說的cephfs,也就是文件系統的接口,rgw就是對象存儲,也就是在librados之上,提供給用戶使用,由於rados是底層的存儲,librados是對象的封裝的,不能給用戶直接使用的,若是它想使用,對象存儲,塊存儲,文件系統存儲是要和librados作交互的,那麼應用也能夠直接和rados之間交互,交互的時候可能就須要代碼鏈接它的庫去開發,可是通常都是經過對象存儲的接口,由於那樣的方式簡單一些。mysql

Ceph的設計思想

高性能:它的集羣可靠性,擴展性,數據安全性,接口一致性,去中心化,基於這些設計思想有了很好的性能,它的高性能就是能夠不斷的橫向擴展,提升數據的存儲速率,還有還內部還有一個crush算法,經過crush算法將數據平均分配到每一個節點上,其實就是拿了一張地圖,訪問的時候去這個地圖裏面去找,把這個數據拼起來獲取到,能夠很均衡的分配到每一臺機器上,並且還支持不少PB級的數據,其實不少公司已經作到了百PB級的數據,也就是不少的節點不少的物理機組成的集羣。linux

高擴展性:去中心化,也就是分佈式存儲,還有它的隨着節點的增加,而它線性的增加它的性能
特性豐富:支持三種存儲接口:塊,文件,對象,並且還能夠本身去開發對接不少東西。nginx

還有就是它的擴展性安全性,它是怎麼保證數據的安全性呢?
在ceph的每一個用戶,都有獨立的空間,就是你要訪問數據的話,你要有密鑰,才能訪問你想要的數據,而後每一個數據都是隔離它的,以前集中式的存儲是很難作到的。c++

高性能
a. 摒棄了傳統的集中式存儲元數據尋址的方案,採用CRUSH算法,數據分佈均衡,並行度高
b.考慮了容災域的隔離,可以實現各種負載的副本放置規則,例如跨機房、機架感知等
c. 可以支持上千個存儲節點的規模,支持TB到PB級的數據
高可擴展性
a. 去中心化
b. 擴展靈活
c. 隨着節點增長而線性增加
特性豐富
a. 支持三種存儲接口:塊存儲、文件存儲、對象存儲
b. 支持自定義接口,支持多種語言驅動 算法

Ceph核心概念

RADOS
全稱Reliable Autonomic Distributed Object Store,便可靠的、自動化的、分佈式對象存儲系統。RADOS是Ceph集羣的精華,用戶實現數據分配、Failover等集羣操做。
rados主要是可靠的,自動化的,分佈式對象存儲系統,數據主要是經過rados來存儲的,給用戶來實現分配,包含一個故障的切換,它的自我修復,ceph某個節點osd或者某個盤塊了以後,進行數據的從新分佈,它會把壞盤的數據遷移走,加個新盤把數據遷移過來,都是經過rados來實現的,因此這是最核心的部分,咱們作操做的時候基本不會對這個東西作任何改變。sql

Librados
Rados提供庫,由於RADOS是協議很難直接訪問,所以上層的RBD、RGW和CephFS都是經過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
librados是一個容許應用程序直接訪問的庫(c++,java,python,ruby)它是rgw、rbd、cephfs都是經過librados來訪問的,只有經過librados才能訪問到底層的存儲。

Crush
Crush算法是Ceph的兩大創新之一,經過Crush算法的尋址操做,Ceph得以摒棄了傳統的集中式存儲元數據尋址方案。而Crush算法在一致性哈希基礎上很好的考慮了容災域的隔離,使得Ceph可以實現各種負載的副本放置規則,例如跨機房、機架感知等。同時,Crush算法有至關強大的擴展性,理論上能夠支持數千個存儲節點,這爲Ceph在大規模雲環境中的應用提供了先天的便利。
crush算法是ceph的創新之一吧,就是由於有這個東西,因此才能實現很快的尋址,很快的找到數據,其實當ceph達到必定程度的時候,就是傳統的尋址方案會有必定的瓶頸,也就是ceph的算法一致性hash的容災性隔離,能夠把ceph存儲方案的尋址理解成數據庫中的索引,好比有了索引以後,去查數據很快,我有一個地方存放在哪裏,crush就是作這個用的,經過這些算法來提供數據的檢索能力,擴展快,包含擴展到幾千個節點的時候,也能很快的去尋找到數據,這就是crush算法。

Pool

Pool是存儲對象的邏輯分區,它規定了數據冗餘的類型和對應的副本分佈策略,支持兩種類型:副本(replicated)和 糾刪碼( Erasure Code)
pool是存儲裏面一個邏輯的概念,就是它規定了數據的冗餘還有副本,默認ceph是三個副本,也就是一個數據要存三份,爲何呢,由於前面說的強的一致性,保證數據一致性的話,要對這三份數據作比較,若是任何數據的md5值有變化的時候,集羣就報錯,數據不一致有問題,強一致性,三副本也就是這一個策略,也是保證數據的冗餘性,pool是一個邏輯概念,pool裏面會有pg

PG

PG( placement group)是一個放置策略組,它是對象的集合,該集合裏的全部對象都具備相同的放置策略,簡單點說就是相同PG內的對象都會放到相同的硬盤上,PG是 ceph的邏輯概念,服務端數據均衡和恢復的最小粒度就是PG,一個PG包含多個OSD。引入PG這一層實際上是爲了更好的分配數據和定位數據;

爲何會有PG這個概念呢?若是沒有pg的話,存儲寫了一份數據,好比這個數據是8M的,那在ceph存儲的時候8M會分紅2份,4M去存儲,當數據量達到必定級別的時候,就會有不少不少的對象,那麼PG來作什麼,把它們這些數據均衡的分佈到每一個歸檔起來,好比一份數據三副本,可能會放到3個PG裏面,那麼這樣的話,就保證將這些數據歸置在一塊兒,crush算法找的時候會找這些pg,pg再找這些對象,就很快,分組的概念,引進這個就是主要來分配數據,定位數據,分配數據是把多副本放到不一樣的pg上,pg有主有備一個對象在這個pg上是主,在另一個節點是備,那麼它很均衡把這個數據存放在每一個pg裏面,那就保證互相冗餘,其中咱們一個節點掛了,咱們另外一個有對象的數據,pg就是這個概念。

Object
簡單來講塊存儲讀寫快,不利於共享,文件存儲讀寫慢,利於共享。可否弄一個讀寫快,利 於共享的出來呢。因而就有了對象存儲。最底層的存儲單元,包含元數據和原始數據。
不管是rbd,仍是rgw,cephfs它最終到ceph裏面都是用一個對象來存儲的,那麼一個4M的文件,就是存儲一個4M的對象,8M就是兩個4M的文件,雖然存進去是一個比較大的文件,可是它會幫你拆分不少小份,由於這樣的話,它會提供很高的效率,ceph還有一點,就是快,快一點在於之前咱們的文件系統一個文件的數據和原數據都是放在一塊兒存儲的,而後存儲先將這些塊打散寫進磁盤裏面,這個過程當中就是沒有原數據,把全部東西都放在一塊兒,而後每一個塊要讀取哪一個塊,這樣的按順序來找,這樣的話很很慢,其實就是至關於100個速度的讀寫,可是隻讀到了其中一個塊,才知道下一個塊在哪裏,按順序把這些都找到,跟傳統的文件系統不同的地方就是它把原數據獨立出來了,它把數據的原數據單獨存放起來,這樣的話便於包含原數據,包含了它的一些對象屬性,建立時間、大小等等這些,數據是單獨存放起來的,那麼當用戶訪問的時候會先訪問原數據,那麼就知道它的名字,位置,屬性,而後這樣的話在存儲裏去找,這樣久很快了,把原數據獨立出來了,這也就是和傳統文件系統的區別。

# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)

上面這張圖,資源的劃分,文件存放進去會切割爲不少小塊,object01-object08不少的小塊,而後放在不一樣的PG裏面,而後PG會落到每一個節點上,最終存放到OSD上,最小一個對象是4M,文件有多大,就拆分多少個4M,而後存放到PG裏面,那麼這些PG有主有備,那麼用戶訪問的也是主。
ceph對象元數據
# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
那麼客戶端會訪問元數據服務器,訪問到元數據以後,而後去monitor拿一個crush map,再去OSD尋找這個數據

Ceph核心組件

OSD
OSD是負責物理存儲的進程,通常配置成和磁盤一一對應,一塊磁盤啓動一個OSD進程。主要功能是存儲數據、複製數據、平衡數據、恢復數據,以及與其它OSD間進行心跳檢查,負責響應客戶端請求返回具體數據的進程等;
Pool、PG和OSD的關係:
一個Pool裏有不少PG;
一個PG裏包含一堆對象,一個對象只能屬於一個PG,雖然是多副本的,可是每一個副本都是一個單獨的對象。
PG有主從之分,一個PG分佈在不一樣的OSD上(針對三副本類型) ,PG會放在不一樣的OSD上
OSD是物理存儲的進程,通常一個盤對應一個OSD,一個磁盤啓動一個進程,這個進程對應一個OSD,它主要的功能就是存儲數據、複製數據、平衡數據、恢復數據,來完成與其餘OSD之間的心跳檢查,還負責響應客戶端請求返回具體數據的進程,就是ceph拿數據中間不經過任何進程,不一樣的軟件,用戶是和OSD之間交互的,就是ceph雖然能夠從OSD去獲取數據,可是它是怎麼知道拿的數據在什麼位置,有多少塊是怎麼組合起來的呢?那麼它是從monitor拿的crush map,那麼這個map裏面有它想要的東西,位置,大小,元數據,拿到這個東西以後,再去拿OSD,這個就是用戶想拿到的東西。
# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
那麼這就是三個OSD,兩個pool,每一個pool放在不一樣的ODS上,這就是pool和OSD之間的關係
# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
對象都放PG裏面,而後PG又放在OSD裏面
Monitor
一個Ceph集羣須要多個Monitor組成的小集羣,它們經過Paxos同步數據,用來保存OSD的元數據。負責堅實整個Ceph集羣運行的Map視圖(如OSD Map、Monitor Map、PG Map和CRUSH Map),維護集羣的健康狀態,維護展現集羣狀態的各類圖表,管理集羣客戶端認證與受權;
monitor實際上是ceph存儲的大腦,一個ceph能夠有多個monitor,多個monitor能夠組成一個集羣,主要是經過paxos來同步數據,用來保存OSD的元數據,map裏面存放了不少的數據的信息,每一個組件,好比OSD配置的有變化了,它會告訴monitor有哪些變化,它就能夠想象成一我的的大腦,掌管着全部的信息,好比OSD掛了,它會彙報,那麼monitor也會實時的去檢測下面這些組件的健康狀態,若是這些組件沒有上報這些組件的健康狀態,那麼這個monitor是不健康的,monitor主要是這個做用,ceph是分佈式存儲,包括它們下面的組件也是分佈式的,生產上通常也是建議3個monitor,奇數的monitor來組成一個組件作高可用,任何一個monitor掛了的話,也不會影響一個的使用,這就是分佈式存儲架構的概念
MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的元數據服務。負責保存文件系統的元數據,管理目錄結構。對象存儲和塊設備存儲不須要元數據服務;
mds也就是cephfs的元數據,文件系統的共享方式,那麼它們的數據都是放在mds裏面的,負責保存文件系統的元數據,管理目錄結構,若是不用cephfs,mds是能夠不用部署的,只要用cephfs的時候才須要這個mds,mds也是能夠作成高可用的,主備模式,新版本能夠作成負載均衡的模式
Mgr
ceph 官方開發了 ceph-mgr,主要目標實現 ceph 集羣的管理,爲外界提供統一的入口。例如cephmetrics、zabbix、calamari、promethus
爲何會有這個mgr,在luminous版本以前,用的zabbix、calamari(團隊制監控面板)的好比ceph用它的metrics,prometheus,那麼想用這些東西的話,可能須要下載一些軟件,安裝上,或者本身去開發去寫,那麼這樣的話就很不方便,那麼mgr呢,主要目標實現ceph集羣的關聯,爲外界提供統一的入口,就是把這些邊緣的東西,都以插件的形式存放在存儲裏,那麼用mgr的時候ceph mgr module開啓關閉,就很方便的去使用,其實就是將這個東西集中的管理到一塊兒,mgr也能夠作成分佈式的,mgr也能夠作成分佈式的,但它只是主備的模式,當它掛了的話,是不影響集羣的使用的,只會影響用ceph監控的控制檯prometheus之類的。
RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift兼容。
就是對象存儲,對象存儲好比使用rbd寫進一個文件,是經過librados切成對象再存放到文件系統裏,這種效率是多了一層,對象存儲是直接作開發要rgw接口,用對象的形式寫到存儲裏,這就少了一層,對文件作了個轉換,librados和cephfs都是對寫文件作了個轉換,經過cephfs和rbd在文件系統寫文件同樣,若是經過rgw寫的話能夠直接對接接口,它支持s3和swift接口,經過這個接口把對象直接寫入到osd存儲裏面,這個rgw就很快,確定要比rbd和cephfs要快,因此不少公司都在用對象存儲,對於讀寫一些場景比較高的話,那麼建議使用對象存儲,像rbd和cephfs開發起來也不是很方便,像mysql只能用rbd,像cephfs對一些讀寫場景不高的對這些對一些支持,若是對性能比較高的就要用rgw。
Admin
Ceph經常使用管理接口一般都是命令行工具,如rados、ceph、rbd等命令,另外Ceph還有能夠有一個專用的管理節點,在此節點上面部署專用的管理工具來實現近乎集羣的一些管理工做,如集羣部署,集羣組件管理等。
admin就是一個管理的接口,去執行rados、ceph、rbd等命令,去執行rados就要和rados去交換,admin這個接口就是作這個的管理的,另外ceph還有一個專用的管理節點,它能夠管理集羣的部署,集羣的組件。

Ceph三種存儲類型

一、 塊存儲(RBD)
優勢:
經過Raid與LVM等手段,對數據提供了保護;
多塊廉價的硬盤組合起來,提升容量;
多塊磁盤組合出來的邏輯盤,提高讀寫效率;
缺點:
採用SAN架構組網時,光纖交換機,造價成本高;
主機之間沒法共享數據;
使用場景
docker容器、虛擬機磁盤存儲分配;
日誌存儲;
文件存儲;
塊存儲其實就是模擬磁盤,經過raid與lvm手段進行對數據的一些保護,其實ceph集羣若是想用rbd的板塊,ceph會經過軟件給你一個塊,用戶能夠把這個塊拿出來以後,對這個塊作格式化,或者直接在板塊去寫,像vmware的底層都是往塊裏面去寫,塊的讀寫速度要比文件系統要高,塊主要是多塊廉價的硬盤組合起來的,多塊磁盤組合出來的邏輯盤提高讀寫效率,這就是以一個成本的角度去考慮
缺點呢就是就是成本高主機之間沒法共享數據
爲何會有cephfs就是rbd不支持直接的數據共享,若是數據共享的話,把rbd格式化,而後mount到本地,而後再經過服務器exports,直接把格式化好的盤釋放給用戶,通常它的使用場景就是pod,經過pv,pvc的形式把它掛上,或者日誌存儲,文件存儲,就是侷限於一些場景,對塊支持的一些場景,塊比文件系統優點讀寫速度要比文件系統要快。

二、文件存儲(CephFS)
優勢:
造價低,隨便一臺機器就能夠了;
方便文件共享;
缺點:
讀寫速率低;
傳輸速率慢;
使用場景
日誌存儲;
FTP、NFS;
其它有目錄結構的文件存儲
這個就是造價低,方便文件共享,缺點就是讀寫速率比較低,傳輸速率也比較慢,使用場景通常也是使用NFS,日誌存儲,那麼文件存儲其實就是咱們直接mount,在客戶端用mount命令,存儲上的一塊空間,mount到本地,這就是cephfs的優勢,要是塊的話須要作一些出來才能mount到本地。
三、對象存儲(Object)(適合更新變更較少的數據)
優勢:
具有塊存儲的讀寫高速;
具有文件存儲的共享等特性;
使用場景
圖片存儲;
視頻存儲;
對象存儲由於它能夠直接與底層交互,直接寫進去就是對象,不用作任何處理,因此它會很快,那麼公司要用對象存儲的話,可能會用到一些開發成本,好比可能會調一些s3的接口,經過python拉取一些數據,寫一些數據,對集羣的開發作一些備份,作一些監控,都是經過這個s3這個接口,主要是快,一個是功能多,開發出來方便易用,這裏面會有一些開發成本。
# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
這個client去map拿數據,而後它會去下面這個OSD去找文件,那麼這個OSD有主有副本,只有主纔會提供服務,副本是不作任何改動的,ssd和hdd的盤怎麼分配,(ssd即固態硬盤,hdd即機械硬盤)你在集羣裏要設置盤符,ceph命令去看的時候會有ssd和hdd的標識,經過這個標識它會把這個主副本frimary放到性能比較好的盤上,把其餘副本放到其餘盤上,也能夠手動的去調節這個權重,讓數據分佈的概念股均勻一些。
# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(1)
Client會去monitor去創建鏈接,這個創建鏈接就是先拿到crush map,而後若是讀數據的話,直接去副本去讀數據就能夠了,讀完數據就直接返回一個數據,若是client去集羣寫數據的話,那麼ceph有強一致性,就是寫數據的時候主副本寫完了,這個數據是不能讀的,只有等主副本讓其餘副本把這個數據同步完以後,它們三副本之間會有通訊,三個接口通訊完成確認數據一致以後才能夠去讀取,這也就是一個強一致的由來。
部署ceph集羣

1、Ceph版本選擇

Ceph版原本源介紹
Ceph 社區最新版本是 14,而 Ceph 12 是市面用的最廣的穩定版本。
第一個 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年來,版本號方案一直沒變,直到 2015 年 4 月 0.94.1 ( Hammer 的第一個修正版)發佈後,這個通常早期作存儲的公司會用到,用的比較多的早期是16年的jewel版本,爲了不 0.99 (以及 0.100 或 1.00 ?),制定了新策略。
x.0.z - 開發版(給早期測試者和勇士們)(社區提供的開發或者合做夥伴提供的開發版本)
x.1.z - 候選版(用於測試集羣、高手們)(提供一些bug,作一些測試)
x.2.z - 穩定、修正版(給用戶們)(真正給咱們用的都是這個x.2.z版本穩定、修正版也就是發佈出來玩嗎能夠是直接在生產去用的)
x 將從 9 算起,它表明 Infernalis ( I 是第九個字母),這樣第九個發佈週期的第一個開發版就是 9.0.0 ;後續的開發版依次是 9.0.1 、 9.0.2 等等。
如今通常公司用的比較多的是luminous版本,也已經2年的時間了
通常呢,生產用的比較多的仍是luminous版本,12.2.12

ceph官方網站:https://ceph.io
ceph官方文檔網站:https://docs.ceph.com/docs/master/
ceph中文文檔網站:http://docs.ceph.org.cn

Luminous新版本特性
Bluestore
ceph-osd的新後端存儲BlueStore已經穩定,是新建立的OSD的默認設置。
BlueStore經過直接管理物理HDD或SSD而不使用諸如XFS的中間文件系統,來管理每一個OSD存儲的數據,這提供了更大的性能和功能。
BlueStore支持Ceph存儲的全部的完整的數據和元數據校驗。
BlueStore內嵌支持使用zlib,snappy或LZ4進行壓縮。(Ceph還支持zstd進行RGW壓縮,但因爲性能緣由,不爲BlueStore推薦使用zstd)

集羣的整體可擴展性有所提升。咱們已經成功測試了多達10,000個OSD的集羣。
ceph-mgr
ceph-mgr是一個新的後臺進程,這是任何Ceph部署的必須部分。雖然當ceph-mgr中止時,IO能夠繼續,可是度量不會刷新,而且某些與度量相關的請求(例如,ceph df)可能會被阻止。咱們建議您多部署ceph-mgr的幾個實例來實現可靠性。
ceph-mgr守護進程daemon包括基於REST的API管理。注:API仍然是實驗性質的,目前有一些限制,但將來會成爲API管理的基礎。
ceph-mgr還包括一個Prometheus插件。
ceph-mgr如今有一個Zabbix插件。使用zabbix_sender,它能夠將集羣故障事件發送到Zabbix Server主機。這樣能夠方便地監視Ceph羣集的狀態,並在發生故障時發送通知。

以前的版本還有jewel用的都是filestore,如今是bluestore,那麼什麼是filestore,什麼是bluestore,也就是filestore傳進來的是一個文件,存儲進行一個處理,能夠這麼說filestore是一個磁盤,格式化以後再往裏面寫,至關於一個文件了,寫完文件以後,filestore再把這個文件轉換成對象寫到rados裏面,filestore是多了一層,可能效率會有點低。
那麼新版本用的是bluestore,能夠直接管理物理盤,就是插上這個盤以後不需任何處理,直接ceph-deploy create一下就變成一個osd存儲空間了,bluestore的特性呢能夠直接管理硬盤,管理裸盤,存放進去的就存放到osd這個進程裏
並且bluestore還支持壓縮,使用snappy、zlib或lz4支持內聯壓縮,壓縮完以後實際存到文件大小是有變化的,查看一個對象大小的時候,會有必定的縮小,luminous先版本特性呢比以前的擴展性提升了,聽說能夠達到1萬個osd,osd的概念是咱們用100個osd,10000個ods

還有一個ceph-mgr,這個是管理這個插件,管理這個API,它是一個後臺進程,而後經過多個mgr實現高可用

2、安裝前準備

安裝要求
最少三臺Centos7系統用於部署Ceph集羣。硬件配置:2C4G,另外每臺機器最少掛載三塊硬盤(每塊盤5G-20G)

cephnode01 192.168.1.2
cephnode02 192.168.1.8  
cephnode03 192.168.1.11

內網yum源服務器,硬件配置2C4G
cephyumresource01 192.168.1.14

環境準備(在Ceph三臺機器上操做)
(1)關閉防火牆:

systemctl stop firewalld
systemctl disable firewalld

(2)關閉selinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

(3)關閉NetworkManager
systemctl disable NetworkManager && systemctl stop NetworkManager
(4)添加主機名與IP對應關係:

vim /etc/hosts
192.168.1.2 cephnode01
192.168.1.8 cephnode02
192.168.1.11 cephnode03

(5)設置主機名:

hostnamectl set-hostname cephnode01
hostnamectl set-hostname cephnode02
hostnamectl set-hostname cephnode03

(6)同步網絡時間和修改時區

systemctl restart chronyd.service && systemctl enable chronyd.service
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

(7)設置文件描述符

echo "ulimit -SHn 102400" >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF

(8)內核參數優化

cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
echo "vm.swappiness = 0" /etc/sysctl.conf 
EOF
sysctl -p

(9)在cephnode01上配置免密登陸到cephnode0二、cephnode03

ssh-keygen

ssh-copy-id root@cephnode02
ssh-copy-id root@cephnode03

(10)read_ahead,經過數據預讀而且記載到隨機訪問內存方式提升磁盤讀操做,至關於把常常讀的數據存到緩存一份。
echo "8192" &gt; /sys/block/sda/queue/read_ahead_kb
(11) I/O Scheduler,SSD要用noop,SATA/SAS使用deadline,這個其實就是磁盤一種調度文件方式,ssd用noop,由於ssd的讀寫速度比較快,就給把循環讀的方式關掉了,sata用deadline,也是一種調度方式SATA的優點:支持熱插拔 ,傳輸速度快,執行效率高,一樣這一塊是操做系統方面的優化方案,因此主要的做用也是用於優化磁盤性能,提供讀寫速率

echo "deadline" >/sys/block/sd[x]/queue/scheduler
echo "noop" >/sys/block/sd[x]/queue/scheduler

3、安裝內網yum源

一、安裝httpd、createrepo和epel源,這裏至關於本身搭建一個服務器網站,使用httpd,將所須要依賴的文件放在咱們的網站根目錄下,由於在新版nautilus須要不少的依賴包,咱們更新yum源的時候就能讀取到咱們的依賴,就不用每臺去下載這些文件了。

yum install httpd createrepo epel-release -y
systemctl start httpd

二、編輯yum源文件

[root@cephyumresource01 ~]# more /etc/yum.repos.d/ceph.repo 
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

三、下載Ceph安裝包,下載ceph依賴文件,因爲依賴文件比較多,下載也會耽誤時間,部署找這些依賴包就耽擱不少的時間,因此這裏我打成包,須要的找我要

已託管百度雲盤:連接:https://pan.baidu.com/s/1vOhcdN09tL1i222Jhy-8mg

使用我打包好的文件
mkdir -pv /var/www/html/
將ceph的包放進這個目錄去解壓

四、更新yum源
createrepo --update /var/www/html/ceph/rpm-nautilus

4、安裝Ceph集羣

一、編輯內網yum源,將yum源同步到其它節點並提早作好yum makecache
若是makecache不了,那麼就去找相關的包進行去下載
使用sed -i 's/192.168.1.14/xxxxx/'g /etc/yum.repos.d/ceph.repo將本身的yum內網地址放進去,執行makecahe,少包的對應網站去下載

[root@cephnode01 ~]# cat /etc/yum.repos.d/ceph.repo 
[Ceph]
name=Ceph packages for $basearch
baseurl=http://192.168.1.14/ceph/rpm-nautilus/el7/$basearch
gpgcheck=0
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://192.168.1.14/ceph/rpm-nautilus/el7/noarch
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://192.168.1.14/ceph/rpm-nautilus/el7/SRPMS
gpgcheck=0
priority=1

二、安裝ceph-deploy(確認ceph-deploy版本是否爲2.0.1),官方提供部署軟件的一個工具,這個在一個節點安裝就能夠,做爲管理的工具
yum install -y ceph-deploy
建立一個my-ceph目錄,全部命令在此目錄下進行(文件位置和名字能夠隨意),這個也是在一個節點建立

mkdir /my-cluster
cd /my-cluster

建立一個Ceph集羣,new建立一個新的

ceph-deploy new cephnode01 cephnode02 cephnode03
[ceph_deploy.new][DEBUG ] Resolving host cephnode02
[ceph_deploy.new][DEBUG ] Monitor cephnode02 at 192.168.1.8
[ceph_deploy.new][DEBUG ] Monitor initial members are ['cephnode01, 'cephnode02, ‘cephnode03']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.1.2, '192.168.1.8', '192.168.1.11']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
這個顯示的是裏面的成員,下面是monitor的地址
[ceph_deploy.new][DEBUG ] Monitor initial members are ['cephnode01, 'cephnode02, ‘cephnode03']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.1.2, '192.168.1.8', '192.168.1.11']

建立好以後能夠看到咱們默認的配置文件

[root@cephnode01 my-cluster]# more ceph.conf 
[global]
fsid = e56c3ad6-c2f9-40e6-9c87-9891b3d9a418    集羣編號
mon_initial_members = cephnode01, cephnode02, cephnode03     mon主機名名稱
mon_host = 192.168.1.2,192.168.1.8,192.168.1.11    mon地址
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

五、安裝Ceph軟件(每一個節點執行)

yum -y install epel-release
yum install -y ceph

能夠看到最新版nautilus版本

ceph -v
ceph version 14.2.7 (3d58626ebeec02d8385a4cefb92c6cbc3a45bfe8) nautilus (stable)

執行安裝完ceph,會在默認的目錄下生成配置文件,還會將一些基礎的配置都寫進去
六、生成monitor檢測集羣所使用的的祕鑰,這個組件是使用密鑰來通訊的,包括組件的心跳檢測,經過密鑰來獲取文件,生成祕鑰,就是全部的rgw,mgr,都是拿這個祕鑰進行交互的,安裝的時候就會把這個祕鑰推送下去,

ceph-deploy mon create-initial     將部署監控中定義「mon」,等到它們造成以後而後經過gatherkeys,

七、沿着過程報告監控狀態
安裝Ceph Client,方便執行一些管理命令,執行這布也主要是讓你在ceph上執行一些命令,若是不寫進去的話,它不會認爲這是一個集羣的

ceph-deploy admin cephnode01 cephnode02 cephnode03

八、執行完能夠看到在其餘的節點已經寫入了,包含了管理員的祕鑰,以及配置文件都推送過來了

[root@cephnode02 ceph]# ls
ceph.client.admin.keyring  ceph.conf  rbdmap  tmpDWFr_S

九、配置mgr,用於管理集羣
ceph-deploy mgr create cephnode01 cephnode02 cephnode03

十、部署rgw,這個使用對象存儲的時候纔會用到,這個rgw能夠放在多個機器上,通常生產環境都是裝在多個機器上,而後拿nginx作負載均衡

yum install -y ceph-radosgw
ceph-deploy rgw create cephnode01   加入到集羣裏

十一、部署MDS(CephFS)
ceph-deploy mds create cephnode01 cephnode02 cephnode03
十二、添加osd。平衡以後,那麼這個ceph集羣就安裝完了
我這個機器就加了三個盤

[root@cephnode01 my-cluster]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   39G  0 part 
  ├─centos-root 253:0    0 35.1G  0 lvm  /
  └─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
sdd               8:16   0   20G  0 disk 
sde               8:32   0   20
sdf               8:80   0   20G  0 diskG  0 disk
sr0              11:0    1  4.2G  0 rom  /run/media/root/CentOS 7 x86_64

這裏根據本身的設備去添加,若是遇到添加磁盤以後fdisk -l 或者lsblk發現沒有磁盤
能夠經過2個辦法去解決,不用關機
1)查看主機總線號

[root@cephnode01 my-cluster]# ls /sys/class/scsi_host
host0  host1  host2

2)從新掃描總線scsi設備

[root@cephnode02 ceph]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@cephnode02 ceph]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@cephnode02 ceph]# echo "- - -" > /sys/class/scsi_host/host2/scan
................................................................................................host10/scan

這個只在cephnode01操做就能夠,直接將盤加入上

ceph-deploy osd create --data /dev/sdb cephnode01
ceph-deploy osd create --data /dev/sdb cephnode02
ceph-deploy osd create --data /dev/sdb cephnode03

ceph-deploy osd create --data /dev/sdc cephnode01
ceph-deploy osd create --data /dev/sdc cephnode02
ceph-deploy osd create --data /dev/sdc cephnode03

ceph-deploy osd create --data /dev/sdd cephnode01
ceph-deploy osd create --data /dev/sdd cephnode02
ceph-deploy osd create --data /dev/sdd cephnode03

1三、加完以後能夠經過ceph osd tree查看到添加的盤

[root@cephnode01 my-cluster]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF 
-1       0.01859 root default                                
-3       0.01859     host cephnode01                         
 0   hdd 0.01859         osd.0           up  1.00000 1.00000

5、Ceph集羣維護命令小結

一、查看集羣狀態

[root@cephnode01 my-cluster]# ceph -s
  cluster:
    id:     e56c3ad6-c2f9-40e6-9c87-9891b3d9a418
    health: HEALTH_WARN
            Reduced data availability: 8 pgs inactive
            Degraded data redundancy: 8 pgs undersized
            OSD count 1 < osd_pool_default_size 3
            too few PGs per OSD (8 < min 30)

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 45m)
    mgr: cephnode01(active, since 35m), standbys: cephnode02, cephnode03
    osd: 1 osds: 1 up (since 3m), 1 in (since 3m)

  data:
    pools:   1 pools, 8 pgs
    objects: 0 objects, 0 B
    usage:   1.0 GiB used, 18 GiB / 19 GiB avail
    pgs:     100.000% pgs not active
             8 undersized+peered

二、將三個節點都加進來能夠經過tree 查看

[root@cephnode01 my-cluster]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF 
-1       0.05576 root default                                
-3       0.01859     host cephnode01                         
 0   hdd 0.01859         osd.0           up  1.00000 1.00000 
-5       0.01859     host cephnode02                         
 1   hdd 0.01859         osd.1           up  1.00000 1.00000 
-7       0.01859     host cephnode03                         
 2   hdd 0.01859         osd.2           up  1.00000 1.00000

三、將盤都加進來平衡以後就OK狀態了

[root@cephnode01 my-cluster]# ceph -s
  cluster:
    id:     e56c3ad6-c2f9-40e6-9c87-9891b3d9a418
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 50m)
    mgr: cephnode01(active, since 41m), standbys: cephnode02, cephnode03
    osd: 3 osds: 3 up (since 68s), 3 in (since 68s)
    rgw: 1 daemon active (cephnode01)

  data:
    pools:   4 pools, 32 pgs
    objects: 187 objects, 1.2 KiB
    usage:   3.0 GiB used, 54 GiB / 57 GiB avail
    pgs:     32 active+clean

要是在生產當中,數據量比較大的時候,在加盤的時候,它會作平衡,集羣經過crush算法平衡把這些pg,對象寫到新盤上,它會作些運算,會把數據均衡到新加的盤上,等全部的平衡完以後,這個就能給用戶正常提供訪問了,它有三種狀態,一種是OK,一種是WARN,

四、查看集羣日誌,詳細信息,通常集羣出現問題可使用這條命令進行排錯

[root@cephnode01 my-cluster]# ceph health detail
HEALTH_OK

或者使用ceph -w,觀察集羣正在發生的事件

[root@cephnode01 my-cluster]# ceph -w
  cluster:
    id:     e56c3ad6-c2f9-40e6-9c87-9891b3d9a418   集羣惟一標識符
    health: HEALTH_OK   集羣健康狀態

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 64m)  監視器法定人數
    mgr: cephnode01(active, since 55m), standbys: cephnode02, cephnode03
    osd: 3 osds: 3 up (since 15m), 3 in (since 15m)  osd狀態
    rgw: 1 daemon active (cephnode01)

  data:
    pools:   4 pools, 32 pgs
    objects: 187 objects, 1.2 KiB
    usage:   3.0 GiB used, 54 GiB / 57 GiB avail
    pgs:     32 active+clean

五、檢查集羣的數據用量及其存儲池內的分佈狀況,可使用df命令

[root@cephnode01 my-cluster]# ceph df
RAW STORAGE:
    CLASS     SIZE       AVAIL      USED       RAW USED     %RAW USED 
    hdd       57 GiB     54 GiB     14 MiB      3.0 GiB          5.29 
    TOTAL     57 GiB     54 GiB     14 MiB      3.0 GiB          5.29 

POOLS:
    POOL                    ID     STORED      OBJECTS     USED        %USED     MAX AVAIL 
    .rgw.root                1     1.2 KiB           4     768 KiB         0        17 GiB 
    default.rgw.control      2         0 B           8         0 B         0        17 GiB 
    default.rgw.meta         3         0 B           0         0 B         0        17 GiB 
    default.rgw.log          4         0 B         175         0 B         0        17 GiB

六、也能夠查看osd盤的數據使用量,數據有沒有平衡,能夠詳細列出集羣每塊磁盤的使用狀況,包括大小、權重、使用多少空間、使用率等等

[root@cephnode01 my-cluster]# ceph osd df

ID CLASS WEIGHT  REWEIGHT SIZE   RAW USE DATA    OMAP META  AVAIL  %USE VAR  PGS STATUS 
 0   hdd 0.01859  1.00000 19 GiB 1.0 GiB 4.6 MiB  0 B 1 GiB 18 GiB 5.29 1.00  32     up 
 1   hdd 0.01859  1.00000 19 GiB 1.0 GiB 4.6 MiB  0 B 1 GiB 18 GiB 5.29 1.00  32     up 
 2   hdd 0.01859  1.00000 19 GiB 1.0 GiB 4.6 MiB  0 B 1 GiB 18 GiB 5.29 1.00  32     up 
                    TOTAL 57 GiB 3.0 GiB  14 MiB  0 B 3 GiB 54 GiB 5.29                 
MIN/MAX VAR: 1.00/1.00  STDDEV: 0

查看pools

[root@cephnode01 my-cluster]# ceph osd lspools
1 .rgw.root
2 default.rgw.control
3 default.rgw.meta
4 default.rgw.log

查看osd的狀態

[root@cephnode01 my-cluster]# ceph osd dump
epoch 34
fsid e56c3ad6-c2f9-40e6-9c87-9891b3d9a418
created 2020-03-01 17:33:06.948592
modified 2020-03-01 18:22:55.149810
flags sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit
crush_version 11
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client jewel
min_compat_client jewel
require_osd_release nautilus

查看pg狀態,能夠看到天天pg建立的時間,存儲的大小

[root@cephnode01 my-cluster]# ceph pg dump
dumped all
version 2838
stamp 2020-03-01 19:16:43.668988
last_osdmap_epoch 0
last_pg_scan 0

[root@cephnode01 my-cluster]# ceph pg stat
32 pgs: 32 active+clean; 1.2 KiB data, 14 MiB used, 54 GiB / 57 GiB avail

七、檢查集羣狀態

ceph status 和ceph -s是同樣的命令
[root@cephnode01 my-cluster]# ceph status

  cluster:
    id:     e56c3ad6-c2f9-40e6-9c87-9891b3d9a418
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 82m)
    mgr: cephnode01(active, since 72m), standbys: cephnode02, cephnode03
    osd: 3 osds: 3 up (since 32m), 3 in (since 32m)
    rgw: 1 daemon active (cephnode01)

  data:
    pools:   4 pools, 32 pgs
    objects: 187 objects, 1.2 KiB
    usage:   3.0 GiB used, 54 GiB / 57 GiB avail
    pgs:     32 active+clean

八、檢查monitor狀態
查看監視圖
可使用兩條命令查看

[root@cephnode01 my-cluster]# ceph mon stat

e1: 3 mons at {cephnode01=[v2:192.168.1.2:3300/0,v1:192.168.1.2:6789/0],cephnode02=[v2:192.168.1.8:3300/0,v1:192.168.1.8:6789/0],cephnode03=[v2:192.168.1.11:3300/0,v1:192.168.1.11:6789/0]}, election epoch 8, leader 0 cephnode01, quorum 0,1,2 cephnode01,cephnode02,cephnode03

[root@cephnode01 my-cluster]# ceph mon dump

dumped monmap epoch 1
epoch 1
fsid e56c3ad6-c2f9-40e6-9c87-9891b3d9a418
last_changed 2020-03-01 17:32:48.597113
created 2020-03-01 17:32:48.597113
min_mon_release 14 (nautilus)
0: [v2:192.168.1.2:3300/0,v1:192.168.1.2:6789/0] mon.cephnode01
1: [v2:192.168.1.8:3300/0,v1:192.168.1.8:6789/0] mon.cephnode02
2: [v2:192.168.1.11:3300/0,v1:192.168.1.11:6789/0] mon.cephnode03

九、檢查監視器的法定人數狀態

[root@cephnode01 my-cluster]# ceph quorum_status

{"election_epoch":8,"quorum":[0,1,2],"quorum_names":["cephnode01","cephnode02","cephnode03"],"quorum_leader_name":"cephnode01","quorum_age":5173,"monmap":{"epoch":1,"fsid":"e56c3ad6-c2f9-40e6-9c87-9891b3d9a418","modified":"2020-03-01 17:32:48.597113","created":"2020-03-01 17:32:48.597113","min_mon_release":14,"min_mon_release_name":"nautilus","features":{"persistent":["kraken","luminous","mimic","osdmap-prune","nautilus"],"optional":[]},"mons":[{"rank":0,"name":"cephnode01","public_addrs":{"addrvec":[{"type":"v2","addr":"192.168.1.2:3300","nonce":0},{"type":"v1","addr":"192.168.1.2:6789","nonce":0}]},"addr":"192.168.1.2:6789/0","public_addr":"192.168.1.2:6789/0"},{"rank":1,"name":"cephnode02","public_addrs":{"addrvec":[{"type":"v2","addr":"192.168.1.8:3300","nonce":0},{"type":"v1","addr":"192.168.1.8:6789","nonce":0}]},"addr":"192.168.1.8:6789/0","public_addr":"192.168.1.8:6789/0"},{"rank":2,"name":"cephnode03","public_addrs":{"addrvec":[{"type":"v2","addr":"192.168.1.11:3300","nonce":0},{"type":"v1","addr":"192.168.1.11:6789","nonce":0}]},"addr":"192.168.1.11:6789/0","public_addr":"192.168.1.11:6789/0"}]}}

十、mgr的狀態
[root@cephnode01 my-cluster]# ceph mgr dump

6、Ceph.conf 配置文件詳解

默認生成的ceph.conf文件若是須要改動的話須要加一些參數
若是配置文件變化也是經過ceph-deploy進行推送

一、該配置文件採用init文件語法,#和;爲註釋,ceph集羣在啓動的時候會按照順序加載全部的conf配置文件。 配置文件分爲如下幾大塊配置

global:全局配置。
osd:osd專用配置,可使用osd.N,來表示某一個OSD專用配置,N爲osd的編號,如0、二、1等。
mon:mon專用配置,也可使用mon.A來爲某一個monitor節點作專用配置,其中A爲該節點的名稱,ceph-monitor-二、ceph-monitor-1等。使用命令 ceph mon dump能夠獲取節點的名稱。
client:客戶端專用配置

二、配置文件能夠從多個地方進行順序加載,若是衝突將使用最新加載的配置,其加載順序爲。

$CEPH_CONF環境變量
-c 指定的位置
/etc/ceph/ceph.conf
~/.ceph/ceph.conf
./ceph.conf

三、配置文件還可使用一些元變量應用到配置文件,如。

$cluster:當前集羣名。
$type:當前服務類型。
$id:進程的標識符。
$host:守護進程所在的主機名。
$name:值爲$type.$id。

四、ceph.conf詳細參數

[global]#全局設置
fsid = xxxxxxxxxxxxxxx                           #集羣標識ID 
mon host = 10.0.1.1,10.0.1.2,10.0.1.3            #monitor IP 地址
auth cluster required = cephx                    #集羣認證
auth service required = cephx                           #服務認證
auth client required = cephx                            #客戶端認證
osd pool default size = 3                             #最小副本數 默認是3
osd pool default min size = 1                           #PG 處於 degraded 狀態不影響其 IO 能力,min_size是一個PG能接受IO的最小副本數,也就是副本到1個就不能用了,副本的降級。保護數據的安全性
public network = 10.0.1.0/24                            #公共網絡(monitorIP段) 給用戶專門的網絡
cluster network = 10.0.2.0/24                           #集羣網絡,它要和集羣直接要進行數據同步,好比要提升osd節點,數據須要複製進行遷移,那麼在遷移的過程當中可能會須要很大的網絡帶寬,通常這個在公司網絡裏面都是萬兆網,給用戶用的看訪問量,通常也都是萬兆網,除了公共網絡和集羣網絡以外還可使用一個管理網絡,來單獨的管理這個集羣池,主要用於數據進行同步的時候,傳遞更快一些。
max open files = 131072                                 #默認0#若是設置了該選項,Ceph會設置系統的max open fds ceps打開的最大文件數。
mon initial members = node1, node2, node3               #初始monitor (由建立monitor命令而定)初始化monitor,前面就是一些全局的配置
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1                             #默認值0.05#monitor間的clock drift,保證集羣之間是一致的
mon osd min down reporters = 13                         #默認值1#向monitor報告down的最小OSD數,最低是13個,也就是超過13個這個集羣就是不能用了

mon osd down out interval = 600      #默認值300      #標記一個OSD狀態爲down和out以前ceph等待的秒數
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd mkfs type = xfs                                     #格式化系統類型,默認的ceph使用的就是這種模式,生產通常也是使用這個文件系統
osd max write size = 512 #默認值90                   #OSD一次可寫入的最大值(MB)
osd client message size cap = 2147483648 #默認值100    #客戶端容許在內存中的最大數據(bytes)
osd deep scrub stride = 131072 #默認值524288         #在Deep Scrub時候容許讀取的字節數(bytes)集羣的健康檢查,就是存放數據,它有可能會損壞,一個副本少了一個字節,那麼這個md5就不一致了,scrub就是去掃描這些數據,保證這些數據是一致的,這個通常對一些元數據信息作對比,因此這裏設置了容許scrbu的字節數,
osd op threads = 16 #默認值2                         #併發文件系統操做數
osd disk threads = 4 #默認值1                        #OSD密集型操做例如恢復和Scrubbing時的線程
osd map cache size = 1024 #默認值500                 #保留OSD Map的緩存(MB)
osd map cache bl size = 128 #默認值50                #OSD進程在內存中的OSD Map緩存(MB)
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" #默認值rw,noatime,inode64  #Ceph OSD xfs Mount選項
osd recovery op priority = 2 #默認值10              #恢復操做優先級,取值1-63,值越高佔用資源越高
osd recovery max active = 10 #默認值15              #同一時間內活躍的恢復請求數 ,當必定量恢復比較快的時候,集羣有可能就會卡住,可能寫數據讀數據不到,要是對這些作一些限制的話,可能會對集羣的壓力會小一點,有處理承載請求的能力,若是集羣壓力比較大,不作這些限制的話,內部不作限制的話,有可能就會卡住
osd max backfills = 4  #默認值10                  #一個OSD容許的最大backfills數
osd min pg log entries = 30000 #默認值3000           #修建PGLog是保留的最大PGLog數
osd max pg log entries = 100000 #默認值10000         #修建PGLog是保留的最大PGLog數
osd mon heartbeat interval = 40 #默認值30            #OSD ping一個monitor的時間間隔(默認30s)
ms dispatch throttle bytes = 1048576000 #默認值 104857600 #等待派遣的最大消息數
objecter inflight ops = 819200 #默認值1024           #客戶端流控,容許的最大未發送io請求數,超過閥值會堵塞應用io,爲0表示不受限
osd op log threshold = 50 #默認值5                  #一次顯示多少操做的log
osd crush chooseleaf type = 0 #默認值爲1              #CRUSH規則用到chooseleaf時的bucket的類型
##############################################################
[client]
rbd cache = true #默認值 true      #RBD緩存
rbd cache size = 335544320 #默認值33554432           #RBD緩存大小(bytes)內存大的話能夠設置大一些,內存小的話能夠設置小一些,看生產服務器的配置了。
rbd cache max dirty = 134217728 #默認值25165824      #緩存爲write-back時容許的最大dirty字節數(bytes),若是爲0,使用write-through
rbd cache max dirty age = 30 #默認值1                #在被刷新到存儲盤前dirty數據存在緩存的時間(seconds)
rbd cache writethrough until flush = false #默認值true  #該選項是爲了兼容linux-2.6.32以前的virtio驅動,避免由於不發送flush請求,數據不回寫
              #設置該參數後,librbd會以writethrough的方式執行io,直到收到第一個flush請求,才切換爲writeback方式。
rbd cache max dirty object = 2 #默認值0              #最大的Object對象數,默認爲0,表示經過rbd cache size計算獲得,librbd默認以4MB爲單位對磁盤Image進行邏輯切分
      #每一個chunk對象抽象爲一個Object;librbd中以Object爲單位來管理緩存,增大該值能夠提高性能
rbd cache target dirty = 235544320 #默認值16777216    #開始執行回寫過程的髒數據大小,不能超過 rbd_cache_max_dirty
相關文章
相關標籤/搜索