什么是负载均衡高可用?如何做到业务应用的高可用?

Posted fordrm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是负载均衡高可用?如何做到业务应用的高可用?相关的知识,希望对你有一定的参考价值。

nginx作为所有业务请求的入口,每天都承受着很大的压力,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。那么问题来了,只是实现了nginx的负载均衡高可用就可以了吗?

1. 什么是负载均衡和高可用?

1.1 负载均衡

什么是负载均衡高可用?如何做到业务应用的高可用?_负载均衡

负载均衡,就是使用多个提供相同业务功能的服务器集群对外使用统一的访问入口提供业务,使用其算法将请求分发到后端具体的某个业务服务器的功能,以此来减小单个服务器因压力过大而导致宕机的风险。常见的用来做负载均衡的有:LVS、Nginx、F5(硬件)

1.2 高可用

什么是负载均衡高可用?如何做到业务应用的高可用?_nginx_02

高可用,是指系统的可用程度。系统/应用程序在运行过程中,总会遇到各种各样(OOM/停电/自然灾害)的问题导致服务不可用,为了让业务系统尽可能7x24的提供业务,高可用也成了当代信息技术不可或缺的重要技能。常见的高可用架构分为主备、主从、对称集群、非对称集群。

2. 调度高可用和业务高可用(个人理解)

什么是负载均衡高可用?如何做到业务应用的高可用?_高可用_03

2.1 调度/前端展示高可用

个人理解为是nginx调度后端应用的调度和前端服务的高可用,请求是由用户通过APP/WEB端等发起,nginx接收到这些请求之后,会将前端页面调用的后端接口转发到后端服务器集群,nginx主要是做一个前端页面的展示和后端服务调度的作用,像页面之类的的东西是直接展示给用户的,所以保证用户展示层的高可用也是非常重要的。

2.2 业务高可用

什么是负载均衡高可用?如何做到业务应用的高可用?_负载均衡_04

这个就是本篇文章的重点了,据我了解好多的文章,或者是教育机构教的都只是“调度/前端展示的高可用”,并没有实现“业务高可用”,因为大部分企业使用的nginx的调度算法都是:轮询、加权轮询、ip_hash。这就会导致一个问题,当你的后端集群中的某个应用挂掉了之后,你的nginx还是会把请求转发给这个已经挂掉的后端应用,然后就会有一部分用户请求是正常的,一部分用户的请求是异常的

3.如何实现业务应用的高可用

upstream info_pool 
server 192.168.1.4:8888 max_fails=2 fail_timeout=5s;
server 192.168.1.5:8888 max_fails=2 fail_timeout=5s;
server 192.168.1.6:8888 max_fails=2 fail_timeout=5s;

fail_timeout & max_fails: Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout)再试一次。

在两个节点都可用的情况下,突然有一个节点挂掉,客户端请求过来后哪怕请求到了不可用的节点,此次请求也不会失败,因为Nginx会把此次请求转发到另外一个可用节点,再把结果返回给客户端。

当一个节点挂掉,Nginx不知道节点是否恢复的时候,会把客户端的请求同时转发到两个节点,判断节点健康情况


以上是关于什么是负载均衡高可用?如何做到业务应用的高可用?的主要内容,如果未能解决你的问题,请参考以下文章

keepalived实现nginx的高可用 + nginx负载均衡

nginx实现请求的负载均衡 + keepalived实现nginx的高可用

HTTP服务高可用负载均衡

nginx实现请求的负载均衡 + keepalived实现nginx的高可用

如何搭建应对亿级流量的高可用负载均衡?

负载均衡:Ribbon 如何保证微服务的高可用