它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡的转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的,高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。由于负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。
上图所示,LVS可分为三部分:
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,在返回给客户,完成整个负载调度过程。
优点:
配置及管理简单。Director Server 和 Real Server 群组可以不在一个网段。
缺点:
要求 Director Server必须要有两块网卡 ,Director Server很容易成为整个集群的性能瓶颈(所有数据都经过这里)
IP隧道模式,采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,,当客户请求越来越多时,调度器的处理能力将成为瓶颈。
为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器直接将响应报文返回给客户,调度器只处理请求报文。
由于一般网络服务应答比请求报文大的多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
优点:
性能介于NAT和DR模式之间
Director Server与Real Server 可以在不同的网段,即集群中的Real Server 可以在不同的城市。
缺点:
需要的Real Server服务器的内核中,必须支持IP Tunnel
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
优点:性能最好
缺点:
要求Director Server和所有的Real Server 必须在同一个网段中,不能实现集群的跨网段应用
无论是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 上将不再有任何限制,大大提高了运维部署的便利性。
在内核中的连接调度算法上,IPVS 已实现了以下八种调度算法:
1)轮叫调度(RoundRobin Scheduling )
以轮叫的方式依次将请求调度不同的服务器,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2)加权轮叫调度(Weighted RoundRobin Scheduling )
根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3)最小连接调度(LeastConnection Scheduling )
是把新的连接请求分配到当前连接数最小的服务器。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
4)加权最小连接调度(Weighted LeastConnection Scheduling)
是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。
在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5)基于局部性的最少链接(LocalityBased Least Connections Scheduling )
是针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache 集群中客户请求报文的目标 IP 地址是变化的。
该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务 器,将请求发送到该服务器。
6)带复制的基于局部性最少链接(LocalityBased 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)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
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只是工作在网络层的,对这个根本不能控制。
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 # 对虚拟服务器和真是服务器排序输出
举例如下:
ipvsadm -A -t 192.168.1.100:80 -s rr -p 600
ipvsadm -A -t 192.168.1.150:21 -s wlc
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)
用以LVS监控real server 节点的运行状态,当real server失效时,把它从虚拟服务器列表中删除,恢复是重新加入到列表。同时,它还能调用ipvsadm 自动创建LVS路由表。
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 #虚拟服务器的名称