测试 Ceph crush 映射
loic
在 修改 crush 映射 后,应该对其进行测试,以检查所有规则是否可以提供指定的副本数。如果创建了一个使用 metadata 规则并具有七个副本的池,是否可能无法找到足够的设备? 可以使用 crushtool 的测试模式来模拟这种情况,如下所示
$ crushtool -i the-new-crush-map --test --show-bad-mappings bad mapping rule 1 x 781 num_rep 7 result [8,10,2,11,6,9]
输出显示,对于规则 1(默认情况下 metadata 是规则 1),尝试为对象 781(其名称的哈希值)找到七个副本(num_rep 7)失败,并且仅返回了六个([8,10,2,11,6,9])。可以通过增加设备数量、降低副本数量或更改副本选择方式来解决此问题。
当尝试找到所需的副本数量时,每次都缺少一个设备,这仅仅意味着没有足够的设备来满足规则,唯一的解决方案是至少添加一个。CRUSH 可能无法找到满足所有约束的设备映射,并且需要再次尝试。如果失败次数超过 五十次,它将放弃并返回少于所需的设备。降低所需的副本数量是解决此问题的一种方法。
虽然可以增加 CRUSH 尝试的次数,但这在正在运行的集群上是危险的,因为它可能会修改现有对象的映射。