设为首页 收藏本站
查看: 866|回复: 0

[经验分享] 简述Nginx负载均衡

[复制链接]

尚未签到

发表于 2018-11-11 07:48:48 | 显示全部楼层 |阅读模式
  Nginx在作为负载均衡器的同时也是反向代理服务器,其配置语法相当简单,有轮询、ip_hash、url_hash、权重等多种方法对后端的服务器做负载均衡,同时还支持后端服务器的健康检查。另外,它相对于LVS来说比较有优势的一点是,由于它是基于第七层即应用层的负载均衡,是根据包头内的信息来执行负载均衡任务的,因此对网络的依赖性很小,理论上能PING通就能够实现负载均衡。在实际应用上不仅作为一款性能优异的负载均衡器,同时也是一款适用于高并发环境的web应用软件。
  

优点如下:  
配置文件非常简单,风格和程序一样通俗易懂。
  
成本低廉。Nginx为开源软件,可以免费使用。
  
支持Rewrite 重写规则:可以根据域名、URL的不同,将HTTP请求分配到不同的后端服务器群组上。
  
有内置的健康检查功能:即使后端某台Web服务器宕机,也不影响前端访问。
  
节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header
  
稳定性高:用于反向代理,宕机的概率微乎其微。
  
缺点:
  
目前只支持HTTP和MAIL的负载均衡。
  

  负载均衡算法:
  1、轮询(默认)
  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,则会跳过该服务器分配至下一个健康的服务器。并且它无须记录当前所有连接的状态,所以它是一种无状态调度。
  2、weight 权重
  在轮询的基础上加上权重,weight和访问率成正比,适用于后端服务器性能不一致的情况下。
  3、ip_hash
  每个请求按访问IP的哈希结果进行分配,当新的请求到达时,先将客户端IP通过hash算法进行计算得出一个值,随后的请求客户端IP的hash值只要相同,就会被分配到同一台后端服务器上,该调度算法可以解决Session的问题,但会因为分配不均导致无法保证负载均衡。
  4、fair(第三方)
  按后端服务器的响应时间来分配请求,响应时间短的优先分配。
  5、url_hash(第三方)
  按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器作为缓存时比较有效。
  6、Tengine增加的一致性哈希算法
  将每个Server虚拟成N个节点,均匀分布到哈希环上,每次请求时,根据配置的参数计算出一个hash值,在hash环上查找离这个hash值最近的虚拟节点,对应的Server作为该次请求的后端服务器,好处在于动态增加服务器或者服务器宕机时对集群的影响最小。
  

具体的实现:  
1、轮询rr:
  
upstream test {
  server IP1:PORT;
  server IP2:PORT;
  .............
  }
  
2、权重weight:
  
upstream test {
  server IP1:PORT  weight=A;
  server IP2:PORT  weight=B;
  ..............
  }
  
3、ip_hash
  
upstream test {
  ip_hash;
  server IP1:PORT;
  server IP2:PORT;
  .............
  }
  
4、fair//需要在编译安装时添加模块
  
upstream test {
  server IP1:PORT;
  server IP2:PORT;
  .............
  fair;
  }
  
5、url_hash//需要在编译时添加模块
  
upstream test {
  server IP1:PORT;
  server IP2:PORT;
  .............
  hash $request_url;
  }
  

Nginx的性能优势:  
作为web服务器:Nginx处理静态文件、索引文件以及自动索引效率非常高。
  
作为代理服务器:Nginx可以实现快速高效的反向代理,提高网站性能。
  
作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器,对外进行服务。同时支持简单的容错和利用算法进行负载均衡。
  
在性能方面:Nginx是专门为性能优化而开发的,在实现上非常注重效率。它采用内核epoll模型,可以支持更多的并发连接,并在大并发时占用很低的内存资源。
  
在稳定性方面:Nginx采用了分阶段资源分配技术,使得对CPU与内存的占用率非常低。
  
在高可用方面:Nginx支持热部署,启动速度迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24不间断运行。
  

  几个优化Nginx的措施:
  

一、编译安装过程的优化  
1、减小Nginx编译后的文件大小
  找到在源码目录下的auto/cc/gcc,删除#debug  CFLAGS="$CFLAGS -g
  
2、在编译过程指定CPU类型
  --with-cc-opt='03' --with-cpu-opt=cpu
  cat /proc/cpuinfo |grep “module name”//获得CPU的信息
  
二、利用谷歌开源工具TCMalloc进行优化
  
1、下载并编译安装libunwind、gperftools
  
2、配置gperftools
  echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
  
/sbin/ldconfig
  
3、重新编译安装Nginx并添加
  --with-google_perftools_module
  
4、添加gperftools线程目录
  mkdir /tmp/tcmalloc
  chmod  777 /tmp/tcmalloc -R
  
5、修改Nginx配置文件
  在#pid logs/nginx.pid;这行的下面添加
  google_perftools_profiles /tmp/tcmalloc;
  
6、重启Nginx
  
7、测试:
  lsof -n | grep tcmalloc #测试tcmalloc
  lsof -n | grep nginx  #测试nginx
  
三、内核参数优化/etc/sysctl.conf内
  /sbin/sysctl -p //生效



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633461-1-1.html 上篇帖子: nginx源码编译安装及配置文件说明 下篇帖子: LVS,Nginx,HAProxy简单对比
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表