Nginx配置说明

upstream 配置

upstream backend{
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=2;
}
  • 权重:使用weight来配置,默认为1,权重越高分配的请求就越多
    然后使用proxy_pass来处理用户请求
location / {
    proxy_pass http://backend;
}

负载均衡算法

负载均衡用来解决用户请求到来时如何选择upstream server,默认采用轮询round-robin

  • round-robin:轮询,以轮询方式将请求转发到上游服务器,通过配合weight配置实现基于权重的轮询
  • ip_hash:根据客户IP进行负载均衡,将相同IP负载均衡到同一个upstream server
upstream backend{
    ip_hash;
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=2;
}
  • hash key [consistent]: 对某个key进行哈希或者使用一致哈希算法进行负载均衡
哈希算法
upstream backend{
    hash $uri 
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=2;
}
哈希一致性算法
upstream backend{
    hash $consistent_key consistent;
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=2;
}
  • least_conn:将请求负载均衡到最少活跃连接的上游服务器.
  • least_time:最小平均响应时间进行负载均衡(商业版提供)

失败重试

通过配置max_fails和max_timeout来指定每个上游服务器失败次数

upstream backend {
    server 192.168.1.11:8080 max_fails=2 fail_timeout=10s weight=1;
    server 192.168.1.12:8080 max_fails=2 fail_timeout=10s weight=1;
}

location /{
    proxy_connect_timeout 5s;
    proxy_read_timeout 5s;
    proxy_timeout 5s;
    
    proxy_next_upstream error timeout;
    proxy_next_upstream_timeout 10s;
    proxy_next_upstream_tries 2;
    proxy_pass http://backend;
    add_header upstream_add $upstream_add;
}

TCP心跳检查

  • interval:监测时间间隔
  • fall:监测失败多少次后上游服务器被标识为不存活
  • rise:检测成功多少次后上游服务器被标识为存活,并可以处理请求
  • timeout:监测请求超时时间配置
upstream backend{
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=2;
    check interval=3000 rise=1 fall=3 timeout=2000 type=tcp;
}

HTTP心跳检查

  • check_http_send:检查时发送HTTP请求内容
  • check_http_expect_alive:服务器返回匹配响应状态码
upstream backend{
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=2;
    
    check interval=3000 rise=1 fall=3 timeout=2000 type=http;
    check_http_send "HEAD /status HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

注意:检查时间间隔不能太短,否则可能因为心跳检查包太多导致服务器挂掉
本文使用的是openresty/1.11.2.1(对应nginx-1.11.2),安装之前需要打nginx_upstream_check_module补丁(check_1.9.2+.patch)到Nginx目录下执行shell:

patch -p0</usr/servers/nginx_upstream_check_module-master/check_1.9.2+.patch

如果不安装补丁,那么ngixn_upstream_check_module模块是不工作的,建议使用wireshark抓包查看是否工作.

推荐阅读更多精彩内容

  • 以下内容来自官方文档 http://nginx.org/en/docs/http/ngx_http_upstrea...
    再回到从前阅读 2,021评论 0 1
  • 配置运行Nginx服务器用户(组) 用于配置运行Nginx服务器用户(组)的指令是user,其语法格式为: use...
    吃瓜的东阅读 3,826评论 0 40
  • 写下这个题目的时候,想笑,这是有多大的勇气来推翻曾经的自己。 对于金钱,我总是慢人半拍,人家享受的时...
    珍珠啊阅读 320评论 0 1
  • 作者说“这本书是不问有什么意义的产物, 给不问有什么意义的读者看”,不求意义,是我久违的读书体验。看完书,书里夹杂...
    琴鸣阅读 149评论 0 0
  • 我的身材是像沙漏那样的,听上去也许会认为是现代女人心中认为的前凸后翘,但是很可惜,我不是,我只是单纯的肉多,个矮,...
    木子T阅读 111评论 0 1