没有负载平衡的Nginx故障转移


13

我在配置Nginx时遇到问题。

我正在使用nignx作为反向代理。我想将所有请求发送到第一台服务器。如果第一台服务器关闭,我想向第二台服务器发送请求。

简而言之,如何在没有负载平衡的情况下提供故障转移解决方案?

Answers:


13

您想要的是主动+被动设置。这是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将接手。


如果您有多个备份怎么办?
Benny Bottema

0

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;
}

0

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

  1. fail_timeout:尝试失败的总时间,同时还将服务器标记为DOWN。如果5秒钟,则将在5秒钟内尝试max_fail尝试,如果仍然失败,则将该服务器标记为DOWN 5秒钟。
  2. max_fail:最大尝试次数
  3. proxy_connect_timeout:等待连接的时间。

在以下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
        }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.