分布式存儲系統之Ceph集群存儲池、PG 與 CRUSH( 二 )


PG計數
PG數量由管理員在創建存儲池時指定,而后由CRUSH負責創建和使用,通常,PG的數量應該是數據的合理顆粒度的子集,例如,一個包含256個PG的存儲池意味著每個PG包含大約1/256的存儲池數據;當需要將PG從一個OSD移動到另一個OSD時 , PG的數量會對性能產生影響;PG數量過少,Ceph將不得不同時移動相當數量的數據,其產生的網絡負載將對集群的正常性能輸出產生負面影響;即PG過少,那么對應一個PG存儲的數據就越多,則移動PG會占用過多的網絡帶寬 , 從而影響正??蛻舳说氖褂茫欢谶^多的PG數量場景中在移動極少量的數據時,Ceph將會占用過多的CPU和RAM,從而對集群的計算資源產生負面影響 。即PG過多,對應每個PG維護的數據較少 , 但是集群需要花費很多CPU和內存來維護和追蹤PG的信息;從而造成集群的計算資源和內存資源造成影響,從而進一步影響客戶端使用;所以在ceph上pg的數量不宜過多和過少;
PG數量在群集分發數據和重新平衡時扮演著重要作用,在所有OSD之間進行數據持久存儲及完成數據分布會需要較多的歸置組,但是它們的數量應該減少到最大性能所需的最小數量值,以節省CPU和內存資源;一般說來,對于有著超過50個OSD的RADOS集群,建議每個OSD大約有50-100個PG以平衡資源使用 , 取得更好的數據持久性和數據分布,更大規模的集群中,每個OSD大約可持有100-200個PG至于應該使用多少個PG,可通過下面的公式計算后 , 將其值以類似于四舍五入到最近的2的N次冪;
PG計算公式:(Total OSDs * PGPerOSD)/Replication factor => Total PGs;即一個ceph集群總PG數量=每個OSD上的pg數量×OSD的數量,然后除以副本數量;一個RADOS集群上可能會存在多個存儲池,因此管理員還需要考慮所有存儲池上的PG分布后每個OSD需要映射的PG數量;即總pg數量/存儲池個數,就是平均一個存儲的PG數量;簡單講就是所有存儲池的PG數量之和應該等于通過上述公式算出來的值四舍五入到最近的2的N次冪;
PG狀態
依據PG當前的工作特性或工作進程所處的階段,它總是處于某個或某些個“狀態”中 , 最為常見的狀態應該為“active+clean”;
PG的常見狀態
1、Active:所謂Active狀態是指主OSD和各輔助OSD均處于就緒狀態 , 可正常服務于客戶端的IO請求所處于的狀態;一般,Peering操作過程完成后即會轉入Active狀態;
2、Clean:是指主OSD和各輔助OSD均處于就緒狀態,所有對象的副本數量均符合期望,并且PG的活動集和上行集是為同一組OSD;
活動集(Acting Set):由PG當前的主OSD和所有的處于活動狀態的輔助OSD組成,這組OSD負責執行此PG上數據對象的存取操作I/O;
上行集(Up Set):根據CRUSH的工作方式,集群拓撲架構的變動將可能導致PG相應的OSD變動或擴展至其它的OSD之上 , 這個新的OSD集也稱為PG的”上行集(Up Set)“,其映射到的新OSD集可能部分地與原有OSD集重合,也可能會完全不相干; 上行集OSD需要從當前的活動集OSD上復制數據對象 , 在所有對象同步完成后,上行集便成為新的活動集,而PG也將轉為“活動(active)”狀態;
3、Peering:一個PG中的所有OSD必須就它們持有的數據對象狀態達成一致,而“對等(Peering)”即為讓其OSD從不一致轉為一致的過程;
4、Degraded:在某OSD標記為“down”時,所有映射到此OSD的PG即轉入“降級(degraded)”狀態;此OSD重新啟動并完成Peering操作后,PG將重新轉回clean;一旦OSD標記為down的時間超過5分鐘,它將被標記出集群,而后Ceph將對降級狀態的PG啟動恢復操作,直到所有因此而降級的PG重回clean狀態;在其內部OSD上某對象不可用或悄然崩潰時,PG也會被標記為降級狀態 , 直至對象從某個權威副本上正確恢復;
5、Stale:每個OSD都要周期性地向RADOS集群中的監視器報告其作為主OSD所持有的所有PG的最新統計數據,因任何原因導致某個主OSD無法正常向監視器發送此類報告,或者由其它OSD報告某個OSD已經down掉,則所有以此OSD為主OSD的PG將立即被標記為stale狀態;
6、Undersized: PG中的副本數少于其存儲池定義的個數時即轉入undersized狀態,恢復和回填操作在隨后會啟動以修復其副本數為期望值;
7、Scrubbing:各OSD還需要周期性地檢查其所持有的數據對象的完整性,以確保所有對等OSD上的數據一致;處于此類檢查過程中的PG便會被標記為scrubbing狀態,這也通常被稱作light scrubs、shallowscrubs或者simply scrubs;另外,PG還偶爾需要進行deep scrubs檢查以確保同一對象在相關的各OSD上能按位匹配 , 此時PG將處于scrubbing+deep狀態;

推薦閱讀