一、需求背景
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-master
3、处理编译过程中的报错
报错信息如下:
“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.c
4、编译后的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节点。