Nginx实现负载均衡

一、什么是负载均衡

负载均衡是将负载分载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。通过负载均衡,可以将一台服务器的工作扩展到多台服务器中执行,提高整个网站的负载能力。如下图演示了负载均衡服务器的工作方式:

image.png

二、负载均衡配置

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服务器,测试效果如下图所示:

image.png

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设置。

测试运行效果:

image.png

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

image.png

[root@Nginx nginx-1.14.2]# make 

#上述命令完成nginx和第三方模块fair的编译

image.png

#上述错错的原因是nginx版本过高,nginx-upstream-fair-master.zip模块无法支持。使用此模块,建设采用nginx 1.14.0以下版本或者是通过打补丁的方式,参考网址:https://www.cnblogs.com/ztlsir/p/8945043.html

编译安装成功如下图所示:

image.png

配置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;

 }

测试结论:响应快的服务器都会优先分配,接着才会分配响应速度较慢的服务器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章