企业级 PHP 高并发解决方案 0x10 Web服务器负载均衡

架构1113 字

负载均衡,英文名称为 LoadBalance,其意思就是将负载(工作任务)进行平衡,分摊到多个操作单元上进行执行(例如Web服务器、FTP服务器等),实现多个服务器共同完成工作任务的目标。负载均衡建立在现有网络结构之上,它提升了服务器的性能、提高了带宽利用率,增强了网络的灵活性和可靠性。

七层负载均衡的实现

基于URL等应用层信息的负载均衡,Nginx 的 proxy 是它一个很强大的功能,实现了7层负载均衡。

  • 功能强大,性能卓越,运行稳定
  • 配置简单灵活
  • 能够自动剔除工作不正常的后端服务器
  • 上传文件可以使用异步模式
  • 支持多种分配策略,可以分配权重,分配方式灵活

NGINX 拥有两种策略:内置策略扩展策略

内置策略是NGINX安装后内置,开箱即用的均衡策略,而扩展策略反之,需要我们安装特定的模块才能进行使用。

内置策略: IP Hash、加权轮询

扩展策略:fair策略、通用hash、一致性hash。

加权轮询:首先将请求都发给高权的机器,直到该机器的权值降到了比其他机器底,才开始将请求分给下一个高权重的机器。当所有后端机器都 down 掉时,NGINX 会立即将所有机器的标志位清成初始状态,以避免所有的机器都处于 timeout 的状态。

IP Hash: 流程和轮询很类似,只是其中的算法和具体的策略有些变化,IP HASH算法算是一种变相的轮询算法。

fair 策略:根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。

通用hash、一致性hash:比较简单,可以以 NGINX 内置的变量为key进行hash,一致性hash采用了NGINX内置的一致性Hash环,支持 memcache。

http {
    upstream cluster {
        ip hash;
        server serv1;
        server serv2;
        server serv3;
    }
    server {
        listen 80;
        location/ {
            proxy_pass http://cluster;
        }
    }
}

四层负载均衡的实现

通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

在四层负载均衡上,我们可以使用LVS (Linux Virtual Server),意即Linux 虚拟服务器,是一个虚拟服务器的集群系统。该软件是在1998年5月由章文嵩山博士创建,是国内最早出现的自由软件项目之一,它具有良好的可靠性、可扩展性和可操作性。

实现原理

LVS 是基于 IP 地址的调度方法实现的,是最高效的实现方法,IP 负载均衡是通过 IPVS 内核模块实现的,IPVS 是 LVS 集群系统的核心软件。

也就是说在我们使用 LVS 之前,我们必须要先安装 ipvs 软件。

安装在 Director Server 上,同时在 Director Server 上虚拟出一个 IP(VIP-Virtual IP)地址。在进行域名解析的时候,我们需要将域名解析到 VIP 上。然后根据 VIP 找到 Director Server分发到真实的服务器上。

访问的请求首选in 经过 VIP 到负载调度器,由负载调度器从 Real Server 列表中选取一个节点响应用户的请求。

Real Server 节点返回给用户数据使用过 ipvs 实现的,ipvs 实现负载均衡的机制有三种:NAT(地址转发)DR (直接路由)TUN(隧道模式)

LVS 安装

上文提到过,安装 LVS 需要安装 ipvs,我们需要到其官网进行下载:

http://www.linuxvirtualserver.org/software/index.html

在下载软件时我们需要注意,要下载对应的内核版本号,使用 uname -r 查看当前 Linux 的内核版本。

同时,我们也可以使用 Linux 自带的包管理器进行安装

yum -y install ipsadm

NAT 模式

地址转换技术 DR 只需要将 VIP 配置到 DR 上,将受到的集群服务请求报文目标地址转换成根据算法计算得出的后端主机 IP 地址。

然后后端主主机将相应报文发送至 DR,再由 DR 将原地址转换成 VIP 地址。下面是他的网络拓扑图:

在 LVS(Director)上面需要两双网卡:DIP(内网)和 VIP(外网)

内网的 Real Server 主机的 IP 必须和 DIP 在同一个网络中,并且要求其网关都需要指向 DIP 的地址。

RIP 都是私有 IP地址,仅用于各个节点之间的通信,Director 位于 client 和 Real Server 之间,负责处理所有的进站、出站的通信,支持端口映射。

应用在较大规模的应用场景中,但 Director 容易成为整个架构的瓶颈。

maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见