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

nginx load balancing - keep last working server

我有两台服务器A和B。 大多数时候,两个服务器不会同时运行。

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

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

我试过那个解决方案:

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

这是有效的,但我可以在日志中看到它定期尝试连接到 "down" 服务器。

然后我试了一下:

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

如果 SERVER_A 已启动,这将正常工作。但如果它是 SERVER_B,那么它经常尝试访问 SERVER_A。 实际上,在那种情况下,正确的配置是 "server SERVER_A backup;" 但我认为我们不能进行动态重新配置 ;-)

其实nginx周期性尝试访问宕机的服务器并不是什么大不了的事,但如果能通过正确的配置避免这种情况就更好了。

我知道那个失败超时参数。但我不认为它会真正解决我的问题,甚至可能会在切换期间增加一些停机时间。

提前致谢。

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

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

Once the master process receives the signal to reload configuration, it checks the syntax validity of the new configuration file and tries to apply the configuration provided in it. If this is a success, the master process starts new worker processes and sends messages to old worker processes, requesting them to shut down. Otherwise, the master process rolls back the changes and continues to work with the old configuration. Old worker processes, receiving a command to shut down, stop accepting new connections and continue to service current requests until all such requests are serviced. After that, the old worker processes exit.