nginx反向署理,负载平衡,动静分离

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
反向署理,负载平衡

nginx通常被用作后端服务器的反向署理,这样就可以很方便的实现动静分离以及负载平衡,从而大大进步服务器的处理能力。
nginx实现动静分离,实在就是在反向署理的时候,如果是静态资源,就直接从nginx发布的路径去读取,而不必要从背景服务器获取了。
但是要注意,这种环境下必要保证后端跟前端的步伐保持一致,可以使用Rsync做服务端主动同步或者使用NFS、MFS分布式共享存储。
Http Proxy模块,功能很多,最常用的是proxy_pass和proxy_cache
如果要使用proxy_cache,必要集成第三方的ngx_cache_purge模块,用来清除指定的URL缓存。这个集成必要在安装nginx的时候去做,如:
./configure --add-module=…/ngx_cache_purge-1.0 …
nginx通过upstream模块来实现简单的负载平衡,upstream必要定义在http段内
weight轮询(默认):吸收到的哀求按照顺序逐一分配到不同的后端服务器,纵然在使用过程中,某一台后端服务器宕机,nginx会主动将该服务器剔除出队列,哀求受理环境不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调解不同的服务器上哀求的分配率;权重数据越大,被分配到哀求的几率越大;该权重值,重要是针对实际工作环境中不同的后端服务器硬件配置进行调解的。
ip_hash:每个哀求按照发起客户端的ip的hash效果进行匹配,这样的算法下一个固定ip所在的客户端总会访问到同一个后端服务器,这也在肯定程度上办理了集群部署环境下session共享的标题。
署理

说到署理,起首我们要明确一个概念,所谓署理就是一个代表、一个渠道;
此时就设计到两个角色,一个是被署理角色,一个是目标角色,被署理角色通过这个署理访问目标角色完成一些任务的过程称为署理操作过程;如同生活中的专卖店~客人到某达斯专卖店买了一双鞋,这个专卖店就是署理,被署理角色就是某达斯厂家,目标角色就是用户
正向署理

我们如果由于技能必要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时各人大概都会用一个操作FQ进行访问,FQ的方式重要是找到一个可以访问国外网站的署理服务器,我们将哀求发送给署理服务器,署理服务器去访问国外的网站,然后将访问到的数据转达给我们。
这样的署理模式称为正向署理,正向署理最大的特点是客户端非常明确要访问的服务器所在;服务器只清楚哀求来自哪个署理服务器,而不清楚来自哪个详细的客户端;正向署理模式屏蔽或者隐蔽了真实客户端信息。

反向署理


多个客户端给服务器发送的哀求,nginx服务器吸收到之后,按照肯定的规则分发给了后端的业务处理服务器进行处理了。此时~哀求的泉源也就是客户端是明确的,但是哀求详细由哪台服务器处理的并不明确了,nginx扮演的就是一个反向署理角色
反向署理,重要用于服务器集群分布式部署的环境下,反向署理隐蔽了服务器的信息!
 
在实际生产项目中,大部门的就是正向署理和反向署理结合起来使用

 我们在实际项目操作时,正向署理和反向署理很有大概会存在在一个应用场景中,正向署理署理客户端的哀求去访问目标服务器,目标服务器是一个反向署理服务器,反向署理了多台真实的业务处理服务器
 
实验:负载平衡

   三台主机
  nginx        192.168.100.10
  http1         192.168.100.20
  http2         192.168.100.30
  实验前都必要关闭selinux,防火墙
   
  1. //rs1主机上,安装httpd,然后添加一个测试网页
  2. [root@rs1 ~]# yum -y install httpd
  3. [root@rs1 ~]# echo "this is rs1" > /var/www/html/index.html
  4. [root@rs1 ~]# systemctl restart httpd
  5. [root@rs1 ~]# systemctl enable httpd
  6. //rs2主机上,安装httpd,然后添加一个测试网页
  7. [root@rs2 ~]# yum -y install httpd
  8. [root@rs2 ~]# echo "this is rs2" > /var/www/html/index.html
  9. [root@rs2 ~]# systemctl restart httpd
  10. [root@rs2 ~]# systemctl enable httpd
  11. //在nginx主机上,修改配置文件,设置负载均衡
  12. [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
  13. //在http{}中配置upstream
  14. .....
  15.     upstream cc {
  16.         server 192.168.100.20;
  17.         server 192.168.100.30;
  18.     }
  19. server {
  20.         listen       80;
  21.         server_name  localhost;
  22.         location / {
  23.             proxy_pass http://cc;
  24.         }
  25. //测试配置文件是否正确,然后重载nginx
  26. [root@nginx ~]# nginx -t
  27. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  28. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  29. [root@nginx ~]# nginx -s reload
复制代码
测试访问


增长权重

设置权重,如果想其中一台后端真实服务器,多承担一些访问量,可以去设置weight权重
  1. upstream cc {
  2.         server 192.168.100.20 weight=2;
  3.         server 192.168.100.30;
  4.     }
复制代码
测试访问


此时访问的时候,rs1这台主时机访问两次后才会轮到rs2

此时,我们发现三台主机都是使用80端口,以是,在nginx配置文件中的upstream中,对应的真实后端服务器,我们并没有设置端口。如果其中某台后端服务器使用8080端口呢?我们怎样进行设置,rs1为8080端口,rs2为80端口
  1. 首先修改rs1的httpd服务,侦听8080端口,并重启httpd服务
  2. [root@rs1 ~]# vim /etc/httpd/conf/httpd.conf
  3. Listen 8080
  4. [root@rs1 ~]# systemctl restart httpd
  5. //在nginx中
  6.     upstream cc {
  7.         server 192.168.100.20:8080 weight=2;
  8.         server 192.168.100.30:80;
  9.     }
  10. [root@nginx ~]# nginx -s reload
复制代码
测试访问


配置ip_hash

  1. upstream cc {
  2.         ip_hash;
  3.         server 192.168.100.20:8080 weight=2;
  4.         server 192.168.100.30:80;
  5.     }
  6. [root@nginx ~]# nginx -s reload
复制代码
测试访问

            ip_hash这种负载平衡就是:比方多个用户通过nginx访问到了后端的httpd集群中,这个时候因为有不同用户,以是ip也不同,ip+hash算法盘算的hash值都传到了httpd,nginx就记载了这个ip和hash值,那么下次同一个ip过来还是会分配到这个httpd的。
  
        如果在集群中的某台服务器出现故障,我们想要从nginx的集群配置中移撤除,我们不可以直接的将那一行删掉,比如server 192.168.100.10:8080 weight=2;删掉,如果直接删掉会导致nginx的hash算法重新盘算,那么用户的会话或者说缓存都会失效掉,以是这里如果不消这台服务器,直接比力为down即可,也就是 server 192.168.100.10:8080 down,这么做就可以了。

   动静分离

nginx+tomcat  还是基于上面的环境添加一台tomcat

Tomcat:192.168.100.50

此时tomcat已经部署完成了


 配置nginx,设置动静分离
  1. upstream cc {
  2.         server 192.168.100.20;
  3.         server 192.168.100.30;
  4.     }
  5.     upstream tomcat {
  6.         server 192.168.100.50:8080;
  7.     }
  8.     server {
  9.         listen       80;
  10.         server_name  localhost;
  11.         location / {
  12.             proxy_pass http://cc;
  13.         }
  14.         location /test {
  15.             proxy_pass http://tomcat;
  16.         }
复制代码
测试访问
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表