nginx负载平衡 - 保留最后一个工作服务器

时间:2015-10-28 08:37:27

标签: nginx load-balancing

我有两台服务器A和B. 大多数情况下,两台服务器都没有同时运行。

所以当A运行时,很可能是B没有运行。 当B运行时,很可能是A没有运行。 A和B之间的这种转换可能在几周后发生。

所以我希望nginx重定向到正在运行的服务器,保持使用该服务器,直到它关闭。

我尝试过这个解决方案:

    upstream backend { 
     server SERVER_A; 
     server SERVER_B;
    }
    server {...}

这是有效的,但我可以在日志中看到它会定期尝试连接到“关闭”服务器。

然后我试了一下:

 upstream backend { 
     server SERVER_A; 
     server SERVER_B backup;
    }
    server {...}

如果SERVER_A启动,则此功能正常。但如果它是SERVER_B,那么它经常尝试访问SERVER_A。 实际上,在这种情况下,正确的配置将是“服务器SERVER_A备份;”但我认为我们不能进行动态重新配置; - )

实际上,nginx定期尝试访问关闭服务器并不是什么大问题,但如果我可以使用正确的配置来避免这种情况,那就更好了。

我知道fail-timeout参数。但我认为它不会真正解决我的问题,甚至可能在切换过程中增加一些停机时间。

提前致谢。

1 个答案:

答案 0 :(得分:1)

根据服务器切换的受控机制,只需要一个用于标记单个服务器的挂钩:

sed -i 's/server SERVER_A;/server SERVER_A down;/' /etc/nginx/nginx.conf
nginx -s reload

处理正常重新加载的标准过程的配置负载是安全的:http://nginx.org/en/docs/beginners_guide.html#control

  

主进程收到重载配置信号后,   它检查新配置文件的语法有效性并尝试   应用其中提供的配置。如果这是成功的话   主进程启动新的工作进程并将消息发送到旧进程   工人进程,要求他们关闭。否则,主人   进程回滚更改并继续使用旧的   组态。老工人进程,接收命令关闭,   停止接受新连接并继续为当前服务   请求直到所有此类请求都得到服务。在那之后,老了   工人进程退出。