Nginx 恢复上线后切换回第一个节点

Nginx switches back to the first node after it comes back online

我正在使用 Nginx 作为故障转移集群,其中一个服务作为上游提供。 该服务同时在两个节点中 运行 并且 Nginx 在重定向到其他节点的第三个节点中设置。 当我们关闭一个节点中的服务时,它会成功切换到备份节点,但是当第一个节点中的服务重新打开时,它会切换回第一个节点。 下面是Nginx中配置的相关部分:

http {
include       mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"'                
                  '"upstream: $upstream_addr"'
                  '"status: $upstream_status"';

access_log  logs\access.log  main;


sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

upstream backend {
    server ip1:port1 fail_timeout=5s max_fails=1;
    server ip2:port2 backup;
}

server {
    listen       8000;
    server_name  ip3;
    
    ssl_certificate      ...\certificate.crt;
    ssl_certificate_key  ...\privateKey.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    
location / {
        proxy_pass https://backend;
       
}

服务恢复后如何停止切换主节点?

谢谢。

这是期望的行为。如果 NGINX 在两个节点之间保持平衡并且其中一个被标记为 backup NGINX 将切换到此注释以防主节点完成。

一旦主节点恢复正常,NGINX 将始终切换回主节点。

在此处阅读更多相关信息。 https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

如果您正在寻找类似蓝/绿部署的东西,还有其他概念可以做到。

可以使用 NGINX Open Source here

编写bash代码,在主节点备份后将主节点更改为备份节点。如果您需要 bash 代码

,请告诉我