LVS 和 Keepalived 的原理介绍和配置实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wsgzao
V2EX    程序员

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

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

    前言

    负载均衡技术 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  
    PRO
       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  
    PRO
       2019-09-04 19:16:16 +08:00
    @wsgzao 当时没有想到是 lvs 的问题,而且没找到 lvs 的官网。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2191 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 00:49 PVG 08:49 LAX 17:49 JFK 20:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86