负载均衡

upstream backend {
server backend1.example.com weight=5 max_fails=3 fail_timeout=30s;
server backend2.example.com:8080;
}

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

语法: server name [parameters]

weight=NUMBER :用于设置服务器的权重。如果没有设置,那么它将会等于1

max_fails=NUMBER:用于设置在一定的时间内对同一后台服务器进行尝试连接的次数,通过这个次数之后仍然没有连接成功,那么服务将会看做无效,如果没有设置改参数,尝试的次数是1,设置为0,将关闭检测

fail_timeout=TIME:用于设置客户端尝试连接后台服务器的时间,在这个时间内,可能会完成由max_fails设置的最多次数。如果没有设置改参数,那么默认是10秒

down:标记这台server将永久离线,通常和ip_hash一同使用

backup:它是一个备用的标志,即如果出现所有非备份服务器都宕机或繁忙无法接收连接时,才会使用本服务器,改参数无法和ip_hash一同使用

问题

如果我们在upstream中仅设置了一个server,那么Nginx会在内部变量中设置为1,这就意味着max_fails和fail_timeout将不会被处理

结果:如果Nginx不能连接到上游服务器,那么请求将会失败

解决:多次使用同一台服务器

upstream backend {
     server  backend1.example.com weight=5;
     server  backend1.example.com max_fails=3 fail_timeout=30s;
     server  backend1.example.com;
}

ip_hash

upstream backend {
    ip_hash;
     server  backend1.example.com  max_fails=3 fail_timeout=30s;
     server  backend2.example.com down;
}

如果使用了该指令,那么将会导致客户端的请求以客户端的ip地址分布在upstream中的server之间,它的关键技术在于对这个请求客户端ip地址进行哈希计算,这种方式保证了客户端总是能够传递到同一台后台服务器,但是如果该服务器被认定为无效,那么这个客户端的请求将会被传递到其他服务器。因此这种机制是一个高概率将客户端请求总是连接到同一台服务器

如果使用这个指令,就不能使用weight方法,如果一个upstream中指定一台s的erver,这个服务器需要移除,那么需要在该IP或者机器名之后添加down参数。

原文地址:https://www.cnblogs.com/sellsa/p/7787903.html