ceph 复制是基于节点还是磁盘?

ceph 复制是基于节点还是磁盘?

我目前正在评估 xenserver 的存储系统。由于发生故障时数据复制非常重要,因此我对 ceph 中的复制有疑问。

据我所知,节点中的每个磁盘本身都是一个 osd(磁盘不在任何 raid 配置中)。ceph 复制算法是否知道 2 个 osd 位于同一个节点上,因此不会复制这些 osd 上的数据?

最小示例:2 个节点,每个节点有 2 个磁盘。由于非 raid 设置,每个磁盘都是一个 osd -> 4 个 osd。节点 A:OSD1、OSD2;节点 B:OSD3、OSD4。我将复制量设置为 2,并将对象保存到 ceph 中。对象是否会被保存和复制,以便在节点发生故障时数据完全可访问?

谢谢您的回答

答案1

  1. 是的
  2. 您可以定义按节点、机架、数据中心等进行复制的策略。

答案2

默认情况下,CRUSH 复制规则 (replicated_ruleset) 规定复制处于主持人级别。您可以通过导出 Crush 地图来检查这一点:

ceph osd getcrushmap -o /tmp/compiled_crushmap
crushtool -d /tmp/compiled_crushmap -o /tmp/decompiled_crushmap

地图将显示这些信息:

rule replicated_ruleset {
        ruleset 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host

复制的类型列于图的开头:

# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 region
type 10 root

为了达到 HEALTH_OK 状态并根据规则复制对象,您必须将复制类型更改为操作系统在您的特定情况下。可以通过运行以下命令重新编译地图:

crushtool -c /tmp/decompiled_crushmap -o /tmp/compiled_crushmap
ceph osd setcrushmap -i /tmp/compiled_crushmap

你可以在 ceph 文档中找到有关如何使用 CRUSH 映射的更多信息:http://docs.ceph.com/docs/master/rados/operations/crush-map/

可以使用以下方法找到特定对象的位置:

ceph osd map {pool-name} {object-name}

如果您想要检查所有对象的地图,您可以通过查看放置组转储来实现(考虑显示您自己的信息):

ceph pg dump | awk  '{print $1 "\t" $2 "\t" $15 "\t" $16}'

关于 OSD,您可以将 OSD 视为任何类型的逻辑物理存储单元(文件夹/分区/逻辑卷/磁盘/ LUN)

相关内容