nginx 故障转移(无负载平衡)

nginx 故障转移(无负载平衡)

我在配置 nginx 时遇到了麻烦。

我使用 nignx 作为反向代理。我想将所有请求发送到我的第一个服务器。如果第一个服务器宕机,我想将请求发送到第二个服务器。

简而言之,如果没有负载平衡,如何实现故障转移解决方案?

答案1

您需要的是主动+被动设置。以下是 nginx conf 代码片段示例,可帮助您入门:

upstream backend {
    server 1.2.3.4:80 fail_timeout=5s max_fails=3;
    server 4.5.6.7:80 backup;
}

server {
    listen 80;
    server_name whatevs.com;

    location / {
        proxy_pass http://backend;
    }
}

因此,通常情况下,所有请求都会转到主机 1.2.3.4。如果该主机出现三次故障,则 4.5.6.7 将接管。

答案2

扩展 chrskly 的答案,您可能需要配置 3 个标志/配置。

  1. 失败超时:失败尝试的总时间,并将服务器标记为关闭。如果是 5 秒,则将尝试最大失败次数在 5 秒内尝试,如果仍然失败,则将该服务器标记为 DOWN 5 秒。
  2. 最大失败次数:最大尝试次数
  3. 代理连接超时:等待连接的时间。

在以下 GRPC 示例中,如果主服务器在 7 秒内无法连接,则切换到备份服务器并将主服务器标记为关闭 6000 秒:

upstream grpcservers {
    server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1;  # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
    server 192.168.0.XX:9999 backup;
        } 
location / {
            grpc_pass grpc://grpcservers;
            grpc_connect_timeout 7s;  # If conn cant be made in 7sec, switch to backup
        }

答案3

nginx 中的负载平衡非常简单,我们只需在上游范围内配置服务器名称,在那里我们编写用于负载平衡的服务器列表。nginx
默认支持不同的负载平衡算法,它是循环的,但我们用不同的键来配置它,如 ip_hash...

http{
 upstream servername{
    ip_hash//for sticky hash
    least_conn//FOR least connection 
    sever localhost:1001;
    sever localhost:1002;
    sever localhost:1003;
}

相关内容