Ceph

如何檢查兩個伺服器是否在ceph集群上正確複製

  • May 6, 2019

最近我用兩個伺服器配置建構了 ceph。

最令人不安的是,我不知道如何檢查兩台伺服器是否在 ceph 集群上正確複製。

是否有人使用 ceph 確認數據已複製?

以防萬一:通常兩個節點配置是測試環境,而不是生產環境。兩個節點集群更容易出現此類故障,這可能會讓您選擇將要失去的東西:冗餘或正常執行時間。根據池的配置,它們還可能導致進一步的數據失去。

假設一個雙節點集群,您必須創建池來在其中儲存數據。ceph 中預先配置了一些預設值,其中之一是您的預設池大小,它反映了數據的複制大小。池大小為 3(預設)意味著您上傳到集群的每個對像都有三個副本(1 個原始對象和 2 個副本)。您可以通過以下方式獲取池大小:

host1:~ # ceph osd pool get <POOL> size
size: 3
host1:~ # ceph osd pool get <POOL> min_size
min_size: 2

參數 min_size 確定池中的最小副本數並且仍然可以操作。例如,如果您同時擁有 min_size 和 size 3,如果一個對象處於錯誤狀態,您的集群將停止對該池的 I/O。如果您有上述配置(min_size 2,size 3),即使一份副本不健康,您的數據也會被處理。在您的情況下,您需要池大小為 2 和 min_size 為 1,除非您決定僅在池健康的情況下允許寫入池,在這種情況下,建議使用 2 和 2。

現在要驗證您的兩個副本是否都處於活動狀態(除了處於 HEALTH_OK 狀態的集群),您可以檢查以下內容:

# Get PGs per pool
host1:~ # ceph pg ls-by-pool <POOL>
PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES     LOG DISK_LOG STATE        STATE_STAMP                VERSION REPORTED  UP      UP_PRIMARY ACTING  ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP                LAST_DEEP_SCRUB DEEP_SCRUB_STAMP           
3.0          24                  0        0         0       0 100663296  84       84 active+clean 2018-09-24 10:00:31.274193   86'84   182:119 [5,7,0]          5 [5,7,0]              5      86'84 2018-09-23 10:39:06.518211             0'0 2018-09-18 14:41:06.260403 
[...]

# Get mapping of a PG
host1:~ # ceph pg map 3.0
osdmap e182 pg 3.0 (3.0) -> up [5,7,0] acting [5,7,0]

如您所見,這個特定的 PG 在 OSD 5、7 和 0 上具有三個副本(大小 = 3),而 OSD.5 是主 OSD,它為客戶端提供數據。

您是在 filestore 還是 bluestore 上建構集群?如果您有一個文件儲存集群,您可以確定您的對像在伺服器上的文件系統中的文件位置,請參閱節“檢索集群上的對象”了解如何檢索該資訊的範例,我沒有文件儲存集群現在就在手邊。但是,在 bluestore 集群上,這將不起作用。無法再瀏覽文件了。

引用自:https://unix.stackexchange.com/questions/410158