如何檢查兩個伺服器是否在ceph集群上正確複製
最近我用兩個伺服器配置建構了 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 集群上,這將不起作用。無法再瀏覽文件了。