如何在不启动sentinel故障切换的情况下执行redis FLUSHALL?

如何在不启动sentinel故障切换的情况下执行redis FLUSHALL?,redis,sentinel,redis-sentinel,Redis,Sentinel,Redis Sentinel,我们有一个带有两台redis服务器的redis配置。我们还有3个哨兵监视这两个实例,并在需要时启动故障转移 我们目前有一个流程,我们必须定期在redis服务器上执行FLUSHALL。这是一个阻塞操作,需要的时间比我们为哨兵分配的超时时间长。换句话说,我们的哨兵配置包括: mastername 5000毫秒后停止监视 并且在服务器上执行redis cli需要>5000毫秒,因此Sentinel会启动故障转移 我们承认进行FLUSHALL测试并不好,我们也知道我们可以在毫秒后将down增加到,但出于

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

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

mastername 5000毫秒后停止监视

并且在服务器上执行redis cli需要>5000毫秒,因此Sentinel会启动故障转移

我们承认进行FLUSHALL测试并不好,我们也知道我们可以在毫秒后将down增加到,但出于这个问题的目的,假设这两种测试都不是选项


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

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

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


出于好奇,如果你只是想一直刷新数据,并且在擦除数据时不关心数据,为什么还要麻烦sentinel呢?

你可以创建新实例:如果你使用AWS或Azure之类的东西,那么你就没有API来创建新的Redis群集了。启动它,用数据加载它,一旦准备好,只需修改DNS,再次使用API调用——这样所有这些都可以由应用程序的某个部分处理。但是内部事务可能会变得更复杂,因为它需要ansible/chef/puppet的一些自动化。

如果您在某个云平台上,您可以创建一个新实例:准备好机器映像或使用一些DevOptools@LiviuCostea我认为这可能是正确的选择。如果您可以参考一些更详细地描述如何工作的内容,我很乐意接受您的回答。如果您使用的是AWS或Azure之类的东西,那么您可以使用API来创建新的Redis群集。启动它,用数据加载它,一旦准备好,只需修改DNS,再次使用API调用——这样所有这些都可以由应用程序的某个部分处理。但内部事务可能会变得更复杂,因为它需要ansible/chef/puppet的一些自动化。@LiviuCostea True——仍然是一个合法的答案。如果你把它写在答题表上,我可以接受。我认为这里的问题是它不能保证一致性。在这种情况下,我们最好将超时时间增加到>5000毫秒(我们确实这样做了,暂时解决了我们的问题,但这并不是一个可接受的解决方案)。