1、Nginx 负载均衡的组件模块

ngx_http_proxy_module:proxy代理模块,用于把请求后抛给服务器节点或upstream服务器池。
ngx_http_upstream_module:负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查。

2、upstream模块语法

upstream server_pools {
    #ip_hash;
    server 10.3.151.34:81 weight=1;
    server 10.3.151.246:81 weight=1;
    }

3、upstream模块标签说明

upstream:是关键字必须要有。
server_pools:为一个upstream集群组的名字,可以自己定义,调用时使用。
server:关键字必须要有,后面可以接域名或IP,如果不指定端口,默认是80端口。
weight:代表服务器权重,默认值是1,权重数字越大表示接受的请求比例越大。
ip_hash:根据客户端IP的hash结果分配,解决动态网页的session共享问题,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中不能使用weight和backup。

4、http proxy 模块相关参数

proxy:设置http请求header 项传给后端服务器节点,例如:可实现让代理后端的服务器节点获取到访问客户端用户的真实IP地址。
client_body_buffer_size:用于指定客户端请求主体缓冲区大小,此处如了解前文的http请求包的原理就好理解了。
proxy_connection_timeout:表示反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间。
proxy_send_timeout:表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,nginx将断开这个连接。
proxy_read_timeout:设置nginx从代理的后端服务器获取信息时间,表示连接建立成功后,nginx等待后端服务器的响应时间,其实是nginx已经进入后端的排队之中等候处理的时间。
proxy_buffer_size:设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小。

5、负载均衡实战

5.1、网络架构

web1:10.3.151.34 (安装:nginx,端口监听:80,Server name:www.kang.com)
web2:10.3.151.246 (安装:nginx,端口监听:80,Server name:www.kang.com)
客户端:10.3.151.86

5.2、web1 nginx 配置文件如下:

worker_processes  1;
events {
    worker_connections  1024;
}
error_log  logs/error.log;
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    upstream server_pools {                             #负载均衡服务器
        server 10.3.151.34:81 weight=1;
        server 10.3.151.246:81 weight=1;
        }

server {
        listen       80;
        server_name  www.kang.com;
        location / {
            proxy_pass http://server_pools;                 #proxy_pass 转发
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       81;
        server_name  www.kang.com;
        location / {
            root   html;
            index  index.html index.htm;       #index.html 内容为:10.3.151.34 WWW SERVER
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    #include vhost/*.conf;
}

5.3、web2 nginx 配置文件如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream server_pools {                            #负载均衡服务器
        server 10.3.151.34 weight=1;
        server 10.3.151.246:81 weight=1;
        }

    server {
        listen       80;
        server_name  www.kang.com;
        location / {
            proxy_pass http://server_pools;        #proxy_pass转发
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       81;
        server_name  www.kang.com;
        location / {
            root   html;
            index  index.html index.htm;              #index.html内容:10.3.151.246 WWW SERVER
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

5.4、通过客户端检查是否生效

[root@Auto-Operation ~]# for n in `seq 100`; do curl www.kang.com; sleep 1 ;done        #分别轮询访问两台服务器
10.3.151.34 WWW SERVER
10.3.151.246  WWW SERVER
10.3.151.34 WWW SERVER