一、LVS简介
一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(Load Balancer)。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访 问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检 测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。
二、LVS的分类
LVS-DR: 直接路由
LVS-DR模式:
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的mac地址改为后端真实服务器的mac地址;
3.后端真实服务器得到访问报文后进行ip查看,再确认自己有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。
要求:
1.LVS服务器和后端真实的服务器要处在同一vlan中。
2.LVS和后端服务器上都要有vip,并且后端真实服务器上的vip不能对外进行广播。
优点:
1.LVS服务器只是修改了mac地址,所以非常快速,并且LVS不会成为瓶颈。
缺点:
1.要求较高,LVS服务器必须和后端真实服务器处于同一vlan中;
2.后端真实服务器直接响应客户端,对于后端真实服务器来说,并不安全。
LVS-TUN:隧道
LVS-TUNNEL模式:
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文重新封装,发送给后端真实服务器;
3.后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。
要求:
1.lvs和后端真实服务器上都要有vip。
2.不会成为瓶颈。
3.请求的报文不能太大。
优点:
1.快速
2.不安全,不能抵抗DOS攻击
LVS-NAT:地址转换
LVS-NAT模式:
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给后端真实服务器;
3.后端服务器在处理完之后要将响应的报文返回给客户端,但是却不在同一网段;
4.LVS根据自己的追踪技术将后端真实服务响应客户端的报文原地址改为自己的ip地址(SNAT),发送给客户端。
要求:
1.LVS服务器需要有不同的网段。
2.真实服务器的网关必须设置为LVS的ip地址。
优点:
1.安全
2.可以实现不同网段的数据请求。
缺点:
因为在 VS/NAT 中请求和响应报文都需要通过负载调度器,伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身
有可能成为系统的新瓶颈。
LVS-FULLNAT模式:
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),源地址改为自己的ip地址(SNAT),发送给后端真实服务器;
3.后端服务器在处理完之后要将响应的报文返回给lvs;
4.LVS将返回的数据包源地址改为自己(SNAT),目的地址改为客户端(DNAT),发送给客户端。
。
三.LVS-DR模式下的负载均衡
实验环境:
物理机:172.25.254.68
vip:172.25.254.100
server2(VS):172.25.254.2
server5(VS):172.25.254.5
server3(RS):172.25.254.3
server4(RS):172.25.254.4
server2:
1.配置yum库,安装【Load Balancer】组包:
vim /etc/yum.repos.d/rhel-source.repo
yum cLean all
yum repolist
2、配置虚拟VIP
yum install ipvsadm -y
ip addr add 172.25.254.100/24 dev eth0 #添加虚拟ip为172.25.2.100
ip addr
ipvsadm -A -t 172.25.254.100:80 -s rr #使用的调度算法,算法为rr(Round Robin)
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g #给vip添加rip,-g指定LVS 的工作模式为直接路由模式(默认模式)
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.4:80 -g
ipvsadm -ln
-m #--masquerading 指定LVS 的工作模式为NAT 模式
-t #--tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
server3:
ip:172.25.254.3
/etc/init.d/httpd start #开启http服务
ip addr add 172.25.254.100/32 dev eth0
yum install arptables_jf -y
##安装arp防火墙 arp防火墙用来屏蔽数据包,拦截ip冲突,因为虚拟机与real server的地址一致,所以进入real server时需要把虚拟ip DROP掉,即拦截real server的虚拟ip
arptables -L
arptables -A IN -d 172.25.254.100 -j DROP
##拒绝客户端访问realserver的虚拟ip,只要输入进来直接DROP掉
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3
##由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能
/etc/init.d/arptables_jf save #保存策略