jihyun kim Asked: 2017-12-11 21:24:33 +0800 CST2017-12-11 21:24:33 +0800 CST 2017-12-11 21:24:33 +0800 CST 如何检查两个服务器是否在ceph集群上正确复制 772 最近我用两个服务器配置构建了 ceph。 最令人不安的是,我不知道如何检查两台服务器是否在 ceph 集群上正确复制。 是否有人使用 ceph 确认数据已复制? ceph 1 个回答 Voted Best Answer eblock 2018-09-25T02:27:44+08:002018-09-25T02:27:44+08:00 以防万一:通常两个节点配置是测试环境,而不是生产环境。两个节点集群更容易出现此类故障,这可能会让您选择将要失去的东西:冗余或正常运行时间。根据池的配置,它们还可能导致进一步的数据丢失。 假设一个双节点集群,您必须创建池来在其中存储数据。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 的池大小和 1 的 min_size,除非您决定仅在池健康的情况下允许写入,在这种情况下,建议使用 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 集群上,这将不起作用。无法再浏览文件了。
以防万一:通常两个节点配置是测试环境,而不是生产环境。两个节点集群更容易出现此类故障,这可能会让您选择将要失去的东西:冗余或正常运行时间。根据池的配置,它们还可能导致进一步的数据丢失。
假设一个双节点集群,您必须创建池来在其中存储数据。ceph 中预先配置了一些默认值,其中之一是您的默认池大小,它反映了数据的复制大小。池大小为 3(默认)意味着您上传到集群的每个对象都有三个副本(1 个原始对象和 2 个副本)。您可以通过以下方式获取池大小:
参数 min_size 确定池中的最小副本数并且仍然可以操作。例如,如果您同时拥有 min_size 和 size 3,如果一个对象处于错误状态,您的集群将停止对该池的 I/O。如果您有上述配置(min_size 2,size 3),即使一份副本不健康,您的数据也会被处理。在您的情况下,您需要 2 的池大小和 1 的 min_size,除非您决定仅在池健康的情况下允许写入,在这种情况下,建议使用 2 和 2。
现在要验证您的两个副本是否都处于活动状态(除了处于 HEALTH_OK 状态的集群),您可以检查以下内容:
如您所见,这个特定的 PG 在 OSD 5、7 和 0 上具有三个副本(大小 = 3),而 OSD.5 是主 OSD,它为客户端提供数据。
您是在 filestore 还是 bluestore 上构建集群?如果您有一个文件存储集群,您可以确定您的对象在服务器上的文件系统中的文件位置,请参阅本节“检索集群上的对象”了解如何检索该信息的示例,我没有文件存储集群现在就在手边。但是,在 bluestore 集群上,这将不起作用。无法再浏览文件了。