linux进阶之Lvs、ld及keepalived原理及参数祥解

本文详细介绍了Linux虚拟服务器(LVS)的工作原理,包括NAT、TUN、DR和FULL-NAT四种负载均衡技术,以及八种负载调度算法。此外,还讲解了ldirectord的健康检查功能和keepalived的高可用与健康检查机制,涉及VRRP协议。通过对这些组件的深入理解,读者能够掌握如何构建和管理高效的负载均衡和高可用集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、lvs

Linux Virtual Server, Linux虚拟服务器
它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且 调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。
为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。


1. 工作原理

这里写图片描述

上图所示,LVS可分为三部分:
   Load Balancer这是LVS的核心部分,它好比我们网站MVC模型的Controller。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台Director Server组成。
   Server Array该层负责具体业务。可有WEB Server、mail Server、FTP Server、DNS Server等组成。注意,其实上层的Director Server也可以当Real server用的。
   Shared Storage主要是提高上一层数据和为上一层保持数据一致
   


2. 四种负载均衡技术
NAT

通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
优点:配置及管理简单。Director Server 和 Real Server 群组可以不在一个网段
缺点:要求 Director Server 必须要有两块网卡 Director Server很容易成为整个集群的性能瓶颈(所有都数据经过这里)
这里写图片描述

TUN

IP隧道模式,采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
优点: 性能介于 NAT 和 DR 模式之间
Director Server 与 Real Server 可以在不同的网段内,即集群中的Real Server 可以在不同的城市
缺点: 需要的Real Server 服务器的内核中,必须编译支持IP Tunnel这个选项
这里写图片描述

DR

VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
优点:性能最好
缺点:要求Director Server和所有的Real Server 必须在同一个网段中,不能实现集群的跨网段应用
这里写图片描述

FULL-NAT

这里写图片描述
这里写图片描述
在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。
内网 IP 之间可以通过多个交换机跨 VLAN 通信。
当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。
Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性

这里写图片描述


3. LVS 的负载调度算法
在内核中的连接调度算法上,IPVS 已实现了以下八种调度算法:
1)轮叫调度(Round­Robin Scheduling )

以轮叫的方式依次将请求调度不同的服务器,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

2)加权轮叫调度(Weighted Round­Robin Scheduling )

根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3)最小连接调度(Least­Connection Scheduling )

是把新的连接请求分配到当前连接数最小的服务器。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

4)加权最小连接调度(Weighted Least­Connection Scheduling)

是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。
在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

5)基于局部性的最少链接(Locality­Based Least Connections Scheduling )

是针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache 集群中客户请求报文的目标 IP 地址是变化的。
该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务 器,将请求发送到该服务器。

6)带复制的基于局部性最少链接(Locality­Based Least Connections with Replication Scheduling)

也是针对目标 IP 地址的负载均衡,目前主要用于 Cache
集群系统。它与 LBLC 算法的不同之处是它要 维护从一个目标 IP 地址到一组服务器的映射,而 LBLC 算法维护从一个目标 IP 地址到一台服务器的映射。

7)目标地址散列调度(Destination Hashing Scheduling )

算法也是针对目标 IP 地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标 IP 地址映射到一台服务器。
目标地址散列调度算法先根据请求的目标 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8)源地址散列调度(Source Hashing Scheduling)

正好与目标地址散列调度算法相反,它根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。


4. 实现原理
1)具体访问流程

LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS被称为ip虚拟服务器,是运行在LVS下提供负载均衡功能的一种技术实现程序:ipvsadm.。是LVS集群系统的核心软件。它的主要作用是:安装在 Director Server(前端服务器)上,同时Director Server上虚拟出一个IP地址(VIP),用户必须通过这个虚拟的VIP地址访问服务。—–访问请求首先经过VIP到达负载均衡调度器,然后由 负载均衡调度器根据设定好的算法 从 Real Server 列表中选取一个服务节点响应用户请求。
具体过程:访问请求—>VIP(由ipvsadm程序虚拟出来的)—>负载均衡调度器(根据设定好的算法进行选取)—>RS

2)关于vip地址

VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 NonARP 网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP 的网络请求

3)什么是ARP协议

当主机需要发送一个数据到一个目的IP时,设备驱动程序并不能理解这个IP地址,但系统可以通过ARP协议将IP地址转换为网络地址,再传递给设备驱动程序发送出去
ARP为地址解析协议,内核中保存有一个ARP表,里面保存有IP地址和MAC地址对应关系,使用arp命令可以查看主机的ARP表。

4)用iptables能不能实现arptables的功能呢?

当然不能。
因为当需要发送一个数据包到未知目的MAC地址的时候,数据包完成网络层的封装,封装到数据链路层,因为不知道目的MAC地址,会触发ARP请求,请求目的IP地址的MAC地址。
由此可见ARP协议是当数据包在数据链路层需要往外发送的时候体现它的作用的,而iptables只是工作在网络层的,对这个根本不能控制。


5. 参数祥解
ipvsadm参数的使用方法
-A   # 用于虚拟服务器增加虚拟IP即VIP
-E   # 用于虚拟服务器编辑VIP记录
-D   # 用于虚拟服务器删除VIP记录
-C   # 清除虚拟服务器所有的VIP记录
-R   # 恢复虚拟服务器规则
-S   # 保存虚拟服务器规则
-a   # 用于虚拟服务器增加新的Real Server
-e   # 用于虚拟服务器编辑某条Real Server记录
-d   # 用于虚拟服务器删除某条Real Server记录
-L| -l  # 显示出虚拟服务器的列表
-Z   # 虚拟服务器计数器清零
--set tcp udp    #设置连接超时值
-t   # 说明虚拟服务器提供tcp服务,选项后面跟如下格式:vip:port 或 Real-Server-ip:port
-u   # 说明虚拟服务器提供udp服务,选项后面跟如下格式:vip:port 或 Real-Server-ip:port
-f   # 说明是经过iptables标记过的服务类型
-s   # 该选项后面跟LVS使用的调度算法,有如下选项:rr | wrr | lc | wlc | lblc | lblcr | dh | sh默认的调度算法是: wlc
-p   # 在某个Real Server上持续的服务时间。在设定的时间内,来自同一个用户的多个请求,将会转发给同一个Real Server (利用缓存) 默认时间是:300s 例: -p 600
-r   # 指定Real Server的ip地址,此选项后面跟的格式:Real-Server-ip:port
-g   # 指定LVS的工作模式为直接路由模式 (此模式为LVS的默认工作模式)
-i   # 指定LVS的工作模式为隧道模式
-m   # 指定LVS的工作模式为NAT模式
-w   # 指定Real Server的权值
-c   # 显示LVS目前的连接信息
-L --timeout    # 显示服务连接超时值
--daemon   # 显示同步守护进程状态
--stats    # 显示统计信息
--rate     # 显示速率信息
--sort     # 对虚拟服务器和真是服务器排序输出

举例如下:

# 添加虚拟IP:
ipvsadm -A -t 192.168.1.100:80 -s rr -p 600
ipvsadm -A -t 192.168.1.150:21 -s wlc
# 添加Real Server:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.210:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.220:80 -g
用法总结:首先添加VIP 指定策略
其次针对指定的VIP 添加 Real Server 并指定工作模式(g)

二、ldirectord

1. 实现原理

用以LVS监控real server 节点的运行状态,当real server失效时,把它从虚拟服务器列表中删除,恢复是重新加入到列表。同时,它还能调用ipvsadm 自动创建LVS路由表。

2. 参数祥解
1)配置文件参数祥解

编辑配置文件:vim /etc/ha.d/ldirectord.cf (默认所在地,可通过查看 /etc/init.d/ldrectord)

# 全局配置选项: 
checktimeout=20 #判定real server出错的时间间隔 
checkinterval=10 #判定ldirectord在两次检查之间的间隔 
fallback=127.0.0.1:80 #当所有的real server都不工作时,web服务重定向 
autoreload=yes #自动重载配置文件。 
logfile="/var/log/ldirectord.log" #指定日志文件路径 
quiescent=no #"no" 表示:如果一个节点在checktimeout设置的时间周期内没有相应,ldirectord会从LVS的路由表中之间移除real server,此时中断现有的客户端连接,并且LVS丢掉所有的连接跟踪记录和持续连接记录;"yes" 表示当某个real server失效时,ldirectord 将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模版仍然保留在Director上

# 下面是每个虚拟主机的配置:
# sample for 按 http virtual service 
virtual=192.168.1.135:80 #设置VIP和端口号,注意:virtual行后面的行必须缩进4个空格或以一个tab字符进行标记。 
real=192.168.1.210:80 gate #指定real server服务器地址和端口,同时设定LVS的工作模式 gate: DR | ipip: TUNL | masq : NAT
real=192.168.1.220:80 gate
fallback=127.0.0.1:80 gate
service=http #指定做负载均衡的服务
request="index.html" #ldirectord将根据real server 地址,结合该选项给出的请求路径,发送访问请求,检查real server上的服务是否正常运行,确保这里给出的页面是可以访问的,否则ldirectord会误认为此节点已经失效,发生错误监控现象。
receive="Test Page" #指定请求和应答字符串
scheduler=rr #指定调度算法,这里是rr 轮询 算法
protocol=tcp #指定协议类型,包含 tcp 和 udp 
checkport=80 #指定监控的端口号 
checktype=negotiate #指定ldirectord的检查类型 
virtualhost=www.example.com #虚拟服务器的名称 

三、keepalived

『操作环境:rhel6.5』
由于ld仅具有健康检查的作用,而keepalived即可高可用,又可健康检查,为了避免冲突,用keepalived时将ld关掉

1. 实现原理

是类似于layer3,4&7交换机制的软件
作用:主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现(即高可用)

1) 关于双机热备

通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

2)VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议

keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。

VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协 同工作,共同构成一台虚拟路由器。

VRRP中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由 中会重新选举出一个主控路由,来继续工作,来保障不间断服务

本文系统环境如下:
master :172.25.14.1
backup:172.25.14.4
vip:172.25.14.100

这里写图片描述

图解:
节点A vm1 172.25.14.1 (主节点),
节点B vm4 172.25.14.4(备用节点),
虚拟IP(对外提供服务的IP 172.25.14.100)

在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。

当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。

3)原理介绍
  • keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。
  • 当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:
    172.25.14.100 这个IP对应的MAC地址为节点A网卡的MAC地址
    图中的其它电脑如客户端和NodeB会更新自己的ARP表,对应172.25.14.100的MAC地址=节点A网卡的MAC地址。

  • 当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:
    172.25.14.100 这个IP对应的MAC地址为节点B网卡的MAC地址
    图中的其它电脑如客户端会更新自己的ARP表,对应172.25.14.100的MAC地址=节点B网卡的MAC地址。

2. 操作流程
1)keepalived安装

我们这里使用从网下载的原码包进行安装和编译
下载和安装的官方参考文档:
http://www.keepalived.org/doc/installing_keepalived.html
小编本文中用的原码压缩包版本如下:
keepalived-1.3.6.tar.gz

vm1:

tar -zxf keepalived-1.3.6.tar.gz  # 解压

# 原码编译三步走:
cd keepalived
./configure --prefix=/usr/local/keepalived --with-init=SYSV
make && make install 

# 制作软连接:    
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

vm4:
安装操作步骤和vm1一样,但我们为了方便起见我们可以直接将make出来的目录远程传过去,同时将软连接亦可进行远程同步

2)配置keepalived

配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。

vm1 主节点的配置如下:

global_defs {    
    router_id NodeA    
}    
vrrp_instance VI_1 {    
    state MASTER    #设置为主服务器    
    interface eth0  #监测网络接口    
    virtual_router_id 51  #主、备必须一样    
    priority 100   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)    
    advert_int 1   #VRRP Multicast广播周期秒数    
    authentication {    
    auth_type PASS  #VRRP认证方式,主备必须一致    
    auth_pass 1111   #(密码)    
}    
virtual_ipaddress {    
    172.25.50.100/24  #VRRP HA虚拟地址    
}   

vm4 主节点的配置如下:

global_defs {    
    router_id NodeB    
}    
vrrp_instance VI_1 {    
    state BACKUP    #设置为主服务器    
    interface eth0  #监测网络接口    
    virtual_router_id 51  #主、备必须一样    
    priority 90   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)    
    advert_int 1   #VRRP Multicast广播周期秒数    
    authentication {    
    auth_type PASS  #VRRP认证方式,主备必须一致    
    auth_pass 1111   #(密码)    
}    
virtual_ipaddress {    
    172.25.50.100/24  #VRRP HA虚拟地址    
}    
3. 测试

注:在打开vm1和vm4之前,其上都没有vip 172.25.14.100/24
打开vm1和vm4上的keepalived
结果显示:vm1上生成vip,vm4上没有
关掉vm1上的keeplived,会发现vip自动漂移到了vm4上
当vm1上的keepalived再次打开时,会发现vip又自动漂移到了vm1上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值