一、需求背景
Nginx集群模式已经创建,需要配置负载均衡,使用户的请求被分配到俩台服务器访问。
Master:192.168.1.137:80
Slave:192.168.1.138:80
统一负载访问入口:192.168.1.137:88

基础配置如下:
user root root;worker_processes 1;worker_rlimit_nofile 65535;error_log /data/nginx/logs/error.log warn;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;upstream fz {ip_hash;fair;server 192.168.1.137:80 weight=1;server 192.168.1.138:80 weight=4;}server {listen 88;server_name localhost;location / {proxy_pass http://fz;proxy_set_header Host $host;}}keepalive_timeout 65;client_max_body_size 100M;client_body_buffer_size 1M;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;include /data/nginx/conf/*.conf;proxy_connect_timeout 600;proxy_send_timeout 600;proxy_read_timeout 600;send_timeout 600;}
核心配置参数如下:
upstream fz {ip_hash;fair;server 192.168.1.137:80 weight=1;server 192.168.1.138:80 weight=4;}
server {listen 88;server_name localhost;location / {proxy_pass http://fz;proxy_set_header Host $host;}
通过调整该配置中的upstream模块配置,实现各种不同方式的负载。
二、默认RR(round-robin)简单轮询
upstream fz {server 192.168.1.137:80;server 192.168.1.138:80;}
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
三、权重负载
upstream fz {server 192.168.1.137:80 weight=1;server 192.168.1.138:80 weight=4;}
表示用户每访问5次,其中有4次访问到Server 192.168.1.138:80,有1次访问到 Server 192.168.1.137:80。
该方式指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
四、IP-Hash负载
上面俩种方式:程序如果采用了session保存数据,则会导致会话丢失,用户重新登陆等问题,故需要一个客户只访问一个服务器。
upstream fz {ip_hash;server 192.168.1.137:80 weight=1;server 192.168.1.138:80 weight=4;}
该方式实现了一个客户端IP,访问到一个服务端,会话Session不会因为刷新而改变。
五、Fair(第三方)负载均衡
1、下载fair
官方下载地址:https://github.com/gnosek/nginx-upstream-fair
上传到//usr/local/目录下,并解压。
2、编译添加该模块
因该服务器已经安装过nginx,故需要新增编译该模块。
首先使用nginx -V查看当前已经编译的模块,在后面新增该参数。
--add-module=/usr/local/nginx-upstream-fair-master
进入nginx的编译目录,执行以下命令:
./configure --prefix=/usr/local/Yinling/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_random_index_module --with-http_gzip_static_module --add-module=/usr/local/nginx-upstream-fair-master3、处理编译过程中的报错
报错信息如下:
“ngx_http_upstream_srv_conf_t’没有名为‘default_port’的成员”报错解决方法为:
sed -ri "s/default_port/no_port/g" /usr/local/nginx-upstream-fair-master/ngx_http_upstream_fair_module.c4、编译后的nginx替换原Nginx
cp nginx /usr/local/nginx/sbin/5、配置fair负载
upstream fz {fair;server 192.168.1.137:80;server 192.168.1.138:80;}
按响应时间来分配请求,响应时间短的优先分配,动态调整服务器的权重。
五、URL_Hash负载
upstream fz {hash $request_uri consistent;server 192.168.1.137:80;server 192.168.1.138:80;}
nginx 1.7.2版本后,已经集成了url hash功能,可直接使用,不需要再安装三方模块。
url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
Consistent表示使用一致性hash算法。
六、least_conn调度负载
upstream fz {least_conn;server 192.168.1.137:80;server 192.168.1.138:80;}
least_conn调度算法:调度至客户端连接数最小的节点服务器。假设∶
192.168.1.137:80节点有10个连接、192.168.1.138:80节点有5连接,此时新的连接进入会分发给b节点。

