LVS

1.什么是lvs?
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

2.lvs的作用?
1)LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。
2) 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
3) 易用,配置非常简单,且有多种负载均衡的方法。
4) 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
5) 外可扩展性也非常好。

3.lvs的组成?
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

  1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
  2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

4.lvs工作原理?
基于ip和port来实现负载均衡,因此它工作在第四层(传输层)

  1. 首先用户向负载均衡器调度器(Director Server)发起请求,负载均衡器将请求发往至内核空间,交给内核模块进行检测。
  2. 内核模块中的PREROUTING链首先会收到用户请求,判断目标地址是否是负载均衡器的IP地址,如果是,则将数据包发往INPUT链。
  3. IPVS模块是工作在INPUT链上的,当用户请求到达INPUT链上时,IPVS会将用户请求和自己已定义好的集群服务作对比,如果用户请求的就是定义的集群服务,那么IPVA会强行修改数据包里的目标IP地址和目标端口,并将新的数据包发往POSTROUTING链。
  4. POSTROUTING链接收到数据包发现目标IP地址刚好是自己的后端的服务器,那么通过选路,将数据包最终发送给后端的服务器。

5.LVS三种模式?(路由模式、隧道模式、NAT模式)
LVS
VS/DR(路由模式):
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

VS/TUN(隧道模式):在路由模式中加了一层封装
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

VS/NAT模式:经过两次调度器
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

6.lvs八种轮叫方法?
常用前四种
1)轮叫调度 rr
2) 加权轮叫 wrr
3) 最少链路 lc
4) 加权最少链路 wlc
5) 基于局部性的最少连接调度算法 lblc
6) 复杂的基于局部性最少的连接算法 lblcr
7) 目标地址散列调度算法 dh
8) 源地址散列调度算法 sh

7.lvs/DR模式配置方法?
direct_server:192.168.7.221
1) 安装ipvsadm
yum -y install ipvsadm
2) 清除配置信息
ipvsadm -C
3)添加对外提供服务的服务ip
ipvsadm -A -t 192.168.7.250:80 -s rr
4)添加2台real_server主机
ipvsadm -a -t 192.168.7.250:80 -r 192.168.7.222:80 -g
ipvsadm -a -t 192.168.7.250:80 -r 192.168.7.223:80 -g
5)配置网卡的子网口为vip,ip地址为192.168.7.250
ifconfig ens33:0 192.168.7.250 broadcast 192.168.7.250 netmask 255.255.255.255 up
6)添加路由
route add -host 192.168.7.250 dev ens33:0

real_server:(两台执行步骤一样)
192.168.7.222
192.168.7.223
1)在回环地址的子网口上配置服务ip(vip)
ifconfig lo:0 192.168.7.250 broadcast 192.168.7.250 netmask 255.255.255.255 up
2)添加路由
route add -host 192.168.7.250 dev lo:0
3)4个echo语句
echo “1”>/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2”>/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore
echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore
4)测试:用浏器访问192.168.7.250
ipvsadm -Ln 查看路由模式
ipvsadm -Ln --stats 查看ipvsadm状态