LVS介绍
LVS(linux虚拟服务器),在linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器。LVS工作模式分为NAT模式、TUN模式、以及DR模式。
LVS具有良好的可靠性,可扩展性、和可操作性的高可用集群
LVS体系架构
使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。
LVS的各个层次的详细介绍:
Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数 据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。
LVS相关术语
LVS的调度算法
Lvs的调度算法决定了如何在集群节点之间分布工作负荷。当director调度器收到来自客户端访问VIP的上的集群服务的入站请求时,director调度器必须决定哪个集群节点应该处理请求。
Director调度器用的调度方法基本分为两类:
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
rr 轮循调度(Round-Robin),它将请求依次分配不同的RS,也就是在RS中均摊请求。这种算法简单,但是只适合于处理性能相差不大的情况
wrr 加权轮循调度(Weighted Round-Robin)它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相同数目的连接数。
dh 目的哈希调度(Destination Hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS。
sh 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。
wlc 加权最小连接数调度(weighted leastconnection)假设各台RS的权值依次为wi(i=1…n),当前的TCP连接数依次为Ti(i=1…n),依次选取Ti/Wi为最小的RS作为下一个分配的RS。
lc 最小连接数调度(Least-Connection),IPVS表存储了所有的活动的连接。把心的连接请求发送到当前连接数最小的RS。
lblc 基于地址的最小连接数调度(locality-Based Least-Connection)将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。
lblcr 基于地址带重复最小连接数调度(Locality-Based Least-Connection with Replication)对于某一目的地址,对应有一个RS子集。对此地址请求,为它分配子集中连接数最小RS;如果服务器中所有子集均已满负荷,则从集群中选择一个连接数较小服务器,将它加入到此子集并分配连接;若一定时间内,未被做任何修改,则将子集中负载最大的节点从子集删除。
SED 最短期望的延迟(shortest expected delay scheduling SED)(SED) 基于wlc算法。这个必须举例来说了 ABC三台机器分别权重123,连接数也分别是123.那么如果使用wlc算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进这样一个运算 A(1+1)/1 B(1+2)/2 C(1+3)/3 根据运算结果,把连接交给C。
NQ 最少队列调度(Never Queue Scheduling NQ)(NQ) 无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算
LVS常见的三种集群
1、LVS_NAT
NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。
网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real
Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real
Server。在服务器端得到数据后,Real
Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。可以看出,在NAT方式下,用户请求和响应报文都必须经过Director
Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
2、LVS_DR
DR模式也叫直接路由模式,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。、
直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内。直接路由技术实现虚拟服务器,VS/DR通过改写请求报文的MAC地址,将请求发送到RealServer,而Real Server将响应直接返回给客户,这种方式是三种负载调度机制中性能最高最好的,但是必须要求DirectorServer与Real Server都有一块网卡连在同一物理网段上。
3、LVS_TUN
LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。
IP隧道技术实现虚拟服务器,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
LVS核心组件
LVS已经集成到了linux内核模块中,但在整个LVS环境又分为内核层和用户层,内核层负责内核算法的实现,用户层需要安装ipsadm工具,通过命令将管理员需要的工作模式与实现算法传递给内核。
集群服务管理类命令:
1)添加集群
ipvsadm -A -t|u|f service-address -s scheduler
-A 添加集群
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
-s:调度算法
-E :修改集群
-D:删除集群
2)添加real server
-a :添加rs
-t|u|f service-address:事先定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口
-e:修改rs
-d:删除rs
3)映射
-g: DR
-i: TUN
-m: NAT
[-w weight]: 定义服务器权重
4)查看:
# ipvsadm -L|l [options]
常用选项[options]如下:
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-c: 显示当前的ipvs连接状况
5)
删除所有集群服务:
# ipvsadm -C
保存规则
保存规则至默认配置文件:
# service ipvsadm save
保存规则至指定文件:
# ipvsadm -S > /path/to/somefile
ipvs模块
IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求;当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术。
LVS负载均衡配置
环境准备:三台机器,
hostnamectl set-hostname directory hostnamectl set-hostname ser01
hostnamectl set-hostname ser02 su -l
同步时间
ntp cn.pool.ntp.org
1、LVS_DR集群
1)在directory上安装lvs
yum install ipvsadm -y
添加一块网卡
ifconfig ens33:1 192.168.76.201/24
重启网卡
systemctl restart network
配置负载均衡服务
ipvsadm -A -t 192.168.76.201:80 -s rr
ipvsadm -a -t 192.168.76.201:80 -r 192.168.76.173:80 -g -w 1
ipvsadm -a -t 192.168.76.201:80 -r 192.168.76.174:80 -g -w 1
ipvsadm
2)在两个ser端配置
cd /etc/sysconfig/network-scripts/
vim ifcfg-lo:10
调准内核参数,关闭arp响应(两个服务都设置)
vim /etc/sysctl.conf
3)可选择在网页测试
yum install httpd -y
echo “web,173” > /var/www/html/index/html
echo “web,174” > /var/www/html/index/html
systemctl start httpd
在网页地址栏输入192.168.76.201,发现出现页面“web,173”,“web,174” ,由于设置轮询,所以会平均出现
若是关闭某个ser的httpd服务,就不会出现相应的页面,输入192.168.76.201 只会出现httpd服务开启的web页面
2、LVS_NAT模式
1)在directory上配置负载均衡服务
ipvsadm -A -t 192.168.76.201:80 -s rr
ipvsadm -a -t 192.168.76.201:80 -r 192.168.76.173:80 -m -w 1
ipvsadm -a -t 192.168.76.201:80 -r 192.168.76.174:80 -m -w 1
ipvsadm
ipvsadm
2) 在两个ser端配置
cd /etc/sysconfig/network-scripts/
vim ifcfg-lo:10
调准内核参数,关闭arp响应(两个服务都设置)
vim /etc/sysctl.conf
3)可选择在网页测试
yum install httpd -y
echo “web,173” > /var/www/html/index/html
echo “web,174” > /var/www/html/index/html
systemctl start httpd
在网页地址栏输入192.168.76.201,发现出现页面“web,173”,“web,174” ,由于设置轮询,所以会平均出现
若是关闭某个ser的httpd服务,就不会出现相应的页面,输入192.168.76.201 只会出现httpd服务开启的web页面
中文说明:
arp_ignore- INTEGER 定义对目标地址为本地IP的ARP询问不同的应答模式
0-(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求。
1 – 只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
2 – 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3 –不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应。
4-7 –保留未使用。
8 – 不回应所有(本地地址)的arp查询。
arp_announce - INTEGER 对网络接口上,本地IP地址发出的,ARP回应,做出相应级别的限制;
确定不同程度的限制,宣布对来自本地源IP地址发出ARP请求的接口
0 -(默认)在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 – 尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起ARP请求的源IP地址是被设置应该经由路由到达此网络接口的时候很有用,此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2 –对查询目标是要最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的网络发送接口或其他的有可能接受到该ARP回应的网络接口来进行发送。限制了使用本地的vip地址作为优先的网络接口。