LVS模式一:直接路由模式DR(Direct Routing)
(一)LVS
一、LVS的了解
LVS(Linux Virtual Server)可以理解为一个虚拟服务器系统。
Internet的飞速发展,网络带宽的增长,Web服务中越来越多地使用CGI、动态主页等CPU密集型应用,这对服务器的性能有较高要求,单台服务器已经无法满足需要,所以集群自然的成为一种解决方案,而LVS便是其中的一种集群方案。LVS使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易扩展,而价格低廉的解决方案。也可以这样理解:lvs能够实现在大并发的情况下,将前端调度器收到的请求分发给后端服务器处理,实现了负载均衡集群的作用。
集群(Cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。集群系统的主要优点:高可扩展性、高可用性、高性能、高性价比。 常见的集群类型:
HA:High Availability 高可用集群
HP:High Performance 高性能集群
二、LVS结构和工作原理
LVS由前端的负载均衡器(Load Balance,LB)和后端的真实服务器(Real Server,RS)群组成的。RS中间可以通过局域网或广域网来连接。LVS的这种结构是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务器的RS群。当用户的请求发往虚拟服务器时,LB将会根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。然后RS根据请求内容将对应的请求结果返回给客户,同请求包一样,应答包的返回方式也与包转发策略有关。
三、LVS的包转发策略(基本为三种)
1)NAT(Network Address Translation)模式:实现目标地址和目标端口的转发;当客户端发送一个请求到VIP中,然后VS收到数据包之后,根据调度策略选择一个RIP(其中,LB将请求包中的虚拟服务器中的ip转换为选定的RIP,并转发给RS);RS将应答包发送给LB,LB将应答请求中的RIP转换为VIP,回送给客户端。
2)IP隧道(IP Tunneling)模式:当LB接收到用户请求包之后,根据IP隧道协议封装请求包,然后传送给某一个特定的RS,RS解析出请求的信息,直接将应答信息传送给用户。此时,要求LB和RS都支持IP隧道协议。
3)DR(Direct Routing)模式:实现的是MAC地址的转换;LB受到数据包之后,将请求包中的MAC地址转换为某一选定RS中目标地址的MAC地址后转发出去,RS受到请求包之后,可直接将应答内容传送给客户端。但此时要求LB和RS在局域网内,且LB和RS群共享一个虚拟IP。
四、DR模式的原理图
DR模式下数据传输过程
五、LVS模式下的DR模式的搭建
1、在虚拟服务器上配置更高级的yum源
---> ls /var/www/html/rhel6.5 # 此时,我的镜像在真机中挂载,所以在真机中查看镜像的信息
---> vim /etc/yum.repos.d/rhel-source.repo # 在虚拟服务器上配置所有的yum源,如下所示
---> yum clean all # 清空yum源中的缓存
---> yum repolist # 显示yum仓库的信息
2、在server1服务器上安装ipvsadm(调度器),并添加规则。(ipvsadm时管理集群服务的命令行工具,用于管理LVS策略规则)
---> yum install ipvsadm -y
---> ipvsadm -A -t 172.25.2.100:80 -s rr # -A 添加一个虚拟机设备;-t 添加tcp服务和ip;-s 调度算法(rr|wrr|wlc|等)
---> ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.2:80 -g # -a 添加rs服务器;-t 调度器ip;-r RS的ip; -g dr模式(直接路由)
---> ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.3:80 -g # 添加另一台rs服务器
---> ip addr add 172.25.2.100/24 dev eth0 # 给调度器添加一个虚拟ip
3、给后端服务器172.25.2.2添加ip:
---> ip addr add 172.25.2.100/24 dev eth0
---> ip addr
4、给后端服务器172.25.2.3添加ip:
---> ip addr add 172.25.2.100/24 dev eth0
---> ip addr
5、在物理机中测试结果如下:
---> arp -an | grep 100 # 查看100主机的地址解析结果(为MAC地址)
---> arp -d 172.25.2.100 # 清空arp中缓存的mac地址
---> ping 172.25.2.100 # 重新获取mac地址,并缓存
---> arp -an | grep 100 # 再次查看(此时,与第一次结果不同;分别为server2和server3中对应的100的MAC地址)
注释:我们发现,测试端没有经过调度器,而是直接到达后端(没有形成轮叫)。此时,我们需要在server2和server3下载arptables_jf,防止客户端直接访问后端。
6、下载arptables_jf # 由与server2和server3执行操作一样,所以以server2为例。
---> arptables -A IN -d 172.25.2.100 -j DROP # 在网内接收包时,拒绝172.25.2.100为目的地址的请求
---> arptables -A OUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.2 # 当自身需要在网内发包,把原来包含虚拟ip的arp请求做地址伪装
---> /etc/init.d/arptables_jf save # 保存写进去的策略
---> /etc/init.d/arptables_jf start # 启动arptables服务
---> arptables -L # 查看arp策略
注意:server3中和server2中做相同的处理
7、在测试端进行测试:(此时,有轮询情况。并且查看访问100的MAC地址的时候,显示的是调度器的MAC地址)
---> ipvsadm -Ln # 有n的时候,表示有显示ip和端口号;L 表示显示ipvsadm的规则。
(二)DR模式下LVS的健康检查
我们需要的情况是这样的,当后端的服务器发生出现错误时, 在测试端测试时会提示出错误的信息。此时,我们需要对后端服务器做健康检查。具体操作步骤如下
在以上操作的基础上,若server2和server3的httpd服务器关闭之后,测试端的结果为:
1、在server1中,安装软件 ldirectord-3.9.5-3.1.x86_64.rpm 。(对后端服务器做检查)
---> yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
2、将配置文件的母板拷贝到/etc/ha.d/目录下
---> cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
3、编辑ldirectord的配置文件
---> vim /etc/ha.d/ldirectord
# Sample for an http virtual service
---> /etc/init.d/ldirectord start
5、清除之前的后端服策略,并重新添加策略显示
---> ipvsadm -C
---> ipvsadm -Ln
6、在本机安装httpd服务,并修改配置文件的端口号为80。同时添加默认发布目录
---> vim /var/www/html/index.html
<h1>该站点正在维护。。。</h1>
---> /etc/init.d/httpd restart
7、关闭server2和server3的httpd服务
8、在客户端测试结果如下:
---> curl 172.25.2.100
9、在调度器主机上查看策略的执行此次数
---> ipvsadm -Ln