Nginx配置实例—负载均衡

1、Nginx负载均衡配置

预期实现效果

在浏览器地址栏中输入:http://www.123.com ,nginx收到请求后把请求平均分匹配到Linux服务器上监听8080和8081端口的两个tomcat服务器上。

1.1 准备工作

(1)首先在host文件中配置域名映射:192.168.92.128 www.123.com
(2)准备两个tomcat服务器,分别监听8080和8081端口,并在各自目录下新建一个edu目录,并创建index.html测试页面,配置完成后启动,让两个tomcat跑起来。

1.2 nginx负载均衡配置

在nginx的http模块下配置upstream模块,upstream的语法是:

upstream 自定义域名{
   [负载均衡策略;]
   server  xxx.xxx.xxx.xxx:port [weight=xx]  [down|backup|max_fails=xx|fail_timeout=xx]l];
}

注:[]中的内容是可选的
简单配置如下:

http {
    #配置负载均衡:默认使用轮询策略
    upstream myserver{
       server 192.168.92.128:8080;
       server 192.168.92.128:8081;
    }

    server {
        listen       80;
        server_name  192.168.92.128;
        charset utf-8;
        location /{
            root   html;
            proxy_pass http://myserver;   
            index  index.html index.htm;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
         }
      
         error_page  404              /404.html;
     }
}                     

测试结果
在浏览器地址栏中输入www.123.com/edu ,结果和预期一样,nginx让两个tomcat轮询处理请求:


负载均衡配置运行结果

2、upstream模块详解

upstream是Nginx中配置负载均衡的关键模块,基本语法:

upstream 自定义域名{
 ......
}

upstream有关的参数如下:

  1. server:用于配置反向服务地址和端口,语法:server address [parameters];
  2. weight:权重,语法:weight=number,默认是1
  3. max_conns:语法:max_conns=number,用于限制到代理服务器的同时活动连接的最大数量,默认是0
  4. max_fail:语法:max_fails=number,允许请求失败的次数。经常和fail_timeout参数配合使用。
  5. fail_timeout:语法:fail_timeout=time, 经过max_fails失败后,服务暂停的时间(默认10s)
  6. backup: 预留的备份服务器(当其他的节点挂掉,备份服务器启动)
  7. down:当前的server暂时不参与负载均衡(不对外提供服务)
  8. slow_start:语法:slow_start=time,设置服务器不正常运行时,或者在一段时间后服务器变为不可用时,服务器将其权重从零恢复到指定值的时间。 默认值为零,即禁用慢速启动。
  9. service:语法:service=name,启用DNS SRV记录的解析并设置服务名称。 为了使此参数起作用,必须为服务器指定resolve参数,并指定不带端口号的主机名。
  10. resolve:监视与服务器域名相对应的IP地址的更改,并自动修改upstream配置,而无需重新启动nginx。

配置示例

upstream myserver{
   server 192.168.92.128:8080 max_fail=3 fail_timeout=100;
   server 192.168.92.128:8081 max_fail=3 fail_timeout=100;
   server 192.168.92.128:8082 backup;    #备用服务器
   server 192.168.92.128:8083 down;      #不参与请求的服务器
   server 192.168.92.128:8084 backup max_conns=1000;   #备用服务器,当启用后最大连接数是1000
}

max_fail=3 fail_timeout=100的含义是:当一台服务器在100s内如果出现了3次请求失败,就会报机器的状态设置为down,并且会在100s后尝试重新启用这个服务器。

3、nginx负载均衡调度算法详解

Nginx目前支持的调度策略有以下5种:

(1)轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream myserver{
   server 192.168.92.128:8080;
   server 192.168.92.128:8081;
}
(2)加权轮询

指定轮询权重,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。

upstream myserver{
   #在server语句中加入weight参数指定一个权重就进入到加权轮询模式
   #8080获得的请求是8081的2倍
   server 192.168.92.128:8080  weight=10;
   server 192.168.92.128:8081  weight=5;  
}
(3)ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享的问题。应用场景:保持session 一至性

upstream myserver{
   #指定ip_hash,就进入到ip_hash模式 
   ip_hash;
   server 192.168.92.128:8080;
   server 192.168.92.128:8081;  
}
(4)url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 应用场景:静态资源缓存,节约存储,加快速度

  hash $request_uri;
  hash_method crc32; 
  server 192.168.92.128:8080;
  server 192.168.92.128:8081;

其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

(5)fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  fair;   #指定fair就会进入到fair模式
  server 192.168.92.128:8080;
  server 192.168.92.128:8081;

留言区

还能输入500个字符