我很难理解是否crush rule
与副本数一致。因此,假设我创建了一个名为replicate_in_2_racks
以下的 Crush 规则:
ceph osd crush rule create-simple replicate_in_2_racks default rack
顾名思义,它预期会在 Crush 映射中的 2 个机架上进行复制(我们的集群的节点/主机均匀分布在两个机架上,如 Crush 映射中设置的那样)。然后我创建一个名为的池pool01fordata
,如下所示:
ceph osd create pool ceph osd pool create pool01fordata replicated replicate_in_2_racks
到这里,我本来希望副本数会自动设置为2
,因为通过了 Crush 规则replicate_in_2_racks
,但事实并非如此,我仍然必须将副本数设置为:
ceph osd pool set pool01fordata size 2
那么,为什么如果我在 Crush 图中有两个机架,并且使用相应的规则创建了一个池,我仍然必须设置池大小(副本数)?
这是否意味着如果有 Crush 规则:replicate_in_2_racks
我可以将副本数设置为 2,例如:(ceph osd pool set pool01fordata size 3
这对我来说没有意义)
答案1
因为这些设置没有直接关系。一个设置副本数量,一个设置副本放置规则。
如果将副本数设置为 3(或更高),规则将确保至少一个副本位于与其他副本不同的机架中。第三个副本将放置在 ceph 认为合适的任何位置。
如果您添加另一条 Crush 规则(例如,基于主机),也会考虑这一点。对于两个副本,这无关紧要;对于 3 个副本,机架规则将确保副本放置在不同的机架中,而主机规则将确保在放置两个副本的机架上,它们不会放置在同一个主机中。
请记住,您可以按照自己选择的树状结构组织磁盘,树状结构可以包含主机、机架、房间、建筑物、大陆等。而且,您可以设置粉碎规则,以任意方式分发副本。