云产品之负载均衡那些事儿

Posted 码农与软件时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云产品之负载均衡那些事儿相关的知识,希望对你有一定的参考价值。

一、基础

  我们访问一个企业网站或者访问流量较小的网站时,网站后台可以仅仅部署一台服务器或者向云有云厂商购买一台ECS云服务器,其基础链路如下图所示:

  当网站的访问量突增后,一台服务器无法支撑用户的请求时,就需要增加服务器和数据库实例进行流量的分担,而分配流量给后台的工作就由负载均衡来做,也就是负载均衡作为应用流量的入口,需要挑选一台服务器,将用户的请求转发给它并进行逻辑处理,但对用户来说,这个过程是透明的,感知不到负载均衡的存在。如下图所示:

云产品之负载均衡那些事儿

负载均衡的体现形式可以是硬件设备也可以是软件。为了更加深入地理解负载均衡,我们来看下网络的OSI模型:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,如下图所示:

云产品之负载均衡那些事儿

云产品之负载均衡那些事儿

  综合上述介绍,在不考虑CDN的情况下,一个高并发网站的的负载均衡示例如下图所示:

云产品之负载均衡那些事儿

二、软件实现

2.1. LVS

LVS(Linux Virtual Server,Linux虚拟服务器)是由章文嵩博士发起的自由软件项目,从Linux2.4版本以后,LVS成为Linux标准内核的一部分。LVS工作在网络层,可以实现高性能,高可用的服务器集群。从用户的角度来看,用户使用的是一个虚拟服务器提供的高性能服务,而所有的内部应用对其来说都是透明的。LVS和服务器集群构成一个虚拟服务器,如下图所示:

云产品之负载均衡那些事儿

LVS实现负载均衡两个的核心问题是: 

① 选择哪个服务器(Real Server),即调度算法?

② 如何进行报文的转发?

2.1.1 调度算法

LVS的负载均衡调度算法有:

① 轮询

② 加权轮询

③ 最小连接

④ 加权最小连接

⑤ 基于局部性的最少链接

⑥ 带复制的基于局部性最少链接

 

2.1.2. 报文的转发

我们知道,LVS可以进行二层和四层负载,分别通过LVS DR和LVS NAT实现。下面分别来看下基本原理。

1. LVS NAT

云产品之负载均衡那些事儿

   

2.LVS DR

云产品之负载均衡那些事儿

2.2. nginx

Nginx是一种轻量级的Web服务器和反向代理服务器,由俄罗斯的伊戈尔·西索夫开发。其突出特点是占有内存少,并发能力强。Nginx作为反向代理服务器可实现七层负载均衡。所谓反向代理就是Nginx接收用户请求,然后将请求转发给内部网络上的服务器,并将服务器的响应结果返回给用户。如下图所示:

云产品之负载均衡那些事儿

Nginx的转发机制是通过后台配置文件nginx.conf的配置项实现,通过upstream定义web服务器列表,通过proxy_pass定义访问请求转发给upstream 服务器,具体配置信息如下所示:

云产品之负载均衡那些事儿

Nginx负载均衡的调度分配策略有:

① 轮询(默认)

② 加权

③ ip_hash:每个请求按访问IP的hash结果分配,以保证同一请求固定访问同一个服务器,可以解决session的问题。

2.3. Keepalived

Keepalived是一种用来管理并监控LVS服务集群节点状态的软件,可通过VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议实现高可用。如下图所示:

云产品之负载均衡那些事儿

配置文件keepalived.conf对应的信息如下所示:

说明如下:

① VIP(Virtual IP,虚拟IP)是对外提供服务的IP,也称为浮动IP。

② 高可用:主节点每隔1秒向备节点发送多播心跳消息,用来告知备节点状态。当主节点发生故障时,备节点将接收不到主节点的心跳消息,备节点将接管主节点的IP资源和服务。当主节点故障恢复时,备节点又会接管的IP资源和服务,恢复到备用的状态。


以上是关于云产品之负载均衡那些事儿的主要内容,如果未能解决你的问题,请参考以下文章

云负载均衡入门与产品使用指南

选择云负载均衡 从五方面入手

阿里云负载均衡产品简介

云原生SpringCloud系列之客户端负载均衡Ribbon

负载均衡的那些算法们

云小课 | 华为云KYON之ELB混合负载均衡