如果 1 个 OSD 崩溃,rook-ceph 最终会尝试将丢失的数据复制到仍在工作的 OSD 上,还是等待所有 OSD 恢复健康?假设是这样,我可以解释我是如何计算的:
我开始为 kubernetes PVC 和 3 个 745 GB 的节点(总共 2.23 TB)预置 1.71 TB。Rook 的复制因子为 2 (RF=2)。
为了使复制工作,我需要 2 倍 1,71 TB(3,42 TB),所以我添加了 2 个节点,每个节点 745 GB(总共 3,72 TB)假设我使用了所有 1,71 TB 的预置。
如果我丢失了一个 OSD,我的 K8S 集群仍然运行,因为数据被复制了,但是当丢失的数据在仍然工作的 OSD 上被复制时,其他 OSD 可能会崩溃,因为假设 OSD 总是均匀分布(我知道这在很长一段时间内是不正确的)跑) :
- 我的集群上有 290 GB 未使用空间(总共 3,72 - 3,42 PVC 配置)
- 每个 OSD 58 GB (290 / 5)
- 崩溃的 OSD 有 687 GB(总共 745 个磁盘 - 58 GB 未使用)
- Ceph 尝试在剩余的每个 OSD 上复制 172 GB 缺失数据 (687/4)
- 这太多了,因为我们只剩下 58 GB,这应该会导致 OSD 故障级联
如果我有 6 个节点而不是 5 个,我可以无限期地释放 1 个 OSD:
- 新池为 4.5 TB (6x745)
- 我在集群上有 1+ TB 可用空间(总共 4,5 - 3,42 PVC 配置)
- 每个 OSD 166+ GB (~1 TB / 6)
- 崩溃的 OSD 最大有 579+ GB 数据。(745 - 166)
- Ceph 尝试在剩余的每个 OSD 上复制少于 100 GB 的缺失数据 (579 / 6)
- 这小于每个 OSD 上的可用空间(166+ GB)所以复制再次工作只剩下 5 个节点但如果另一个 OSD 崩溃我注定要失败。
最初的假设是否正确?如果是这样,数学听起来对你吗?