nginx 负载均衡测试

来源:互联网 发布:简单的企业网站源码 编辑:程序博客网 时间:2024/04/28 08:14

根据张宴的nginx 负载均衡配置来进行配置

传送门:http://blog.s135.com/post/306/

 

1)基础配置,实现访问

修改nginx.conf配置文件,

user  www www;

worker_processes 10;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#最大文件描述符
worker_rlimit_nofile 51200;

events
{
      use epoll;

      worker_connections 51200;
}

http
{
      include       mime.types;
      default_type  application/octet-stream;

      keepalive_timeout 120;

      tcp_nodelay on;

      upstream  www.ydt.com  {
              server   172.16.8.1:80;
              server   172.16.8.2:80;
              server   172.16.8.3:80;
              server   172.16.8.4:80;
      }

      server
      {
              listen  80;
              server_name  www.ydt.com;

              location / {
                       proxy_pass        http://www.ydt.com;
                       proxy_set_header   Host             $host;
                       proxy_set_header   X-Real-IP        $remote_addr;
                       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
              }

              log_format  www_ydt_com  '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log  /data1/logs/www.log  www_ydt_com;
      }

  }

这样就可以直接进行访问了,ngnix负载均衡会自动做源地址转换,这样当客户端和服务器在同网段就不会出现流量的不对称造成的无法访问,缺点是默认情况下服务器不能无法看到真实的客户端IP地址。

 1)用ip_hash替代默认的round robin

ip_hash来代替默认的rr方式,即可以将某客户端IP的请求通过哈希算法定位到同一台后端web服务器上,这样避免了session丢失,解决了session问题。但ip_hash指令无法保证后端服务器的负载均衡,可能有些后端服务器接收的请求多,有些后端服务器接收的请求少;这样会造成负载不均衡

只需修改以下部分:  

   upstream  www.ydt.com  {

              ip_hash;
              server   172.16.8.1:80
max_fails=2 fail_timeout=30s;
              server   172.16.8.2:80 max_fails=2 fail_timeout=30s;
              server   172.16.8.3:80
max_fails=2 fail_timeout=30s;
              server   172.16.8.4:80 max_fails=2 fail_timeout=30s;
      }
默认情况下,nginx的健康检查是基于访问触发的,个人感觉只是一种自动容错的机制,不是类似F5那种自带的健康检查,方式是基于端口的TCP探测。

关于max_fails参数的理解:根据上面的解释,max_fails默认为1,fail_timeout默认为10秒,默认情况下后端服务器在10秒钟之内可以容许有一次的失败,如果超过1次则视为该服务器有问题,则自动跳转到可用的服务器。等待10秒后会再将请求发给该服务器,以此类推进行后端服务器的健康检查。如果将max_fails设置为0,则代表不对后端服务器进行健康检查,这样一来fail_timeout参数也就没什么意义,遇到服务器不可用时会自动容错,转换到可用的服务器上,也不会显示页面无法访问。