V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsgzao
V2EX  ›  程序员

LVS 和 Keepalived 的原理介绍和配置实践

  •  
  •   wsgzao ·
    wsgzao · 2019-09-04 17:17:25 +08:00 · 3045 次点击
    这是一个创建于 1905 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    负载均衡技术 Load Balance 简称 LB 是构建大型网站必不可少的架构策略之一。它的目的是把用户的请求分发到多台后端的设备上,用以均衡服务器的负载。我们可以把负载均衡器划分为两大类:硬件负载均衡器和软件负载均衡器。这里重点介绍软件实现方法中的 LVS 和 Keepalived。

    LVS 和 Keepalived 的原理介绍和配置实践

    更新历史

    2019 年 09 月 03 日 - 拆分 LVS-Keepalived

    2019 年 08 月 23 日 - 更新 LVS/NAT、LVS/DR、LVS/TUN 三种模式的原理和配置实践

    2018 年 12 月 03 日 - 精简和更新配置步骤

    2018 年 07 月 31 日 - 初稿

    阅读原文 - https://wsgzao.github.io/post/lvs-keepalived/

    扩展阅读

    LVS - http://www.linuxvirtualserver.org/zh/index.html

    Keepalived - http://www.keepalived.org/


    ReadMe

    参考文章

    How virtual server works? - http://www.linuxvirtualserver.org/how.html

    LVS 和 Keepalived 官方中文手册 PDF - https://pan.baidu.com/s/1s0P6nUt8WF6o_N3wdE3uKg

    相关术语

    以下术语涉及 LVS 三种工作模式的原理

    • LB (Load Balancer 负载均衡)
    • HA (High Available 高可用)
    • Failover (失败切换)
    • Cluster (集群)
    • LVS (Linux Virtual Server Linux 虚拟服务器)
    • DS (Director Server),指的是前端负载均衡器节点
    • RS (Real Server),后端真实的工作服务器
    • VIP (Virtual IP),虚拟的 IP 地址,向外部直接面向用户请求,作为用户请求的目标的 IP 地址
    • DIP (Director IP),主要用于和内部主机通讯的 IP 地址
    • RIP (Real Server IP),后端服务器的 IP 地址
    • CIP (Client IP),访问客户端的 IP 地址

    负载均衡(LB)

    负载均衡实现方法有两种:硬件实现和软件实现

    硬件比较常见的有:

    1. F5 Big-IP
    2. Citrix Netscaler

    软件比较常见的有:

    1. LVS ( Linux Virtual Server )
    2. HAProxy
    3. Nginx

    LVS 特点是:

    1. 首先它是基于 4 层的网络协议的,抗负载能力强,对于服务器的硬件要求除了网卡外,其他没有太多要求;
    2. 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,大大减少了人为出错的几率;
    3. 应用范围比较广,不仅仅对 web 服务做负载均衡,还可以对其他应用( mysql )做负载均衡;
    4. LVS 架构中存在一个虚拟 IP 的概念,需要向 IDC 多申请一个 IP 来做虚拟 IP。

    Nginx 负载均衡器的特点是:

    1. 工作在网络的 7 层之上,可以针对 http 应用做一些分流的策略,比如针对域名、目录结构;
    2. Nginx 安装和配置比较简单,测试起来比较方便;
    3. 也可以承担高的负载压力且稳定,一般能支撑超过上万次的并发;
    4. Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持 url 来检测;
    5. Nginx 对请求的异步处理可以帮助节点服务器减轻负载;
    6. Nginx 能支持 http 和 Email,这样就在适用范围上面小很多;
    7. 默认有三种调度算法: 轮询、weight 以及 ip_hash (可以解决会话保持的问题),还可以支持第三方的 fair 和 url_hash 等调度算法;

    HAProxy 的特点是:

    1. HAProxy 是工作在网络 7 层之上;
    2. 支持 Session 的保持,Cookie 的引导等;
    3. 支持 url 检测后端的服务器出问题的检测会有很好的帮助;
    4. 支持的负载均衡算法:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权 URL 哈希和加权参数哈希(Weighted Parameter Hash);
    5. 单纯从效率上来讲 HAProxy 更会比 Nginx 有更出色的负载均衡速度;
    6. HAProxy 可以对 Mysql 进行负载均衡,对后端的 DB 节点进行检测和负载均衡。

    LVS+Keepalived 简介

    在 lvs+keepalived 环境里面,lvs 主要的工作是提供调度算法,把客户端请求按照需求调度在 real 服务器,keepalived 主要的工作是提供 lvs 控制器的一个冗余,并且对 real 服务器做健康检查,发现不健康的 real 服务器,就把它从 lvs 集群中剔除,real 服务器只负责提供服务。

    LVS

    LVS 是一个开源的软件,可以实现 LINUX 平台下的简单负载均衡。LVS 是 Linux Virtual Server 的缩写,意思是 Linux 虚拟服务器。

    LB 集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到 Director Server 上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器 (real server) 上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。

    LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储。

    目前有三种 IP 负载均衡技术( VS/NAT,VS/TUN,VS/DR )

    Virtual Server via Network Address Translation ( VS/NAT ) 通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

    Virtual Server via IP Tunneling ( VS/TUN ) 采用 NAT 技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过 IP 隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN 技术后,集群系统的最大吞吐量可以提高 10 倍。

    Virtual Server via Direct Routing ( VS/DR ) VS/DR 通过改写请求报文的 MAC 地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同 VS/TUN 技术一样,VS/DR 技术可极大地 提高集群系统的伸缩性。这种方法没有 IP 隧道的开销,对集群中的真实服务器也没有必须支持 IP 隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

    三种模式的主要区别

    | | VS/NAT | VS/TUN | VS/DR | ---|---|---|--- | server | any | tunneling | non-arp device | | server network | private | LAN/WAN | LAN | | server number | low (10~20) | high | high | | server gateway | load balancer | own router | own router |

    |模式与特点|NAT 模式 |IPIP 模式 |DR 模式 | ---|---|---|--- |对服务器的要求 |服务节点可以使任何操作系统|必须支持 IP 隧道,目前只有 Linux 系统支持 |服务器节点支持虚拟网卡设备,能够禁用设备的 ARP 响应 | |网络要求 |拥有私有 IP 地址的局域网络 |拥有合法 IP 地址的局域,网或广域网 |拥有合法 IP 地址的局域,服务器节点与负载均衡器必须在同一个网段 | |通常支持节点数量 |10 到 20 个,根据负载均衡器的处理能力而定|较高,可以支持 100 个服务节点 |较高,可以支持 100 个服务节点 | |网关 |负载均衡器为服务器节点网关 |服务器的节点同自己的网关或者路由器连接,不经过负载均衡器 |服务节点同自己的网关或者路由器连接,不经过负载均衡器| |服务节点安全性 |较好,采用内部 IP,服务节点隐蔽 |较差,采用公用 IP 地址,节点安全暴露 |较差,采用公用 IP 地址,节点安全暴露 | |IP 要求 |仅需要一个合法的 IP 地址作为 VIP 地址 |除了 VIPO 地址外,每个服务器界定啊需要拥有合法的 IP 地址,可以直接从路由到客户端|除了 VIP 外,每个服务节点需拥有合法的 IP 地址,可以直接从路由到客户端 | |特点 |地址转换 |封装 IP |修改 MAC 地址 | |配置复杂度 |简单 |复杂 |复杂|

    LVS 和 Keepalived 系列

    LVS 和 Keepalived 的原理介绍和配置实践

    LVS 原理介绍和配置实践

    Keepalived 原理介绍和配置实践

    LVS-NAT 原理介绍和配置实践

    LVS-DR 原理介绍和配置实践

    LVS-TUN 原理介绍和配置实践

    3 条回复    2019-09-04 19:16:16 +08:00
    zhoudaiyu
        1
    zhoudaiyu  
       2019-09-04 19:08:19 +08:00
    已收藏,上次遇到了用 LocalMode 模式部署 LVS+Keepalived+Nginx,发现 telnet VIP 时通时不通的问题,把 keepalived 和 nginx 拆开才好。
    wsgzao
        2
    wsgzao  
    OP
       2019-09-04 19:13:08 +08:00
    @zhoudaiyu #1 其实先看懂官网的介绍再实践几次就清楚了,我把生产环境的配置和网上的资料统一做了梳理,算是对 LVS 和 Keepalived 的小结吧
    zhoudaiyu
        3
    zhoudaiyu  
       2019-09-04 19:16:16 +08:00
    @wsgzao 当时没有想到是 lvs 的问题,而且没找到 lvs 的官网。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:31 · PVG 22:31 · LAX 06:31 · JFK 09:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.