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

nginx负载平衡-保持最后一个工作服务器,nginx,load-balancing,Nginx,Load Balancing,我有两台服务器A和B。 大多数情况下,两台服务器不会同时运行 因此,当A正在运行时,B很可能没有运行。 当B正在运行时,很可能A没有运行。 A和B之间的这种转换可能在几周后发生 因此,我希望nginx重定向到正在运行的服务器,并继续使用该服务器,直到它关闭 我尝试过这种解决办法: upstream backend { server SERVER_A; server SERVER_B; } server {...} 这是工作,但我可以看到,在日志中

我有两台服务器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 {...}
如果服务器A已启动,则此功能正常工作。但如果它是SERVER_B,那么它经常尝试访问SERVER_A。 实际上,在这种情况下,正确的配置应该是“服务器-服务器-备份”;但我认为我们不能进行动态重新配置;-)

实际上,nginx周期性地尝试访问宕机服务器并不是什么大不了的事,但是如果我可以避免使用正确的配置,那就更好了

我知道关于失败超时的争论。但我认为这并不能真正解决我的问题,甚至可能会在切换过程中增加一些停机时间


提前感谢。

根据服务器切换的受控机制,只需要一个钩子来标记单个服务器的关闭:

sed -i 's/server SERVER_A;/server SERVER_A down;/' /etc/nginx/nginx.conf
nginx -s reload
标准程序的配置加载,处理优雅的重新加载且安全:

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


A和B之间的这种转换可能在几周后发生。这种行为是否受到控制?是否有任何程序可以挂接以标记另一台服务器已关闭?是的,这是通过bash脚本控制的。如果我能告诉nginx关于这个开关的事,那就更好了。谢谢!它运行良好。我并没有考虑对配置进行热替换的可能性。最后,我们不能忘记关闭sed-i的服务器/服务器_B;/'/etc/nginx/nginx.conf