如何检查 ceph 集群上的两台服务器是否正确复制

如何检查 ceph 集群上的两台服务器是否正确复制

最近我用两个服务器配置构建了 ceph。

最不安的是我不知道如何检查两个服务器是否在 ceph 集群上正确复制。

使用 ceph 的人是否确认数据已复制?

答案1

以防万一:通常,两个节点配置是为了测试环境,而不是生产环境。两个节点集群更容易出现此类故障,这可能会让您选择将失去什么:冗余或正常运行时间。根据池的配置,它们还可能会导致进一步的数据丢失。

假设有一个两节点集群,您必须创建池来在其中存储数据。 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 集群上,这不起作用。无法再浏览文件。

相关内容