虚拟机场景:我们有3个虚拟机。两个虚拟机安装了带有复制的redis服务器,另一个虚拟机安装了nodejs服务器。所有3个虚拟机都配置了redis sentinel服务器。redis sentinels一切正常。就像当我们停止主人,哨兵指定其他服务器作为主人。
nodejs场景:我们正在使用 ioredis
npm包。我们按程序包配置哨兵。当我们使用命令手动关闭redis服务器时,它工作正常 service redis stop
. 它创建与新指定的主服务器的连接。
问题:当我们直接关闭主redis服务器所在的vm时,问题就出现了。redis sentinel如期提名了新主人,但是 ioredis
这方面没有任何进展。所以它总是挂在老主人的身上,这是不可接近的。复制的另一个步骤是,当我们在redis cli上执行命令时 DEBUG SLEEP 500
,新主机由sentinels指定,但节点包直到500秒完成(即直到旧主机服务器联机)才创建与新连接的连接。
查看代码后的附加信息 ioredis
,它们在内部使用node的net包。在关闭vm时,net包没有触发任何错误事件(没有关于它可能触发的其他事件的信息),这就是原因,它将挂起直到vm通电。包redis也发生了同样的情况(不是触发事件),但是它不支持sentinel,所以对于这个包来说是可以的。
暂无答案!
目前还没有任何答案,快来回答吧!