nginx单点问题
只配置一个nginx会有单点问题,怎么解决?
nginx的单点问题就是如果nginx挂了那么整个后边的服务将不可访问,失去了高可用性,可利用nginx、keepalived、lvs(或F5)解决nginx的单点问题,实现高可用、负载均衡、横向拓展的功能
- nginx:用作反向代理
- keepalived:用作监测某个服务是否正常,若不正常则切换到其他备份服务中,如检测nginx有没有挂掉,挂掉后可以将当前nginx功能切换到另外一个nginx上(同理也可以检测lvs)
- lvs:用作负载均衡,作用于操作系统(软件层面)
- F5:用作负载均衡,作用于硬件(硬件层面)
如下图:
反向代理层有两台服务器,分别部署上lvs+keepalived,两台服务器对外界设置成相同的虚拟ip,若keeplived检测到其中一台的lvs故障了,可以马上切换到另一台的lvs,该过程对调用方透明。运用lvs+keepalived+nginx架构,lvs作为一款作用在操作系统层面的负载均衡的中间件,每秒可承受高达10w的QPS,一天就是
24 * 60 * 60 * 10w=80亿次请求,能满足99%的公司的需求了,如果还要拓展就只能在DNS服务上给一个域名配置多个不同的外网ip(比如此处配置成10.58.0.1、10.58.0.2),每个外网ip配置一套相同的内网[lvs+nginx+keepalived]架构,这样能处理的QPS就是80亿的倍数了
前端页面访问过程:
浏览器拿域名[58daojia.com]到DNS服务器解析,得到具体的'外网ip',浏览器再访问具体的'外网ip'
->
请求来到具体的'外网ip'服务器上,该服务器的反向代理层设置了lvs+keepalived,lvs负责负载均衡地将请求均衡转到内网各个nginx上,keepalived负载监控lvs是否挂掉
->
请求被转到内网某个nginx服务器上,该nginx再将请求反向代理到内网某个tomcat上
->
tomcat响应请求提供服务,并按原链路返回数据