linux进阶--lvs原理及ipvsadm参数介绍

一.lvs

1. Linux Virtual Server (Linux 虚拟服务器)

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

在这里插入图片描述

上图所示,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. 四种负载均衡技术

2.1 NAT

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

在这里插入图片描述

2.2 TUN

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

优点:
性能介于NAT和DR模式之间
Director Server与Real Server 可以在不同的网段,即集群中的Real Server 可以在不同的城市。
缺点:
需要的Real Server服务器的内核中,必须支持IP Tunnel
在这里插入图片描述

2.3 DR

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

在这里插入图片描述

2.4 FULL-NAT

无论是DR还是NAT模式,不可避免的问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
这引发的两个问题是:
1.同一个VLAN的限制导致运维不方便,跨VLAN 的 RS 无法接入。
2.LVS的水平扩展受到制约。当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈。
Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS 对应 多个RS,解决水平扩容的问题。
在这里插入图片描述

在包从 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(前端服务器)上,同时Directory Server上虚拟出一个IP地址(VIP),用户必须通过这个虚拟的VIP地址访问服务。访问请求首先经过VIP到达负载均衡调度器,然后由负载均衡调度器根据设定好的算法从Real Server列表中选取一个服务节点响应用户请求。
具体过程:访问请求–>VIP(由ipvsadm程序虚拟出来的)–>负载均衡调度器(根据设定好的算法进行筛取)–>Real Server

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参数祥解

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上

下面是每个虚拟主机的配置:

按 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 #虚拟服务器的名称

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值