如何在不停机的情况下将另一个分片添加到 tarantool 数据库的生产中?

How to add another shard to production for tarantool Database, without downtime?

我们在生产中使用 tarantool 数据库(使用 vshard 进行分片)。我们直接从 4 个分片开始。现在我们想在不停机的情况下将其增加到 6。但是,在再添加两个分片之后,重新平衡器启动并且不允许 reads/writes 发生。有什么办法可以支持所有类型的操作?我们有能力增加手术时间。但它应该是成功的。在产品前端造成的不便最少的情况下,将分片添加到 tarantool 的最佳做法是什么?

目前,我们能想到的唯一解决方案是进入维护模式并让重新平衡在尽可能短的时间内完成!!!

您不能写入正在传输的存储桶,但您不能写入其他存储桶(所以这不像是整个分片都被锁定)。

此外,您可以通过以下方式减轻影响 - 使桶更小(增加 bucket_count) - 使重新平衡变慢,以便同时传输更少的桶(重新平衡器配置)。

假设,你有 16384 个桶,你的数据集是 75GB。这意味着平均桶大小约为 5 Mb。如果您将 rebalancer_max_receiving 参数减小到 10,您将只有 10 个桶 (50Mb) 同时传输(这使他被锁定以进行写入)。

这样,重新平衡会很慢,但是,考虑到您的客户端可以执行重试并且您的分片之间的网络足够快,'write-lock' 效果应该根本不会被注意到。