8

我们有一个带有两个 redis 服务器的 redis 配置。我们还有 3 个哨兵来监控这两个实例并在需要时启动故障转移。

我们目前有一个流程,我们必须定期在 redis 服务器上执行 FLUSHALL。这是一个阻塞操作,比我们为哨兵分配的超时时间要长。换句话说,我们有我们的哨兵配置:

sentinel down-after-milliseconds OurMasterName 5000

并且在服务器上执行 redis-cli FLUSHALL 需要 > 5000 毫秒,因此哨兵启动故障转移。

我们承认进行 FLUSHALL 并不是很好,我们也知道我们可以将毫秒后的下降时间增加到但是为了这个问题的目的,假设这些都不是选项。

问题是:我们如何在不让我们的哨兵因为 FLUSHALL 阻塞超过 5000 毫秒而启动故障转移的情况下进行 FLUSHALL(或等效操作)?有没有人遇到并解决了这个问题?

4

2 回答 2

1

您可以只创建新实例:如果您使用的是 AWS 或 Azure 之类的东西,那么您将拥有用于创建新 Redis 集群的 API。启动它,用数据加载它,一旦准备好,只需修改 DNS,再次使用 API 调用 - 所以所有这些都可以由应用程序的某些部分处理。但是在本地,事情可能会变得更加复杂,因为它需要使用 ansible/chef/puppet 进行一些自动化。

于 2015-10-23T13:18:52.227 回答
0

您当前必须做的下一个最佳选择是批量删除密钥以将工作量减少到一次。您可以构建一个列表,假设您没有列表,使用scanThen delete 以适合您的任何批量大小。

编辑:由于您对保留数据不感兴趣,请禁用持久性,删除 RDB 文件,然后重新启动实例。这样,您不必像使用配置新主机时那样更新哨兵。

出于好奇,如果您只是一直在刷新并且不关心数据,因为您将擦除它,为什么还要打扰哨兵呢?

于 2015-10-09T17:06:38.783 回答