负载均衡的几种实现方式

Nginx 负载均衡

七层负载均衡的实现

  • 实现原理:

    • 基于 URL 等应用层的信息实现负载均衡;

    • nginx 的 proxy 是它一个很强大的功能,实现了七层负载均衡;

  • 七层负载均衡的特点:

    • 配置简单,性能卓越,功能强大,运行稳定;

    • 能够自动剔除工作不正常的后端服务器;

    • 上传文件使用异步模式;

    • 支持多种分配策略,可以分配权重,配置简单;

  • nginx 负载均衡策略

    • 内置策略

    • 扩展策略

内置策略
  • 内置策略时安装nginx时已经安装到内核中的;

    • 加权轮训策略

      • 首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低的时候,才开始将请求分给下一个高权重的机器;
      • 当所有后端机器都宕掉时,nginx 会将所有机器的标识为置为初始状态,避免所有机器都处于 timeout 状态;
    • IP hash 策略

      • nginx 内置的另一个负载均衡策略,流程和轮训很类似,只是其中的算法和具体策略有一些变化,是一种变相的轮训算法;
扩展策略
  • 需要安装一些额外的模块实现负载均衡;

    • fair 策略

      • 根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流;
    • 通用hash,一致性 hash 策略
      • 通用 hash 比较简单,可以以nginx的内置变量 key 进行 hash ;
      • 一致性 hash 使用 nginx 内置的一次性 hash 环,也支持 memcach ;
nginx 的配置
  • nginx 配置中,集群中的服务器名称后可以加 权重 weight ,nginx 会根据权重的大小依次进行分配不同的机器;

  • 如果使用 IP hash 的话,可以在集群中加上 IP hash ,此时轮训策略就变成了 IP hash 策略了;

    # 创建一个负载均衡组
    upstream imageserver {
        server 192.168.1.204:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.204:8081 weight=1 max_fails=2 fail_timeout=30s;
    }
    • 2: 下游调用
    location ~ \.(jpg|jpeg|png|gif)$ {
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            # 在这里使用创建的负载均衡组
            proxy_pass http://imageserver;
    }

四层负载均衡的实现

  • LVS 虚拟服务器
  • 什么是 LVS?
    • LVS 是虚拟服务器,一个虚拟的服务器集群系统。1998 年由章文嵩博士成立,中国最早的软件之一;
  • 为什么使用 LVS 呢?
    • 当数据量增大时,单台服务器的压力会增大,就会使用多台机器进行分担压力;
    • 通过 LVS 提供的负载均衡技术和 Linux 系统实现一个 高性能,高可用的服务器集群架构,具有良好的 可靠性,可扩展性 和 可操作性;
    • 使用低廉的成本实现最优的服务性能;
  • 实现原理:
    • LVS 是基于 IP 地址调度的方法,是最高效的方法;
LVS 的三种调度模式:
  • TUN Ip 隧道模式。IP 负载均衡技术:
    • IP 负载均衡技术是通过 IPVS 内核模块来实现的,IPVS 是负载均衡的核心软件;
    • 安装在 Director Server [DR 负载均衡调度器] 上,同时 DR 调度器上虚拟出来一个 IP地址 [Vip],将来域名解析的时候,解析到这个 VIP 中即可;
    • 访问请求先经过 VIP 然后达到负载均衡调度器上;
    • 由 DR 到 realServer [真实服务器] 列表中选取一个服务器节点响应用户的请求;

IP隧道

  • NAT 地址转发模式:

    • 地址转发技术

    • DR 需要将 VIP 配置到 DR上;

    • 将收到的集群服务,请求报文目标地址转换成根据算法得到的后端服务器主机的地址;

    • 然后后端服务器将响应报文发送给 DR;

    • 再由 DR 将源地址改成 VIP 地址; NAT模式

    • NAT 模式的特点:

      • LVS 上需要两块网卡,DIP 和 realServer 相同,VIP 由外网访问;
      • 内网的 realServer 的 IP 必须和 VIP 在同一个 网络中,并且要求 realServer 的网关都指向 DIP 的地址,返回数据要走 DIP ;
      • RIP [realServer 的 IP],都是私有地址,仅用于各节点通信,公网不能访问;
      • DR 位于 client 和 realServer 之间,负责所有进出站的请求;
      • 因所有进出站请求都会经过 DR 应用在较大规模的系统中容易造成瓶颈。
      • 支持端口映射;
  • DR 模式。直接路由模式

    • client 发送一个请求给 VIP;
    • VIP 收到这个请求后会根据 LB 算法 选择一个 LB 较为合理的 realServer;
    • 把此请求的数据包的 MAC 地址修改为 realServer 的 MAC 地址;
    • ARP 协议 根据 MAC 地址 找到 realServer 会把这个数据包发送给真正的 realServer;
    • realServer 收到这个数据包,首先判断目标 IP 是不是自己,如果不是则把包丢弃。如果是自己的话就处理;[要在所有的 realServer 中绑定 VIP]
    • realServer 处理这个包后,会把目标 IP 修改成 client IP ,不再经过 DR,直接发送给客户端,这样效率会很高

DR模式

登录后进行讨论

zhouxiaoshuai3

zhouxiaoshuai3 发表于 2019-04-16 00:51:54

了解这些原理后,下篇聊聊这几种负载均衡的具体实现😏。

点赞 1