【发布时间】:2013-11-26 00:16:39
【问题描述】:
我的应用程序对缓存服务器重启具有弹性(嗯,希望如此,但没关系)。这意味着,如果缓存(Redis,在主/从集群配置中)变得不可用(例如,整个集群变得不可用),应用程序可以通过关闭大量缓存的特性来优雅地降级,并且仍然可以缓慢地工作。
由于我在主/从模式下使用 Redis,我必须将状态保存到文件系统中,以使主从同步更加高效。这意味着当服务器重新启动时,它会加载它从之前的版本中看到的数据。
在我需要在整个集群关闭时发送缓存失效消息之前,上述方法非常有效。流程是这样的:
- 缓存正常
- 应用服务器将数据 X=Y 放入缓存。 X=Y 被保存到缓存文件系统中。
- 缓存失败,重新启动。
- 应用服务器获取命令将 X 操作为 Y' - 想要发送 X 的缓存失效。失败 - 缓存没有响应(仍然关闭)。由于缓存是可选的,因此应用服务器会记录并继续。
- 缓存恢复 - 从文件系统加载数据,包括 X=Y
- 应用服务器收到服务 X 的请求 - 进入缓存并查看之前的数据 X=Y。即使数据库有 Y',Y 仍在服务中。问题。愤怒的客户。
如何解决这个问题 - 特别是在具有主/从方案的 Redis 中(从站当前仅用于更快的故障转移)。
【问题讨论】:
-
你能详细说明一下吗:“我必须将状态保存到文件系统中,以便主从同步更加高效”
-
我可能弄错了。我假设对于主从同步,必须保存 RDB 文件。此 RDB 文件是否不用于重新启动?另外,如果我禁用它,当新的从站连接时这意味着什么?服务器会减慢创建快照的速度吗?