Fork me on GitHub

负载均衡高可用(HA)


Keepalived+LVS+Nginx实现系统高可用

  系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行。针对系统架构设计的高可用要求,我们需要解决Nginx负载均衡出现单机故障时,系统正常运行的需求。所以系统架构引入Keepalived组件,实现系统高可用。

Keepalived介绍

  Keepalived是分布式部署系统解决系统高可用的软件,结合LVS(Linux Virtual Server)使用,其功能类似于heartbeat,解决单机宕机的问题。

Keepalived技术原理

  keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。通过VRRP协议结合LVS,对组群服务器监控情况,若master出现宕机情况,则将VIP漂移到backup机上。实现了分布式系统高可用。可以理解为:keepalived是LVS的管理软件,根据监控情况,将宕机服务器从ipvsadm移除掉。

用 keepalived+lvs的原因

  1.抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量.
  2.工作稳定
  3.还有一个重要原因是keepalived的配置文件可以用include分离很简洁明了、易于扩展。
  4.keepalived还有一个好处就是可以像nginx那样修改配置文件后平滑启动

架构图

  
  VIP(Virtual IP):这里指定公网IP地址。
  lvs来分流、使用keepalived来实现高可用,nginx来代理
或者这个图
  
  1.这样依赖负载压力过大的时候横向添加nginx负载均衡,避免了lvs-dr,在每台realserver上绑定vip,只需在nginx服务器上绑定vip即可。
  2.负载的服务增加只需在nginx的配置文件中动态添加。
  3.后期横向还可以加入haproxy来做mysql的读写分离。
  4.lvs+keepalived双机设置为不抢占模式,避免单点故障,宕机无缝切换,nginx故障自动剔除。

为什么会出现两者被同时使用呢?

  其实,这要从两者的各自优势来说了。
  nginx用来做http的反向代理,能够upsteam实现http请求的多种方式的均衡转发。由于采用的是异步转发可以做到如果一个服务器请求失败,立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。这可以最大程度的提高系统的请求成功率。
  lvs采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。
  进一步来说:当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。
  也就是,当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。
  但是仅仅使用lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。但是如果在lvs的后端在添加一层nginx(多个),每个nginx后端再有几台应用服务器,那么结合两者的优势,既能避免单nginx的流量集中瓶颈,又能避免单lvs时一锤子买卖的问题。


Keepalived+LVS+Nginx+varnish实现系统高可用


参考文章
  LVS+Nginx负载均衡
  关于LVS+Nginx为什么会被同时使用的思考

-----------------本文结束,感谢您的阅读-----------------