LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
LVS十种调度算法:
静态(fixed method):
rr, wrr, sh, dh
rr: 轮叫(Round Robin) 调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
wrr: 加权轮叫(Weighted Round Robin)调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
sh: Source Hashing 源地址哈希,实现LVS持久性.基于client地址的来源区分。(用的很少)
dh: Destination Hashing realserver中绑定两个ip,ld判断来者的ISP商,将其转到相应的IP
动态(Dynamic method):
lc, wlc, sed, nq, lblc, lblcr
lc: Least Connection 最少链接,调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。 Overhead=Active*256+Inactive 根据结果得出下一个
wlc: Weighted 加权最少链接(Weighted Least Connections)默认算法,负载均衡最理想.在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 Overhead=(Active*256+Inactive)/Weight
sed: Shortest Expect Delay(最短期望延迟)是wlc改进版 Overhead=(Active+1)*256/Weight
基于wlc算法。这个必须举例来说:
ABC三台机器分别权重123,连接数也分别是123.那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个.
使用sed算法后会进行这样一个运算
A:(1+1)/1
B:(1+2)/2
C:(1+3)/3 根据运算结果,把连接交给C
nq: Never Queue无需队列,如果有台realserver的连接数=0就直接分配,不需要在进行sed运算.
lblc: (dh+lc) Locality-based Least Connection 缓存服务器集群,基于本地的最小连接。把请求传递到负载小的服务器上.
lblcr: Replicated and Locality-based Least Connection (带复制功能基于本地的最小连接) 带复制调度的缓存服务器集群。某页面缓存在服务器A上,被访问次数极高,而其他缓存服务器负载较低,监视是否访问同一页面,如果是访问同一页面则把请求分到其他服务器.
LVS工作模式主要有4种:
NAT 源地址转换模式
请求过程: CIP请求至DIP,DIP转发至RIP由RIP响应通过DIP将源址转换成VIP交付至CIP
NAT模式下网络报文进出都要经过DIP处理,无论客户端请求还是服务器响应都必须经过DIP,DIP需要作为RIP的网关,如果后端RealServer过多,调度器很可能成为系统瓶颈
要求:
1、RealServer应该使用私有IP地址
2、RealServer的网关应该指向DIP
3、RIP和DIP应该在同一个网段内
4、进出的报文都得经过Directory,在高负载下Directory会成为系统性能瓶颈
5、支持端口映射
6、RealServer可以使用任意OS
DR 直接路由模式
请求过程: CIP请求至DIP,DIP转发修改数据帧,将目标MAC指向RIP,由RIP直接通过其它路由响应用户,不能用原路由出去。DR模式是性能最好的一种模式
要求:
1、RealServer可以使用私有地址
2、RealServer的网关一定不能指向DIP
3、RealServer和Director要在同一物理网络内;DIP和RIP应该在同一网段
4、入站报文经过Directory,出站则由RealServer直接响应Client
5、不能做端口映射
6、RealServer可以为大多数常见OS
TUNNEL 基于IP隧道模式
请求过程: CIP请求至RIP,需要封装额外源DIP、目标RIP报文.由RIP直接通过其它路由响应用户,不能用原路由出去。
要求:
1、RIP、DIP不能是私有地址
2、RealServer的网关不能指向DIP
3、入站报文经过Directory,出站则由RealServer直接响应Client
4、不支持端口映射
5、支持IP tunneling的OS才能用于RealServer
FullNAT 源、目标地址转换模式 属于淘宝研发
主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,DIP和RIP的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性
调度器类型: Director, Dispatcher, Load Balancer
Client IP 客户端请求IP 此处简称为CIP
Directory LVS集群调度器 此处简称为DIP
RealServer LVS集群后端主机 此处简称为RIP
Virtual Host IP LVS集群虚拟主机IP 此处简称为VIP
LVS DR 模型实现过程:
实验环境:相同物理网络 不同物理网络需将RIP网关指向不同路由
环境:DIP 172.18.20.126 VIP 172.18.20.128
RIP1 172.18.20.124 RIP2 172.18.20.125
前提: RIP已经启用http服务,打开DIP主机端口转发功能
RIP1配置: [[email protected]~]#service httpd start 启动httpd服务,或者设置为自动启动 [[email protected]~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 定义lo网卡arp通告响应级别 1表示仅响应通过本地接口 [[email protected]~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 定义所有网卡arp通告响应级别 [[email protected]~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 定义lo网卡arp通告限制级别 0是默认级别,通告所有网卡MAC信息 1是不把地址通告给非本地网络 2是只通告属于本地网络 [[email protected]~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 定义所有网卡arp通告限制 [[email protected]~]#ifconfig lo:0 172.18.20.128 broadcast 172.18.20.128 netmask 255.255.255.255 up 将arp响应配置在本地回环接口别名上,配置广播地址、子网掩码,只响应VIP请求 [[email protected]~]#route add -host 172.18.20.1 dev lo:0 添加一条主机路由在别名网卡上
RIP2配置: [[email protected]~]#service httpd start 启动httpd服务,或者设置为自动启动 [[email protected]~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 定义lo网卡arp通告响应级别 1表示仅响应通过本地接口 [[email protected]~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 定义所有网卡arp通告响应级别 [[email protected]~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 定义lo网卡arp通告限制级别 0是默认级别,通告所有网卡MAC信息 1是不把地址通告给非本地网络 2是只通告属于本地网络 [[email protected]~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 定义所有网卡arp通告限制 [[email protected]~]#ifconfig lo:0 172.18.20.128 broadcast 172.18.20.128 netmask 255.255.255.255 up 将arp响应配置在本地回环接口别名上,配置广播地址、子网掩码,只响应VIP请求 [[email protected]~]#route add -host 172.18.20.1 dev lo:0 添加一条主机路由在别名网卡上
DIP配置: [[email protected]~]#echo 1 > /proc/sys/net/ipv4/ip_forward 打开DIP主机端口转发功能 [[email protected]~]#ifconfig eth0:0 172.18.20.128 broadcast 172.18.20.128 netmask 255.255.255.255 up 将arp响应配置在eth0别名上,配置广播地址、子网掩码,只响应VIP请求 [[email protected]~]#route add -host 172.18.20.1 dev eth0:0 添加一条主机路由在别名网卡上 [[email protected]~]#ipvsadm -A -t 172.18.20.128:80 -s wlc 创建http集群,指定集群算法 [[email protected]~]#ipvsadm -a -t 172.18.20.128:80 -r 172.18.20.124 -g -w 1 为集群添加RIP1,指定模型及权重 [[email protected]~]#ipvsadm -a -t 172.18.20.128:80 -r 172.18.20.125 -g -w 2 为集群添加RIP2,指定模型及权重
一般DR模型使用较多,至此LVS集群DR模型完成,如有错误请大家指教!