你真的掌握LVS、Nginx及HAProxy工作原理吗?( 三 )


  • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 Down 掉,能自动剔除 。
  • Weight:指定轮询几率,Weight 和访问比率成正比,用于后端服务器性能不均的情况 。
  • IP_Hash:每个请求按访问 IP 的 Hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 Session 的问题 。
  • Fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配 。
  • URL_Hash(第三方):按访问 URL 的 Hash 结果来分配请求,使每个 URL 定向到同一个后端服务器,后端服务器为缓存时比较有效 。
Nginx 的优点如下:
  • 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有 windows 的移植版本 。
  • 配置异常简单:非常容易上手 。配置风格跟程序开发一样,神一般的配置 。
  • 非阻塞、高并发连接:官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2~3 万并发连接数 。
  • 事件驱动:通信机制采用 Epoll 模型,支持更大的并发连接 。
  • Master/Worker 结构:一个 Master 进程,生成一个或多个 Worker 进程 。
  • 内存消耗小:处理大并发的请求内存消耗非常小 。在 3 万并发连接下,开启的 10 个 Nginx 进程才消耗 150M 内存(15M*10=150M) 。
  • 内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问 。
  • 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头 。
  • 稳定性高:用于反向代理,宕机的概率微乎其微 。
Nginx 的缺点如下:
  • Nginx 仅能支 持 HTTP、HTTPS 、TCP、 Email 等协议,这样就在适用范围上面小些,这个是它的缺点 。
  • 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 URL 来检测 。不支持 Session 的直接保持,但能通过 IP_Hash 来解决 。
HAProxy
HAProxy 支持两种代理模式 TCP(四层)和 HTTP(七层),也是支持虚拟主机的 。
HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 URL 来检测后端服务器的状态 。
HAProxy 跟 LVS 类似,本身就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的 。
HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL 主从做负载均衡 。
HAProxy 负载均衡策略非常多:
  • Round-Robin(轮循)
  • Weight-Round-Robin(带权轮循)
  • Source(原地址保持)
  • RI(请求 URL)
  • RDP-Cookie(根据 Cookie)
Reference:
  • 钟武:https://zhongwuzw.github.io
  • 王晨纯:http://www.importnew.com/11229.html
  • 周旭龙:http://edisonchou.cnblogs.com




推荐阅读