我们目前正在使用Redis 2.8.4和StackExchange.Redis(并喜欢它),但目前没有针对硬件故障等的任何保护措施。我正在尝试使解决方案起作用,从而使我们具有主/从属和哨兵监视功能,但无法完全到达目标位置,并且在搜索后无法找到任何实际的指针。
因此,目前我们已经做到了:
每个节点上都有3个Redis服务器和哨兵(由Linux专家设置):devredis01:6383(主服务器)devredis02:6383(从属服务器)devredis03:6383(从属服务器)devredis01:26379(哨兵)devredis02:26379(哨兵)devredis03: 26379(前哨)
我能够将StackExchange客户端连接到Redis服务器,并使用Redis Desktop Manager进行读写操作,并验证是否正在所有Redis实例之间复制数据。
我还可以使用其他ConnectionMultiplexer连接到哨兵服务,查询配置,询问主redis节点,询问slave等。
我们还可以杀死主Redis节点,并验证其中一个从属服务器已升级为主服务器,并复制到另一个从属服务器继续工作。我们可以观察到redis连接试图重新连接到主服务器,而且如果我重新创建ConnectionMultiplexer,我可以再次写入/读取到新升级的主服务器并从从服务器读取。
到目前为止,一切都很好!
我缺少的一点是如何将它们整合到生产系统中?
我应该从哨兵那里获取redis端点并使用2个ConnectionMultiplexers吗?我究竟该怎么做才能检测到某个节点发生故障?StackExchange可以自动为我执行此操作,还是可以通过一个事件,以便我可以重新连接Redis ConnectionMultiplexer?我是否应该处理ConnectionFailed事件,然后重新连接以便ConnectionMuliplexer找出新的主服务器是什么?大概在我重新连接时,任何写尝试都将丢失吗?
我希望我不会在这里遗漏一些非常明显的东西,我只是在努力将它们放在一起。
提前致谢!
我只是问了这个问题,然后发现了一个与您和我的问题类似的问题,我相信这可以回答我们的代码(客户端)现在如何知道当前主服务器宕机时哪个是新的主服务器?
显然,您只需要订阅并收听Sentinels的活动即可。很有道理..我只是觉得有一种更简化的方法。
我读了一些有关Twemproxy for Linux的信息,它充当代理,可能对您有用吗?但是我在Windows上使用Redis,并试图找到Windows选项。如果那是应该被批准的方式,那么我们可能只是迁移到Linux。