天天看點

01@ecph分布式存儲理論 --02

分布式存儲ceph

一、ceph介紹

1.1、ceph是什麼

nfs 網絡存儲

ceph是一個統一的、分布式的存儲系統,設計初衷是提供較好的性能、可靠性和可擴充性。
# “統一的”:意味着我們可以僅憑ceph這一套存儲系統,同時提供對象存儲、塊存儲和檔案系統存儲三種功能,這極大地簡化了不同應用需求下的部署和運維工作。 
# “分布式”:ceph實作了真正的去中心化,理論上可以無限擴充叢集系統的規模
# ceph:
統一的:同時支援多種存儲的應用形式
    1、塊存儲
    2、檔案存儲
    3、對象存儲
    
分布式:
傳統叢集架構:叢集規模增大,mysql資料庫的叢集規模必然也要随之增大,這完全就是集中式思想帶來的弊端      

了解:

Ceph項目最早起源于Sage就讀博士期間的工作(最早的成果手2004年發表),并随後貢獻給開源社群。在經過了數年的發展之後,目前已得到衆多雲計算廠商的支援并被廣泛應用。RedHat及OpenStack都可與Ceph整合以支援虛拟機鏡像的後端存儲。      

1.2什麼是塊存儲、檔案存儲、對象存儲

1.21 備知識: 塊級與檔案級
  • 1、塊級
磁盤的最小讀寫機關為扇區,1個或多個連續的扇區組成一個block塊,也叫實體塊,是作業系統讀寫硬碟的機關
[root@admin ~]# blockdev --getbsz /dev/sda1
512      
  • 檔案級
檔案是檔案系統提供的功能,單個檔案可能由于一個或多個邏輯塊組成,且邏輯塊之間是不連續分布。邏輯塊大于或等于實體塊整數倍 
實體塊與檔案系統之間的映射關系為:
邏輯檔案----切分----》多個邏輯檔案塊----》實體塊block---->扇區

# 注意:
這麼多層轉換,肯定是需要耗費效率的,如果操作的是對象,則可以直接省去這麼多層映射關系,效率自然是高      
01@ecph分布式存儲理論 --02
1.2.2 塊存儲、檔案存儲、對象存儲
1.塊存儲
01@ecph分布式存儲理論 --02
塊存儲:儲存設備共享給用戶端的是一塊裸盤,那麼該儲存設備提供的就是塊存儲
特點:
1、用戶端可定制性強,可以自己可以制作檔案系統,然後挂載使用,或者直接把作業系統安裝在塊存儲裡
用途:
  主要用于vm的本地硬碟      
2. 檔案存儲
01@ecph分布式存儲理論 --02
檔案存儲:為了解決多伺服器之間共享資料,并且保證一緻
儲存設備中分出一塊空間,然後制作檔案系統,然後在儲存設備中完成挂載,然後把檔案夾共享給用戶端用
特點: 
  1、用戶端定制性差,不能自己制作檔案系統,檔案系統是在儲存設備中制作好的,用戶端使用的就是一個檔案夾    
  2、檔案檢索與存儲過程都是在儲存設備中完成的,意味着随着客端數目的增多,儲存設備的壓力會越來越大,是以檔案存儲會限制叢集的擴充規模
用途:
  中小規模叢集的多伺服器之間共享資料,并且保證一緻      
3.對象存儲
對象存儲:為了解決多伺服器之間共享資料,并且保證一緻,并且沒有檔案系統的概念,資料的存儲分為兩部分:中繼資料+内容            
用戶端通過url位址的方式送出中繼資料與内容
特點:
    1、沒有檔案檢索的壓力,服務端不會随着客端數目的增多壓力成倍增大
用途: 分布式       

1.3 為何要用ceph

Ceph本身确實具有較為突出的優勢,晚聽這求電最廉價的裝置做最牛逼的存儲。

其先進的核心設計思想,概括為人“無需查表,算算就好"。

# 1、高性能 
a.摒球不轉統的集中式存儲中繼資料尋址的方案,采用CRUSH算法,資料分布均衡,并行度高。
b.考實了容災域的隔離,能夠實作各類負載的副本放置規則,例如跨機房、機架感覺等。
c.能夠支得上千個存儲節點的規模,支援TB到PB級的資料。

# 2、高可透性
a.副本數可以靈活控制。
b.支援故障域分隔,資料強一緻性。
c.多種故障場景自動進步燒豐自愈。
d.沒有單點故障,自動管理。高可擴充性場丢中心化。
# 3、去中心化
b.擴充靈活。
c.随着節點增加而線性增長。

# 4、特性豐富 
a.支援三種存儲接口:塊存儲、檔案存儲、對象存儲。
b.支援自定義接口,支援多種語言驅動。      

二 ceph系統的層次結構

1.簡介
自下向上,可以将Ceph系統分為四個層次:
基礎存儲系統RADOS(ReliableAutonomicDistributed Object Store,即可靠的、自動化的、分布式的對象存儲)
基礎庫LIBRADOS
      
2.高層應用接口:包括了三個部分
1、對象存儲接口:RADOS GW(RADOS Gateway)
2、塊存儲接口:RBD(Reliable Block Device)
3、檔案存儲接口:Ceph FS(Ceph File Svstem)
應用層:基于高層接口或者基礎庫librados開發出來的各種APP,或者主機、VM等諸多用戶端
      
01@ecph分布式存儲理論 --02
提示:rados叢集是ceph的服務端,依據高層接口封裝的應用則是用戶端。
      

3.ceph四層層次結構

第一層:那些存儲接口
第二層:radosge  ceph對象網關 (對象存儲) librdb (塊存儲) MDS(檔案存儲)
第三層:librados基礎庫
第四層:rados (ceph叢集)
      

三、基礎存儲系統RADOS(ceph叢集)

3.1引入

如果單台單塊伺服器在牛逼,也是有限的,我們需要考慮它的IO速度和容量。
解決方案:
縱向擴充---->不可能實作一瓶裝下長江水
橫向擴充---->n盤做raid,相當于一塊大盤,在本機使用,但是單台機器可插硬碟的總數也是有限的,仍然會受到限制
如果能通過網絡通信,那麼就可以打破單台機器的限制:一堆硬碟+軟體控制起來
做成硬碟的叢集,相當于一個大的網絡raid,這就是分布式存儲,比如ceph  # (橫向擴充)
      
01@ecph分布式存儲理論 --02

3.2 RADOS 特點

ceph的底層是RADOS,而RADOS由多個子叢集構成

ceph内部叢集的資料共享完全通過crush算法算出來,根本不需要資料庫這個元件,完全式分布式的!

ceph分布式的缺點:
  1、耗費cpu
    
任何叢集追求的三大特點:
    1、性能-》IO
    2、可靠性:沒有單點故障
    3、可擴充性:未來可以理論上無限擴充叢集規模
      

3.2 RADOS的子叢集

01@ecph分布式存儲理論 --02
pg  歸規組
mds 檔案系統提供中繼資料 (檔案存儲)  
monitor 監控叢集
osd 複制響應用戶端請教傳回具體資料的程序
mds  依賴源資料的服務
libradio 基礎庫
radosge  ceph對象網關 (對象存儲)
librdb (塊存儲)

osd  daemon相當于套接字 # 預設4M為機關
切割的點叫objiect  
      # 雜湊演算法     crush算法
object  -- >  pg   ---> osd daemon
# pg相當于raisdi

ceph: 僞資料平衡,雜湊演算法達到的
ceph: 适用于海量小檔案,或者單個檔案容量大(雲計算才會用ceph)
object  -- >  pg        #   雜湊演算法達到的
 pg   ---> osd daemon   #   crush算法
      

1、若幹個資料盤:一個Ceph存儲節點上可以有一個或者多個資料盤,每個資料盤上部署有特定的檔案系統,比如xfs,ext4或者btrfs。可以是一個分區當一個disk,可以是一個raid當一個 disk,也可以是一整塊盤當一個disk

#1.btrfs(B-tree 檔案系統):功能強大,但耗費資源也高
 btrfs是個很新的檔案系統(oracel在2014年8月釋出第一個穩定版),它将會支援許多非常高大上的功能,比如透明壓縮( transparent compression),可寫的cow 快照(writable oopy-on-write snapshots)、去重(deduplication)和加密(encryption) 。是以,Ceph 建議使用者在非關鍵應用上使用該檔案系統。
#2、xfs(推薦)
 xfs和 btrfs 相比較ext3/4而言,在高伸縮性資料存儲方面具有優勢。
 #  一整塊盤當一個disk
      

2.OSD(Object Storage Device) 叢集:一個OSD daemon 就是一個套接字應用程式,唯一對應一塊資料盤

(資料盤的組成可以是一塊機械硬碟 + 一個固态盤的兩個分區)

01@ecph分布式存儲理論 --02
1、負責控制資料盤上的檔案讀寫操作,與client(用戶端)通信完成各種資料對象操作等等。
2、負責資料的拷貝和恢複
3、每個OSD 守護程序監視它自己的狀态 以及别的OSD的狀态,并且報告給 Monitor
# 一塊硬碟 一個儲存中繼資料,一個存放日志

# 在一個伺服器上,一個資料對應一個OSD Daemon,而一個伺服器上可以有多塊資料盤,是以僅在一台伺服器上,就會運作多個OSD Daemon,該服務稱之為OS D節點,一個CEPH叢集中有n個OSD節點,綜合算下來,OSD叢集由一定數目的(從幾十個到幾萬個)OSD Daemon組成。
      
01@ecph分布式存儲理論 --02

3、MON(Montior)叢集:MON叢集由少量的、數目為奇數個的Monitor守護程序(Daemon)組成,負責監控ceph所有叢集中所有OSD狀态及montior叢集,一般至少三個。

01@ecph分布式存儲理論 --02
補充:Ceph核心元件及概念介紹
# Monitor
一個Ceph叢集需要多個Monitor組成的小叢集,它們通過Paxos同步資料,用來儲存OSD的中繼資料。

# OSD
OSD全稱Object Storage Device,也就是負責響應用戶端請求傳回具體資料的程序。一個Ceph叢集一般都有很多個OSD。

#MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的中繼資料服務。

#Object
Ceph最底層的存儲單元是Object對象,每個Object包含中繼資料和原始資料。

#PG
PG全稱Placement Grouops(規制組),是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實是為了更好的配置設定資料和定位資料。

# RADOS
RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph叢集的精華,使用者實作資料配置設定、Failover等叢集操作。

# Libradio
Librados是Rados提供庫,因為RADOS是協定很難直接通路,是以上層的RBD、RGW和CephFS都是通過librados通路的,目前提供PHP、Ruby、Java、Python、C和C++支援。

#CRUSH
CRUSH是Ceph使用的資料分布算法,類似一緻性哈希,讓資料配置設定到預期的地方。

#RBD
RBD全稱RADOS block device,是Ceph對外提供的塊裝置服務。

#RGW
RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務,接口與S3和Swift相容。

#CephFS
CephFS全稱Ceph File System,是Ceph對外提供的檔案系統服務
      

例:

# ceph
1、僞資料平衡,是通過算法達到的
    object ---hash算法---》pg---crush算法-----》osd daemon
    
2、ceph适用于海量小檔案,或者單個檔案容量大

# 1.一個osd daemon應該屬于多少個pg組呢?      
首先一個osd daemon肯定不能屬于一個pg組,因為ceph是pg組為機關來配置設定資料的,如果一個osd daemon隻屬于一個pg組,那麼該osd daemon将隻能收這一個pg組發來的資料如果該pg組沒有被hash算法算到,那麼就不會收到資料,于是該osd daemon就被閑置了是以一個osd 應該屬于多個pg組,到底應該屬于多少個呢?
#官方建議:
ceph叢集很長一段時間不會拓展:一個osd deamon屬于100個pg,否則:一個osd deamon屬于200個pg

# 2.ceph的邏輯機關:
1、pool(存儲池):
在建立存儲池時需要指定pg個數,來建立pg,
建立pg需要用到crush算法,crush決定了pg與osd daemon的對應關系,是以說,在用戶端往ceph中寫入資料之前,pg與osd daemon的對應關系是已經确定的,雖然是确定的,但是pg與osd daemon的對應關系是動态的
2、pg(歸置組):是配置設定資料的最小機關,一個pg内包含多個osd daemon
  
hammer-》filestore       osd daemon---》xfs檔案系統----》disk

luminous-》bluestore     osd daemon---》裸盤disk

primary osd 
replication osd


 3、osd deamon負責三件事:(負責具體幹活的)
  1、讀寫資料
  2、資料的拷貝與恢複
  3、監控自己以及pg組内的其它成員的狀态,彙報給monitor節點

monitor節點(整個叢集的大管家)
# 1、監控全局狀态(cluster map)
       1、osd daemon map
       2、monitor map
       3、pg map
      4、crush map
# 2、負責管理叢集内部狀态(osd daemon挂掉,資料恢複等操作)
# 3、負責授權
  客端在通路時會先通過monitor驗證操作權限
  用戶端需要根monitor要到cluster map
  ps:monitor節點的個數=2*n+1
    1、必須為奇數個
    2、一個monitor也可以,但是不應該這麼做,因為有單點故障
    是以最少3個起
1、為何monitor節點個數應該為奇數個
  因為monitor節點同步資料用的是paxos算法(分布式強一緻性算法)
  paxos算法規定至少有三個節點
2、可以挂掉幾個monitor節點
  paxos算法下,monitor叢集不能超過半數挂掉
  
3、monitor程序與osd daemon能否在同一個實體節點上
  可以,但是不好,但是這就是一種集中式的思想了
  如果考慮到成本,可以這麼做
      

3.3rados的網絡結構

01@ecph分布式存儲理論 --02
rados作為ceph最核心的部分,是整個ceph的大後端,應該如何架設呢???
**首先:Ceph使用以太網連接配接内部各存儲節點以及連接配接client 和rados叢集。**
然後:Ceph推薦使用兩個網絡,這麼做,主要是從性能(OSD節點之間會有大量的資料拷貝操作)和安全性(兩網分離)考慮。
南北網絡(apublic(frontside)network)連接配接用戶端和叢集
東西網絡(acluster(back-side)network)來連接配接Ceph各存儲節點
你可以在Ceph配置檔案的[global]部配置設定置兩個網絡

 public network =(public-network/netmask} 
 cluster network ={cluster-network/netmask}
      

四、Ceph叢集的邏輯結構

LTS 長期穩定版ceph
      
4.1核心邏輯概念總覽
01@ecph分布式存儲理論 --02
1、建立存儲池poo1,存儲池中包含100個pg
ceph osd pool create rbdtest 1oo 

2、設定poo池的副本數,即一個的包含多少個OSD Daemon,往某一個pg中存的資料會在其包含的osd中都儲存一份
 ceph osd pool set rhatest size 3

3、在存儲池rdbtest中建立一個鏡像給用戶端用,一個image用的是存儲池中的pg(并非指定的pg,而是隻要是存在與pool中的pg都可能會用到),相當于一個配額
rbd create -p rdbtest --size 10000 yzl # image名為yzl,大小為10000M

在用戶端檔案會被以4M為機關切成3塊,
每塊對應一個object   
object多對一pg
 pg多對多osd daemon
一個pool中有多個pg
從pool中劃分出image給使用者用,image隻是一個配額
寫入資料流程大緻如下:
 librbd
 crush算法
 file ----->object  ------>pool中劃分出來的image(一堆pg)------->osd daemon

 ceph存儲小檔案效率不高
底層osd daemon越多,存大檔案效率越高
 ceph是僞資料平衡,如果隻有一個PG,一個PG裡副本數為3,永遠隻有一塊盤被用到

 ceph的邏輯結構與Ivm有點像 
 pv->osd
 vg > pool
 lv ->image
      
4.2 pool

4.2.1 ceph pool介紹

在rados叢集建構完畢後、使用ceph時,需要用到諸多邏輯概念/結構,我們才能了解一個檔案到底是如何寫入到ceph中。
      

4.2.2ceph的pool有四大屬性

1、所有性和通路權限
2、對象副本數目,預設pool池中的一個pg隻包含兩個osd daemon,即一份資料交給pg後會存下2個副本,生産環境推薦設定為3個副本
3、PG數目,PG是pool的存儲機關,pool的存儲空間就由pg組成 
4、CRUSH 規則集合
      

4.2.3 ceph的pool有兩種類型

# 1. Replicated pool(預設):
    預設的存儲池類型,把每個存入的對象(Object)存儲為多個副本,其中分為主副本和從副本,從副本相當于備份副分,進而確定在部分OSD丢失的情況下資料不丢失。這種類型的 pool 需要更多的裸存儲空聞,但是它支援所有的pool 操作。 
     如果用戶端在上傳對象的時候不指定副本數,預設為3個副本。在開始存資料之前會計算出該對象存儲的主副本與從副本的位置,首先會将資料存入到主副本,然後主副本再将資料分别同步到從副本。主副本與從副本同步完畢後,會通知主副本,這時候主副本再響應用戶端,并表示資料上傳成功。是以如果用戶端收到存儲成功的請求後,說明資料已經完成了所有副本的存儲。

# 2. Erasure-coded pool:
   此類型會将資料存儲為K+M,其中K資料塊數量。每個對象存儲到Ceph叢集的時候會分成多個資料塊分開進行存儲。而M為編碼塊,也代表最多容忍可壞的資料塊數量。類似于磁盤陣列RAID5,在最大化利用空間的同時,還能保證資料丢失可恢複性,相比副本池更節約磁盤的空間。
# 列如:
如果将100M資源分為25塊,如果将M指定為2,那麼總共隻需要108M空間即可,計算公式為100+100/25*2。
      

4.2.4 ceph的pool提供如下能力

# 1.Resilience(彈力):
即在確定資料不丢失的情況允許一定的OSD失敗,這個數目取決于對象的拷貝(copy/replica)份數或稱副本數。對拷貝型pool來說,Ceph中預設的拷貝份數是2,這意味着除了對象自身外,它還有一個另外的備份,你可以自己決定一個Pool中的對象的烤貝份數。生産環境推薦為3,副本數越多資料越安全、真正可以使用的空間越少

# 2.PG(placement group,放置組):ceph用pg把存放相同副本的osd daemon歸為一組。
用戶端的檔案會被切成多個object然後交給ceph存儲,ceph中真正負責存儲的是osd daemon守護程序,在存儲時,ceph需要找到n個osd daemon、歸類好哪些osd daemon存放的是同一個副本、然後把object交給它們,為了降低查找與歸類成本,于是引入了pg的概念,将存放相同副本的 osd daemon歸為一個pg組

# 3.CRUSH Rules(CRUSH規則):資料映射的政策。系統預設提供"reolicated_ruleset"。
使用者可以自定義政策來靈活地設定object存放的區域。比如可以指定po011中所有objecst放置在機架1上,所有objects的第1個副本放置在機架1上的伺服器A上,第2個副本分布在機架1上的伺服器B上。pool2中所有的object分布在機架2、3、4上,所有Object的第1個副本分布在機架2的伺服器上,第2個副本分布在機架3的服器上,第3個副本分布在機架4的伺服器上。後續小猿會詳細介紹 crush rules.
# 4.Snapshots(快照):你可以對pool 做快照。
# 5.Set Ownership:設定pool的owner的使用者ID。
# 6.Ceph叢集建立後,預設建立了data  metadata 和 rbd 三個存儲池。
      
4.3 pg

4.3.1pg的概念

# PG英文全稱 Placement group,中文稱之為歸置組。
 PG的作用:PG相當于一個虛拟元件,出于叢集伸縮,性能方面的考慮。
 Ceph将每個存儲池分為多個PG,如果存儲池為副本池類型,并會給該存儲池每個PG配置設定一個主OSD和多個從OSD,當資料量大的時候PG将均衡的分布行不同叢集中的每個OSD上面。

PG概念非常複雜,主要有如下幾點:
PG也是對象的邏集合,pool中的副本數設定為3,則一個pg中包含3個osd daemon,同一個PG接收到的所有object在這3個osddaemon上被複制。

一個PG組裡有三個組員/OSD daemon,三個組員第一個是組長,組長負責對外提供服務,組員負責備份,一旦組長挂掉後,相當于公司中一個部門的項目經理挂了,公司會招聘一個新的項目經理,但新的項目經理剛來的時候還什麼都不知道(即新加進來的osd daemon是沒有任何組内資料的),此時公司會讓某個組員先臨時接替一下組長的職務、對外提供服務,一旦新來的組長了解了業務(即新加進來的osd daemon已經同步好資料了),那麼就可以讓新組長出山了.
      
3.2 pg的特點

一、基本特點

1、Ceph引入PG的目的主要是為了減少直接将對象object映射到OSD的複雜度,即PG 确定了pool中的對象object和pSD之間的映射關系,一個object隻會存在于一個 PG 中,但是多個object可以在同一介PG内。PG-Object-OSD的關系如下圖所示: 
object與PG是多對一的關系
PG與OSDdaemon是多對多的關系
OSD daemon與disk是一對一的關系
      
2、一個OSD上的PG則可達到數百個。事實上,PG數量的設定牽扯到資料分布的均勻性問題。PG 和 OSD 之間的映射關系由CRUSH 決定,而它做決定的依據是CRUSH 規則
(rules)。CRUSH将所有的儲存設備(OSD)組織成一個分層結構,該結構能區分故障域(failure domain),該結構中每個節點都是一個CRUSH bucket。詳細情況後續介紹。
      
3、對象的副本數目,也就是被拷貝的次數,是在建立Pool時指定的。該分數決定了每個PG會在幾個 OSD 上儲存對象。如果一個拷貝型 Pool 的size(拷貝份數)為2,它會包含指定數目的PG,每個PG使用兩O其中,第一個為主OSD(primary),其它的為從OSD(secondary)。不同的PG可能會共享一個 OSD。
      
4、PG也是Ceph叢集做清理(scrubbing)的基本機關,也就是說資料清理是一個一個PG來做的。
、PG和 OSD 的關系是動态的

librbd crush算法
file—————————> object—————-—> pool中劃分出來的image(一堆pg)—————— >
osd daemon
      
1)一開始在PG被建立的時候,MON根據CRUSH算法計算出PG所在的OSD。這是它們之間的初始關系。
2)Ceph叢集中OSD的狀态是不斷變化的,它會在如下狀态之間做切換
 up:守護程序運作中,能夠提供1O服務; down:守護程序不在運作,無法提供1O服務; in:包含資料;
 out:不包含資料
3)部分PG和OSD的關系會随着OSD狀态的變化而發生變化
當新的OSD被加入叢集後,已有OSD上部分PG将可能被挪到新OSD上;此時PG和 OSD的關系會發生改變。
當已有的某OSDdown了并變為out後,其上的PG會被挪到其它已有的OSD上。但是大部分的PG和OSD的關系将會保持不變,在狀态變化時,Ceph 盡可能隻挪動最少的資料。
4)用戶端根據Cluster map 以及CRUSH Ruleset 使用CRUSH算法查找出某個PG所在的 OSD 清單。
      
4.3.3 PG的建立過程
Pool的PG數目是建立pool時候指定的,Ceph官方有推薦的計算方法。其值與OSD的總數的關系密切。當Ceph叢集擴充OSD增多時,根據需要,可以增加pool的PG 數目。

306
1)MON節點上有PGMonitotor,它發現有pool被建立後,判斷該pool 是否有PG。如果有 PG,則逐一判斷這些PG是否已經存在,如果不存在,則開始下面的建立PG的過程。
2)建立過程的開始,設定PG狀态為Creating,并将它加入待建立PG隊列 creatingpgs,等待被處理。
3)開始處理後,使用CRUSH算法根據目前的OSDmap 找出來up/acmgset,确定哪些osd屬于哪些pg,然後加入隊列 creating_pgs_by_osd, 等待被處理
4)隊列處理函數将該OSD上需要建立的PG合并,生成消息MOSDPGCreate,通過消息通道發給OSD。
5)OSD收到消息字為 MSG_OSD_PG_CREATE的消息,得到消息中待建立的 PG 資訊,判斷類型,并擷取該PG的其它OSD,加入隊列creating_pgs似乎是由主 OSD 負責發起建立次 OSD上
的PG),再建立具體的PG。
6)PG 被建立出來以後,開始 Peering 過程。
      
4.3.4 PG 數目的确定(非常非常非常重要!!!)
建立pool 時需要确定其 PG的數目,在 poo被建立後也可以調整該數字,但是增加池中的PG數是影響ceph叢集的重大事件之一,生成環境中應該避免這麼做,因為pool中pg的數目會影響到
      
ceph 重點筆記
ceph
1、僞資料平衡,是通過算法達到的
    object ---hash算法---》pg---crush算法-----》osd daemon
    
    object 
2、ceph适用于海量小檔案,或者單個檔案容量大
  
ps:一個osd daemon應該屬于多少個pg組呢?
      
  首先一個osd daemon肯定不能屬于一個pg組,因為ceph
  是pg組為機關來配置設定資料的,如果一個osd daemon隻屬于
  一個pg組,那麼該osd daemon将隻能收這一個pg組發來的資料
  如果該pg組沒有被hash算法算到,那麼就不會收到資料,于是
  該osd daemon就被閑置了,
  是以一個osd 應該屬于多個pg組,到底應該屬于多少個呢?
  官方建議:
  ceph叢集很長一段時間不會拓展:一個osd deamon屬于100個pg
  否則:一個osd deamon屬于200個pg
ceph的邏輯機關:
  1、pool(存儲池):
    在建立存儲池時需要指定pg個數,來建立pg,
    建立pg需要用到crush算法,crush決定了pg與osd daemon的對應關系,是以說,在用戶端往ceph中寫入
    資料之前,pg與osd daemon的對應關系是已經确定的
    ,雖然是确定的,但是pg與osd daemon的對應關系是動态
    的
  2、pg(歸置組):是配置設定資料的最小機關,一個pg内包含多個osd daemon  
hammer-》filestore       osd daemon---》xfs檔案系統----》disk

luminous-》bluestore     osd daemon---》裸盤disk
primary osd 
replication osd

osd deamon負責三件事:(負責具體幹活的)
  1、讀寫資料
  2、資料的拷貝與恢複
  3、監控自己以及pg組内的其它成員的狀态,彙報給monitor節點

monitor節點(整個叢集的大管家)
  1、監控全局狀态-》
      cluster map
        1、osd daemon map
        2、monitor map
        3、pg map
        4、crush map
  2、負責管理叢集内部狀态(osd daemon挂掉,資料恢複等操作)
  3、負責授權,
    客端在通路時會先通過monitor驗證操作權限
    用戶端需要根monitor要到cluster map
  
  ps:monitor節點的個數=2*n+1
    1、必須為奇數個
    2、一個monitor也可以,但是不應該這麼做,因為有單點故障
    是以最少3個起
        
  1、為何monitor節點個數應該為奇數個
    因為monitor節點同步資料用的是paxos算法(分布式強一緻性算法)
    paxos算法規定至少有三個節點
  2、可以挂掉幾個monitor節點
  
    paxos算法下,monitor叢集不能超過半數挂掉
  
  3、monitor程序與osd daemon能否在同一個實體節點上
    可以,但是不好,但是這就是一種集中式的思想了    
    如果考慮到成本,可以這麼做      

繼續閱讀