一、LVS的基础知识
1、LVS的概念
- LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。使用集群技术和Linux操作系统实现一个高性能、高可用的服务器
2、LVS的包转发策略
- 1.NAT (Network Address Translation)模式。LB收到用户请求包后,LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址,转发给RS;RS将应答包发给LB,LB将应答包中RS的IP转为虚拟服务器的IP地址,回送给用户。
- 2.IP隧道 (IP Tunneling)模式。LB收到用户请求包后,根据IP隧道协议封装该包,然后传给某个选定的RS;RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。
- 3.DR(Direct Routing)模式。LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后,可直接将应答内容传给用户。此时要求LB和所有RS都必须在一个物理段内,且LB与RS群共享一个虚拟IP。
3、lvs的三种模式:
- 1.VS/NAT
- 通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的 响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
- 2.VS/TUN
- 采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
- 3.VS/DR
- VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
二、LVS-DR模式简介
DR模式(直接路由模式)是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求
注:要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境中
DR模式原理过程简述:
VS/DR模式的工作流程图,它的连接调度和管理与NAT和TUN中的一样,它的报文转发方法和前两种不同。DR模式将报文直接路由给目标真实服务器。在DR模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由LB发出的数据包。真实服务器接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环借口上面配置VIP。由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把真实服务器的lo接口的ARP响应关闭掉。然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。
三、LVS-DR模式下的负责均衡
1、在server1中:
vim /etc/yum.repos.d/rhel-source.repo
添加
2.安装ipvsadm工具
yum install -y ipvsadm 管理集群服务的命令行工具
3.添加vip
ipvsadm -A -t 172.25.56.156:80 -s rr 临时添加vip,rr轮询模式
ipvsadm -a -t 172.25.56.156:80 -r 172.25.56.3:80 -g 给vip添加rip,使用DR模式 -g为DR模式
ipvsadm -a -t 172.25.56.156:80 -r 172.25.56.4:80 -g
ipvsadm -l 显示内核虚拟服务器表
ipvsadm -ln ip方式显示内核虚拟服务器表
2、在server3中
yum install httpd -y
vim /var/www/html/index.html
<h1>server3</h1>
/etc/init.d/httpd start
3、在server4中
配置好apache
yum install httpd -y
vim /var/www/html/index.html
<h1>server4</h1>
/etc/init.d/httpd start
4、测试
物理机中curl 172.25.56.156 访问失败
在server1中:ip addr add 172.25.56.156/24 dev eth0
在物理机中curl 172.25.56.156 访问失败
但此时在server1中 ipvsadm -ln 可以发现随着物理机访问172.25.56.156失败次数增多
ipvsadm -ln中InActConn数值增加,此时说明调度器配置成功
在server3中:
ip addr add 172.25.56.156/32 dev lo