我可以将 redis 与负载均衡器一起使用吗?

我可以将 redis 与负载均衡器一起使用吗?

我正在使用 redis 的 1 master 和 1 slave。

我也想在负载均衡器下同时使用两者。这样我就可以同时使用两个 redis 服务器。

我还想添加从服务器作为主服务器的故障转移服务器。我能做到吗?

答案1

我从未尝试过,但主要的问题是,对于复制,即使是同步复制,redis 只允许主从关系,而不允许主/主关系。

这样做的后果是,如果您写入从属服务器,则这些写入将无法在主服务器上使用。

答案2

我不推荐这样做。Redis 目前是一种主从复制机制,您需要对写入和读取进行分区。负载均衡器不会为您完成此操作,除非您付出大量工作。您需要在应用程序中对读取和写入进行分区,或者编写一个中间层。完成此操作后,您可以将多个从属设备放在负载均衡器后面,并将写入指向单个主设备。

Redis 速度足够快,您很少会看到复制出现明显延迟。特别是如果您运行配置为不本地写入的主服务器,并运行一个或多个不在负载均衡器后面处理持久性的从服务器。

至于处理宕机的主服务器,您可以在一个或多个从服务器上编写/使用心跳式监视器,以监视宕机的主服务器并接管。您仍然可以使用负载平衡器来完成其中的一些任务。例如,在 LB 上使用虚拟 IP,并将指定的辅助服务器设置为较低的权重或您选择的 LB 的期限)。然后将此服务器配置为主服务器的从服务器 - 但不在读取池中。让它监听 LB 未路由到的非标准端口。当它检测到主服务器发生故障时,您使用的进程会将其重新配置为使用正确的端口并发出 SLAVE OF NOONE 命令。

我还希望看到监控进程告诉负载均衡器根本不使用主服务器。这样,如果它在您准备好之前重新上线,您可以将其从属于当前主服务器,然后在它与备份主服务器同步后迁移回它。

最终,这项工作的价值取决于您的真实要求有多严格。无论哪种方式,如果您确实需要不丢失任何一次写入,您将需要对写入器进行编码,以便在无法连接时将这些写入排队到磁盘并记录或提醒某人。

答案3

除了使用内置的 redis 同步,如何在自定义状态服务的代码中处理这个问题?

因此,在两个或多个服务器处于负载平衡的情况下,它们每个都会有其他服务器的列表,并且在写入本地 Redis 实例后,它们会将相同的条目写入其余服务器?

假设这可行,那么当服务器重新上线时,应该只需要处理实例的同步。您可以在服务重新启动时强制执行此操作吗?将本地版本同步到另一个实例?或者只是获取本地日期晚于最新日期的所有条目?

相关内容