我正在使用redis的1个主&1奴隶。
我也想同时使用负载均衡器。所以我可以同时使用两个redis服务器。
另外我想添加奴隶作为主人的故障。 那我能做到吗?
我从来没有尝试过,但主要的问题是,与复制,甚至同步复制,redis只允许主从关系,而不是主/主关系。
这样做的后果是,如果你写入从机,这些写入将不会在主机上可用。
我不会推荐它。 Redis目前是一种主从复制机制,您需要对写入和读取进行分区。 一个负载均衡器不会为你做这些工作。 您将需要在应用程序中对读取和写入进行分区,或者编写中间层。 完成此操作后,可以在负载平衡器后面放置多个从站,并将其写入单个主站。
Redis速度足够快,很less会在复制中看到明显的延迟。 特别是如果运行configuration为不在本地写入的主节点,并运行一个或多个不在负载均衡器后面的用于处理持久性的从节点。
至于处理一个down master,你可以在一个或多个slave上写/使用一个heartbeat style监视器来监视一个dead master并接pipe。 你仍然可以使用一些负载平衡器。 例如,在LB上使用虚拟IP,并将指定的次级设置为较低的权重或任何您select的LB的任期)。 然后将此服务器configuration为主服务器的从服务器,但不能在读池中。 让它听一个LB不能路由到的非标准端口。 当它检测到主设备出现故障时,使用相应的端口并发出SLAVE OF NOONE命令。
我还希望看到监视进程告诉负载均衡器根本不使用主机。 这样,如果在准备就绪之前恢复在线状态,则可以将其从服务器转移到当前主服务器,然后在与备用主服务器同步后再迁移回服务器。
最终,工作的价值取决于你真正的要求有多严格。 无论哪种方式,如果你真的需要不丢失一个单一的写,你会想编写你的作家,如果它无法连接它排队这些写入磁盘和日志或提醒某人。
而不是使用内置的redis同步,在你的定制状态服务的代码中处理这个问题呢?
因此,在两台或多台服务器进行负载平衡的情况下,每台服务器都会有一个其他服务器的列表,在写入其本地Redis实例之后,它们只会向其他服务器写入相同的条目?
假设这样做,那么当服务器重新联机时,它应该只是一个处理同步实例的问题。 当你的服务重新启动时你能强制这个吗? 使本地版本同步到另一个实例? 或只是得到所有的date比当地最新的date?