我们有一个带有两台redis服务器的redis配置。我们还有3个哨兵来监控这两个实例并在需要时启动故障转移。
我们目前有一个流程,我们定期在redis服务器上执行FLUSHALL。这是一个阻塞操作,花费的时间比我们为哨兵分配的时间要长。换句话说,我们的标记配置为:
sentinel down-after-milliseconds OurMasterName 5000
在服务器上执行redis-cli FLUSHALL> 5000毫秒,所以哨兵发起故障转移。
我们承认做FLUSHALL并不是很好,而且我们也知道我们可以增加毫秒级的时间,但为了这个问题的目的,假设这些都不是选项。
问题是:如果由于FLUSHALL阻塞超过5000毫秒而我们的哨兵没有启动故障转移,我们怎么能进行FLUSHALL(或等效操作)?有没有人遇到并解决了这个问题?
答案 0 :(得分:1)
您可以创建新实例:如果您使用的是AWS或Azure,那么您可以创建新的Redis群集。启动它,用数据加载它,然后准备好再修改DNS,再次使用API调用 - 所有这些都可以由应用程序的某些部分处理。但在现场,事情会变得更加复杂,因为它需要与ansible / chef / puppet进行一些自动化。
答案 1 :(得分:0)
您目前需要的下一个最佳选择是批量删除密钥以立即减少工作量。您可以使用scan
建立一个列表,假设您没有列表,然后以适合您的批量大小删除。
编辑:因为您不想保留数据,禁用持久性,删除RDB文件,然后只需重新启动实例。这样您就不必像使用新主机一样更新Sentinel。
出于好奇,如果你一直在冲洗并且不在乎你正在擦拭它的数据,为什么还要为哨兵打扰呢?