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

2019-09-04 17:17:25 +08:00
 wsgzao

前言

负载均衡技术 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)

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

硬件比较常见的有:

  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 原理介绍和配置实践

3038 次点击
所在节点    程序员
3 条回复
zhoudaiyu
2019-09-04 19:08:19 +08:00
已收藏,上次遇到了用 LocalMode 模式部署 LVS+Keepalived+Nginx,发现 telnet VIP 时通时不通的问题,把 keepalived 和 nginx 拆开才好。
wsgzao
2019-09-04 19:13:08 +08:00
@zhoudaiyu #1 其实先看懂官网的介绍再实践几次就清楚了,我把生产环境的配置和网上的资料统一做了梳理,算是对 LVS 和 Keepalived 的小结吧
zhoudaiyu
2019-09-04 19:16:16 +08:00
@wsgzao 当时没有想到是 lvs 的问题,而且没找到 lvs 的官网。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597934

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX