一、什么是负载均衡
负载均衡是将负载分载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。通过负载均衡,可以将一台服务器的工作扩展到多台服务器中执行,提高整个网站的负载能力。如下图演示了负载均衡服务器的工作方式:
二、负载均衡配置
Nginx不仅可以作为一个Web服务器或反向代理服务器,还可以通过轮询、权重、ip_hash、第三方模块多种方式实现负载均衡。
1.基础配置环境:所有配置负载均衡方式的基础环境一至
准备3台虚拟机,并全部安装Nginx服务器
负责均衡服务器:192.168.12.128
后端web1服务器:192.168.12.129
后端web2服务器:192.168.12.130
后端备份服务器:192.168.12.131
1)配置一般轮询负载均衡
#配置nginx.conf文件
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
server 192.168.12.129;
server 192.168.12.130;
}
2)加权轮询负载均衡
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
server 192.168.12.129 weight=1 max_fails=1 fail_timeout=2;
server 192.168.12.130 weight=8 max_fails=2 fail_timeout=2;
server 192.168.12.131 backup;
#当所服有务器岩机了,会自动启用预留的备份服务器
}
参数说明:
weight 参数值越高则被分配到的概率越大
max_fails 允许请求失败的次数,默认为1
fail_timeout 在经历了max_fails次失败后,暂停服务的时间
backup 预留的备份机器
down 表示当前的server暂时不参与负载均衡
测试方式:
对其他服务器做#nginx -s quit
只留back服务器,测试效果如下图所示:
3)ip_hash负载均衡
ip_hash方式的负载均衡,是将每个请求按照访问IP的hash结果分配,这样可以使来自同一个IP的客户端用户固定访问一台Web服务器,有效地解决了动态网页存在Session共享问题。
这种方式,无法保证负载均衡,建议少使用。
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
ip_hash;
server 192.168.12.129 ;
server 192.168.12.130 ;
server 192.168.12.131 down;
}
参数说明:
down 在负载均衡时,会忽略服务器的分配;
ip_hash方式不能使用weight和backup设置。
测试运行效果:
4)利用第三方模块
按照Web服务器的响应时间实现负载均衡,响应时间短的优先分配。
备份已安装的Nginx
[root@Nginx ~]# cp -r /usr/local/nginx/ /usr/local/nginx_old
重新编译安装Nginx
https://github.com/gnosek/nginx-upstream-fair #下载nginx-upstream-fair-master.zip
[root@Nginx src]# unzip nginx-upstream-fair-master.zip
-bash: unzip: command not found
[root@Nginx src]# yum install unzip
[root@Nginx src]# unzip nginx-upstream-fair-master.zip
Archive: nginx-upstream-fair-master.zip
creating: nginx-upstream-fair-master/
inflating: nginx-upstream-fair-master/.gdbinit
inflating: nginx-upstream-fair-master/README
inflating: nginx-upstream-fair-master/config
inflating: nginx-upstream-fair-master/ngx_http_upstream_fair_module.c
#mv nginx-upstream-fair-master nginx-upstream-fair
[root@Nginx src]# cd nginx-1.14.2
[root@Nginx nginx-1.14.2]# ./configure \
> --prefix=/usr/local/nginx \
> --with-http_ssl_module \
> --add-module=/usr/local/src/nginx-upstream-fair
[root@Nginx nginx-1.14.2]# make
#上述命令完成nginx和第三方模块fair的编译
#上述错错的原因是nginx版本过高,nginx-upstream-fair-master.zip模块无法支持。使用此模块,建设采用nginx 1.14.0以下版本或者是通过打补丁的方式,参考网址:https://www.cnblogs.com/ztlsir/p/8945043.html
编译安装成功如下图所示:
配置fair方式的负载均衡
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
server 192.168.12.129;
server 192.168.12.130;
server 192.168.12.131;
fair;
}
测试结论:响应快的服务器都会优先分配,接着才会分配响应速度较慢的服务器。