我有两台服务器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参数。但我认为它不会真正解决我的问题,甚至可能在切换过程中增加一些停机时间。
提前致谢。
答案 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
主进程收到重载配置信号后, 它检查新配置文件的语法有效性并尝试 应用其中提供的配置。如果这是成功的话 主进程启动新的工作进程并将消息发送到旧进程 工人进程,要求他们关闭。否则,主人 进程回滚更改并继续使用旧的 组态。老工人进程,接收命令关闭, 停止接受新连接并继续为当前服务 请求直到所有此类请求都得到服务。在那之后,老了 工人进程退出。