LVS 负载均衡集群指南

打印 上一主题 下一主题

主题 1024|帖子 1024|积分 3072

1. 弁言
LVS (Linux Virtual Server) 虚拟服务器,是 Linux 内核中实现的负载均衡技术,以其高性能、高可靠性和高可用性而著名。LVS 工作在 TCP/IP 协议栈的第四层 (传输层),通过将流量分配到多个后端服务器,提高系统性能、可用性和可靠性。LVS 被广泛应用于各种场景,例如网站、数据库、游戏服务器等,是构建高可用、高性能 Web 服务的利器。
2. LVS 的工作原理
LVS 集群主要由两部分构成:


  • 调度器 (Director Server):  负责接收客户端请求,并根据负载均衡算法将请求转发到后端服务器。调度器通常被称为 “虚拟服务器” (VS)。
  • 服务端服务器 (Real Server):  负责处理实际的业务请求。服务端服务器也称为 “节点服务器” (RS)。
LVS 的工作流程如下:

  • 客户端发送请求到调度器 (VS)。
  • 调度器 (VS) 根据负载均衡算法选择一个服务端服务器 (RS)。
  • 调度器 (VS) 将请求转发到选定的服务端服务器 (RS)。
  • 服务端服务器 (RS) 处理请求,并将相应返回给客户端。
  • 相应数据包通过调度器 (VS) 返回给客户端。
3. LVS 集群中的术语
术语描述VS (Virtual Server)调度器,负责接收客户端请求,并根据负载均衡算法将请求转发到后端服务器。RS (Real Server)服务端服务器,负责处理实际的业务请求。CIP (Client IP)客户端请求的 IP 地址。VIP (Virtual IP)虚拟 IP 地址,通常为公网 IP,直接面向用户的 IP 地址。DIP (Director Server IP)调度器的内网 IP 地址,用于与后端服务器通信。RIP (Real Server IP)后端服务端服务器的 IP 地址。 4. LVS 的工作模式
LVS 主要有四种工作模式,每种模式都有其特点和适用场景:


  • NAT 模式 (Network Address Translation):
  • 请求和相应数据包都需要经过调度器 (VS)。
  • 调度器 (VS) 成为系统瓶颈,性能受限。
  • 支持端口映射,可以修改请求报文的目标端口。
  • 服务端服务器 (RS) 可以是恣意操作系统。
  • 原理: 调度器 (VS) 修改请求报文的目标 IP 地址,将请求转发到后端服务器 (RS)。
  • 特点:
  • 适用场景:  得当小型集群,对性能要求不高,且需要修改目标端口的场景。
  • DR 模式 (Direct Routing):
  • 请求数据包经过调度器 (VS),相应数据包直接返回给客户端。
  • 调度器 (VS) 性能压力较小,得当大型集群。
  • 服务端服务器 (RS) 需要设置 VIP 地址,并设置 arp_ignore 和 arp_announce 参数。
  • 服务端服务器 (RS) 需要在同一个物理网络中。
  • 原理: 调度器 (VS) 只修改请求报文的目标 MAC 地址,将请求转发到后端服务器 (RS)。
  • 特点:
  • 适用场景:  得当大型集群,对性能要求较高,且不需要修改目标端口的场景。
  • TUN 模式 (IP Tunneling):
  • 请求和相应数据包都需要经过调度器 (VS)。
  • 调度器 (VS) 性能压力较大,得当跨网络的集群。
  • 服务端服务器 (RS) 可以是恣意操作系统。
  • 原理: 调度器 (VS) 通过 IP 隧道将请求转发到后端服务器 (RS)。
  • 特点:
  • 适用场景:  得当跨网络的集群,需要将请求转发到不同的网络。
  • Full-NAT 模式:
  • 请求和相应数据包都需要经过调度器 (VS)。
  • 调度器 (VS) 性能压力较大,得当需要隐藏服务端服务器 IP 地址的场景。
  • 服务端服务器 (RS) 可以是恣意操作系统。
  • 原理: 调度器 (VS) 修改请求报文的源和目标 IP 地址,将请求转发到后端服务器 (RS)。
  • 特点:
  • 适用场景:  得当需要隐藏服务端服务器 IP 地址,且对性能要求不高的场景。
5. LVS 的调度算法
LVS 支持多种调度算法,每种算法都有其特点和适用场景:


  • 静态调度算法:
  • RR (Round Robin): 轮询调度,将请求依次分配到后端服务器。
  • WRR (Weighted Round Robin): 加权轮询调度,可以为每个服务器设置权重,权重越大,分配到的请求越多。
  • SH (Source Hashing):  源地址哈希调度,根据客户端 IP 地址进行哈希,将请求分配到固定的服务器。得当解决 Session 共享题目。
  • DH (Destination Hashing): 目标地址哈希调度,根据请求的目标地址进行哈希,将请求分配到固定的服务器。适适用于缓存服务器的负载均衡。
  • 动态调度算法:
  • LC (Least Connections): 最小毗连数调度,将请求分配到毗连数最少的服务器。适适用于长毗连应用。
  • WLC (Weighted Least Connections): 加权最小毗连数调度,根据服务器的权重和毗连数进行调度。
  • SED (Shortest Expected Delay): 最短延迟调度,根据服务器的权重和毗连数进行调度,优先调度延迟最小的服务器。适适用于需要快速相应的应用。
  • NQ (Never Queue):  将请求分配到空闲的服务器,如果全部服务器都有毗连,则使用 SED 算法。适适用于需要高吞吐量的应用。
  • LBLC (Locality-Based Least Connections): 动态的 DH 算法,根据负载状态实现正向代理。适适用于需要根据负载状态进行动态调度的场景。
  • LBLCR (LBLC with Replication): 带复制功能的 LBLC,解决 LBLC 负载不均衡题目。适适用于需要高可用性的场景。
6. ipvsadm 工具
ipvsadm 是 LVS 的管理工具,用于添加、删除、修改 LVS 虚拟服务器和服务端服务器,以及查看 LVS 状态信息。
常用下令:


  • ipvsadm -A -t <VIP:端口> -s <算法>:  添加虚拟服务器。
  • ipvsadm -D -t <VIP:端口>:  删除虚拟服务器。
  • ipvsadm -a -t <VIP:端口> -r <RIP:端口> <模式>:  添加服务端服务器。
  • ipvsadm -d -t <VIP:端口> -r <RIP:端口>:  删除服务端服务器。
  • ipvsadm -l:  查看 LVS 虚拟服务器列表。
  • ipvsadm -n:  以数字形式体现地址、端口等信息。
7. LVS-NAT 负载均衡摆设
架构图:

步骤:

  • 设置调度器:


  • 添加一块网卡,设置为仅主机模式。
  • 开启路由转发功能:net.ipv4.ip_forward = 1
  • 安装 ipvsadm 软件:yum install ipvsadm
  • 添加虚拟服务器:ipvsadm -A -t 12.0.0.1:80 -s rr
  • 添加服务端服务器:ipvsadm -a -t 12.0.0.1:80 -r 192.168.204.20:80 -m
  • 添加服务端服务器:ipvsadm -a -t 12.0.0.1:80 -r 192.168.204.30:80 -m

  • 设置服务端服务器:


  • 安装 Web 服务 (例如 Apache 或 Nginx)。
  • 设置网关为调度器的内网 IP 地址。

  • 设置客户端:


  • 设置网关为调度器的内网 IP 地址。
8. LVS-DR 负载均衡摆设
示例:


  • 设置调度器:


  • 设置虚拟网卡,设置 VIP 地址:IPADDR=192.168.204.188,NETMASK=255.255.255.255
  • 开启路由转发功能:net.ipv4.ip_forward = 1
  • 安装 ipvsadm 软件:yum install ipvsadm
  • 添加虚拟VIP:ipvsadm -A -t 192.168.204.188:80 -s rr
  • 添加服务端服务器IP:ipvsadm -a -t 192.168.204.188:80 -r 192.168.204.20:80 -g
  • 添加服务端服务器IP:ipvsadm -a -t 192.168.204.188:80 -r 192.168.204.30:80 -g

  • 设置服务端服务器:


  • 安装 Web 服务 (例如 Apache 或 Nginx)。
  • 设置回环网卡,设置 VIP 地址:IPADDR=192.168.204.188,NETMASK=255.255.255.255
  • 设置 arp_ignore 和 arp_announce 参数:net.ipv4.conf.all.arp_ignore = 1,net.ipv4.conf.all.arp_announce = 2

  • 设置客户端:


  • 设置网关为调度器的内网 IP 地址。
9. LVS 性能优化


  • 优化调度算法:  选择符合的调度算法,例如 WRR 或 WLC,根据服务器的权重和毗连数进行调度,提高性能和负载均衡。
  • 优化康健查抄:  合理设置康健查抄隔断时间,避免过频繁的康健查抄,减少调度器对后端服务器的压力。
  • 使用 spread-checks 指令:  延迟发送康健查抄,错峰处理,减少调度器对后端服务器的压力。
  • 优化硬件设置:  使用高性能服务器、SSD 硬盘,提高 LVS 集群的团体性能。
10. Keepalived + LVS 高可用负载均衡
Keepalived 是一款开源的高可用软件,专为 LVS 和 HAproxy 设计,提供故障自动切换 (Failover) 和节点康健状态查抄 (Health Checking) 功能。它通过 VRRP (Virtual Router Redundancy Protocol) 协议实现高可用性,确保当调度器出现故障时,可以自动切换到备用调度器,保证服务的连续性。
Keepalived 的核心组件:


  • VRRP stack:  负责发送心跳线,通告虚拟 IP (VIP) 和其他信息。
  • Checkers:  负责查抄后端服务器的康健状态。
  • System call:  提供通用的模块,用于在 VRRP 协议状态转换时调用脚本。
  • SMTP:  邮件组件,用于发送报警邮件。
  • IPVS wrapper:  自动天生 LVS 规则。
  • Netlink Reflector:  网络接口,用于将虚拟 IP (VIP) 地址漂泊到主调度器。
  • WatchDog:  监控进程,确保 Keepalived 进程正常运行。
Keepalived 的工作原理:
Keepalived 通过 VRRP 协议实现高可用性,VRRP 协议是一种虚拟路由冗余协议,它将多个路由器虚拟成一个组,并选举出一个主路由器,负责处理流量。当主路由器出现故障时,备用路由器会自动继承主路由器的职责,确保服务的连续性。
Keepalived 的工作流程如下:

  • Keepalived 启动后,会参加一个 VRRP 组,并选举出一个主节点。
  • 主节点会定期发送心跳线,通告虚拟 IP (VIP) 和其他信息。
  • 备用节点会接收心跳线,并根据优先级判断是否需要继承主节点。
  • 当主节点出现故障时,备用节点会自动继承主节点的职责,并成为新的主节点。
  • 当主节点恢复正常时,会根据抢占模式决定是否重新成为主节点。
VRRP 协议相关术语:


  • 虚拟路由器:  不是真正存在的路由器,而是由多个物理路由器虚拟出来的一个组。
  • 虚拟路由器标识 (VRID):  用于标识虚拟路由器组,同一个组的路由器才能使用 VRRP 协议。
  • VIP (Virtual IP):  虚拟 IP 地址,也就是网关,对外提供服务的地址。
  • VMAC (Virtual MAC):  虚拟路由器的 MAC 地址。
  • Master:  主节点,负责处理流量。
  • Backup:  备用节点,当主节点出现故障时,会自动继承主节点的职责。
  • Priority:  优先级,优先级高的节点会成为主节点。
  • Advert_int:  心跳线报文发送隔断时间,单位为秒。
Keepalived 的三种抢占模式:


  • 抢占式 (Preempt):  当主节点出现故障时,备用节点会继承主节点的职责。当主节点恢复正常时,会立即抢占主节点的职责。
  • 非抢占式 (No Preempt):  当主节点出现故障时,备用节点会继承主节点的职责。当主节点恢复正常时,不会重新成为主节点,而是继承作为备用节点。
  • 延迟抢占模式 (Preempt Delay):  当主节点出现故障时,备用节点会继承主节点的职责。当主节点恢复正常时,会延迟一段时间,等待主节点稳固后,再重新成为主节点。
Keepalived 的安装:
6.1 Yum 安装

  1. yum install keepalived
复制代码
注意: Yum 安装的 Keepalived 版本可能较旧,建议使用编译安装方式。
6.2 编译安装

  1. yum install gcc curl openssl-devel libnl3-devel net-snmp-devel
  2. wget https://keepalived.org/software/keepalived-2.2.2.tar.gz
  3. tar xf keepalived-2.2.2.tar.gz
  4. cd keepalived-2.2.2
  5. ./configure --prefix=/usr/local/keepalived
  6. make
  7. make install
复制代码
7. Keepalived 的设置文件
Keepalived 的设置文件通常位于 /etc/keepalived/keepalived.conf,包含以下几个部分:


  • 全局设置块 (GLOBAL CONFIGURATION):  界说邮件设置、router_id、VRRP 设置、组播地址等。
  • 虚拟路由器设置 (VRRP CONFIGURATION):  界说 VRRP 协议中,每个 VRRP 虚拟路由器的规则、基本信息。
  • LVS 设置 (LVS CONFIGURATION):  界说调度服务器和服务端服务器的规则设置。
8. Keepalived 的设置示例
  1. global_defs {
  2.     notification_email {
  3.         acassen@firewall.loc
  4.         failover@firewall.loc
  5.         sysadmin@firewall.loc
  6.     }
  7.     notification_email_from Alexandre.Cassen@firewall.loc
  8.     smtp_server 127.0.0.1
  9.     smtp_connect_timeout 30
  10.     router_id LVS_DEVEL
  11.     vrrp_skip_check_adv_addr
  12.     #vrrp_strict
  13.     vrrp_garp_interval 0
  14.     vrrp_gna_interval 0
  15. }
  16. vrrp_instance VI_1 {
  17.     state MASTER
  18.     interface ens33
  19.     virtual_router_id 51
  20.     priority 100
  21.     advert_int 1
  22.     authentication {
  23.         auth_type PASS
  24.         auth_pass 1111
  25.     }
  26.     virtual_ipaddress {
  27.         192.168.125.123
  28.     }
  29. }
  30. virtual_server 192.168.125.123 80 {
  31.     delay_loop 6
  32.     lb_algo rr
  33.     lb_kind DR
  34.     persistence_timeout 0
  35.     protocol TCP
  36.     real_server 192.168.201.100 443 {
  37.         ```
  38.         weight 1
  39.         SSL_GET {
  40.             url {
  41.                 path /
  42.                 digest ff20ad2481f97b1754ef3e12ecd3a9cc
  43.             }
  44.             url {
  45.                 path /mrtg/
  46.                 digest 9b3a0c85a887a256d6939da88aabd8cd
  47.             }
  48.             connect_port 80
  49.             connect_timeout 3
  50.             nb_get_retry 3
  51.             delay_before_retry 3
  52.         }
  53.     }
  54. }
复制代码
9. Keepalived + LVS 的实验
实验环境:


  • 主节点 (Master):  7-1 (192.168.125.100)
  • 备用节点 (Backup):  7-2 (192.168.125.120)
  • 服务端服务器1:  7-3 (192.168.125.130)
  • 服务端服务器2:  7-5 (192.168.125.150)
  • 虚拟 IP (VIP):  192.168.125.123
  • 客户端:  7-6 (192.168.125.160)
步骤:

  • 设置服务端服务器 (7-3 和 7-5):


  • 安装 Web 服务 (例如 Apache 或 Nginx)。
  • 创建访问页面,例如 echo "7-3 keepalived" > index.html。
  • 关闭长毗连:keepalive off。

  • 设置主节点 (7-1):


  • 复制设置文件并备份:cp keepalived.conf keepalived.conf.bak。
  • 编辑设置文件,设置 router_id、interface、virtual_ipaddress 等参数。
  • 设置 LVS 模式为 DR:lb_kind DR。
  • 设置服务端服务器信息,包罗 weight 和 TCP_CHECK。
  • 安装 ipvsadm 和 keepalived:yum install ipvsadm keepalived。
  • 启动 ipvsadm 服务:systemctl start ipvsadm。
  • 验证服务端服务器是否设置成功:curl 192.168.125.130 和 curl 192.168.125.150。
  • 设置 Keepalived:
  • 重启 Keepalived 服务:systemctl restart keepalived.service。
  • 查看虚拟 IP:ip a。

  • 设置备用节点 (7-2):


  • 安装 ipvsadm 和 keepalived:yum install ipvsadm keepalived。
  • 启动 ipvsadm 服务:systemctl start ipvsadm。
  • 复制主节点的 Keepalived 设置文件到备用节点。
  • 编辑设置文件,将 state 设置为 BACKUP,priority 设置为低于主节点的优先级。
  • 重启 Keepalived 服务:systemctl restart keepalived.service。

  • 设置客户端 (7-6):


  • 设置网关为调度器的内网 IP 地址。

  • 测试主备切换:


  • 关闭主节点的 Keepalived 服务,验证备用节点是否继承主节点职责。
  • 重新启动主节点的 Keepalived 服务,验证主节点是否重新成为主节点。
10. 抢占模式
Keepalived 支持三种抢占模式,可以根据实际需求选择符合的模式:


  • 立即抢占模式 (Preempt):  当主节点出现故障时,备用节点会继承主节点的职责。当主节点恢复正常时,会立即抢占主节点的职责。
  • 非抢占模式 (No Preempt):  当主节点出现故障时,备用节点会继承主节点的职责。当主节点恢复正常时,不会重新成为主节点,而是继承作为备用节点。
  • 延迟抢占模式 (Preempt Delay):  当主节点出现故障时,备用节点会继承主节点的职责。当主节点恢复正常时,会延迟一段时间,等待主节点稳固后,再重新成为主节点。
11. 修改单播和多播地址


  • 修改多播地址:  在 Keepalived 设置文件中,使用 vrrp_mcast_group4 指令修改多播地址。
  • 修改单播地址:  在 Keepalived 设置文件中,使用 unicast_src_ip 和 unicast_peer 指令修改单播地址。
12. 主备切换的通知脚本
Keepalived 可以通过脚本通知管理员主备切换事件。


  • 界说脚本:  在 Keepalived 设置文件中,使用 notify_master、notify_backup 和 notify_fault 指令界说脚本路径。
  • 编写脚本:  编写脚本,实现发送邮件、记录日志等功能。
13. 脑裂题目
脑裂题目是指在高可用集群中,由于网络故障或其他原因,导致两个节点都认为本身是主节点,从而导致数据不划一或服务停止。
防备脑裂题目的方法:


  • 使用双心跳线:  使用串行电缆和以太网电缆毗连,确保即使一条线路断开,另一条线路也能正常工作。
  • 使用 Fencing 装备:  使用 Fencing 装备,当检测到脑裂时,强行关闭一个心跳节点,避免两个节点都认为本身是主节点。
14. Nginx + Keepalived 实验
实验环境:


  • 调度服务器:  7-1 (192.168.125.100)
  • 备用调度服务器:  7-2 (192.168.125.120)
  • 服务端服务器1:  7-3 (192.168.125.130)
  • 服务端服务器2:  7-5 (192.168.125.150)
  • 虚拟 IP (VIP):  192.168.125.123
  • 客户端:  7-6 (192.168.125.160)
步骤:

  • 设置服务端服务器 (7-3 和 7-5):


  • 安装 Web 服务 (例如 Apache 或 Nginx)。
  • 创建访问页面,例如 echo "7-3 nginx" > index.html。

  • 设置服务端服务器 (7-1):


  • 复制设置文件并备份:cp keepalived.conf keepalived.conf.bak。
  • 编辑设置文件,设置 router_id、interface、virtual_ipaddress 等参数。
  • 使用 vrrp_script 模块,界说一个脚本,用于检测 Nginx 是否正常运行。
  • 使用 track_script 指令,将脚本添加到 Keepalived 的监控列表中。
  • 编辑 Nginx 设置文件,添加 upstream 和 location 设置。
  • 安装 Nginx 和 Keepalived:yum install nginx keepalived。
  • 启动 Nginx 服务:systemctl start nginx。
  • 设置 Nginx 负载均衡:
  • 复制 Nginx 设置文件到备用调度服务器 (7-2)。
  • 设置 Keepalived:
  • 重启 Keepalived 服务:systemctl restart keepalived.service。

  • 设置备用调度服务器 (7-2):


  • 复制设置文件并备份:cp keepalived.conf keepalived.conf.bak。
  • 编辑设置文件,将 state 设置为 BACKUP,priority 设置为低于主调度服务器的优先级。
  • 使用 vrrp_script 模块,界说一个脚本,用于检测 Nginx 是否正常运行。
  • 使用 track_script 指令,将脚本添加到 Keepalived 的监控列表中。
  • 安装 Nginx 和 Keepalived:yum install nginx keepalived。
  • 启动 Nginx 服务:systemctl start nginx。
  • 复制主调度服务器的 Nginx 设置文件到备用调度服务器。
  • 设置 Keepalived:
  • 重启 Keepalived 服务:systemctl restart keepalived.service。

  • 设置客户端 (7-6):


  • 设置网关为调度器的内网 IP 地址。

  • 测试主备切换:


  • 关闭主调度服务器的 Nginx 和 Keepalived 服务,验证备用调度服务器是否继承主调度服务器职责。
  • 重新启动主调度服务器的 Nginx 和 Keepalived 服务,验证主调度服务器是否重新成为主节点。
15. 总结
Keepalived + LVS 是构建高可用负载均衡集群的常见方案,可以有效地提高系统的性能、可用性和可靠性。通过本文档,您应该已经相识了 Keepalived 和 LVS 的基本概念、工作原理、摆设步骤和性能优化等内容。希望这份指南能够帮助您更好地理解和使用 Keepalived + LVS,构建高性能、安全可靠的 Web 服务。
16. 进一步学习


  • Keepalived 官方网站: https://www.keepalived.org/
  • Keepalived 文档: https://www.keepalived.org/
  • LVS 官方网站: http://linuxvirtualserver.org/
  • LVS 文档: http://linuxvirtualserver.org/
  • LVS 模块: http://linuxvirtualserver.org/
注意:


  • 以上设置示例仅供参考,请根据您的实际需求进行调整。
  • 在进行任何设置更改之前,请务必备份您的设置文件,并进行测试以确保更改不会影响 LVS 或 Keepalived 的正常运行。
Keepalived + LVS 示例图:

分析:


  • Keepalived 通过 VRRP 协议实现调度器的高可用性,主节点和备用节点之间通过心跳线进行通信,确保当主节点出现故障时,备用节点可以自动继承主节点的职责。
  • LVS 负责将流量分配到多个服务端服务器,提高系统的性能和可靠性。
  • 客户端只访问虚拟 IP (VIP),而不会直接访问服务端服务器。SS

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表