LVS-DR模型架构图解:
一.实验环境介绍
路由器:存在多个网络
172.16.0.1,192.168.0.254,192.168.1.254
交换机:连接不同网络的主机
客户端:Windos XP;客户端IP地址为:192.168.1.31/24
LVS:Director 负载均衡服务器,其DIP和VIP在不同网段;
RS:Real Server;后端web服务器;其RIP和VIP在不同网段;
二.地址规划
如图所示:
VIP使用172.16.0.0/16网络
RIP使用192.168.0.0/24网络
1.Real Server的RIP的规划:
RS1:192.168.0.31/24
RS2:192.168.0.131/24
2.Direcotr的LVS Server的地址规划:
DIP:192.168.0.130/24
VIP:172.16.31.54/16
3.客户端IP规划:
172.16.31.31/16或者192.168.1.31/24
RS响应客户端请求报文,需要将网关指向192.168.0.254/24,由192.168.0.254转发其响应报文到172.16.31.0/16或者192.168.1.0/24这个网络中来;
更真实的设计:将客户端的IP地址设置成192.168.1.31/24来实现
三.DR模型实现负载均衡的工作原理
上面说了NAT模型的实现方式,那么NAT模型有个缺陷,因为进出的每个数据包都要经过Director Server,当集群系统负载过大的时候Director Server将会成为整个集群系统的瓶颈,那么DR模型就避免了这样的情况发生,DR模型在只有请求的时候才会经过Director Server, 回应的数据包由Real Server 直接响应用户不需要经过Director Server,其实三种模型中最常用的也就是DR模型了,下面来说DR模型具体是怎么实现负载均衡的,根据上图,
1.首先客户端用户用CIP请求VIP;
2.根据上图可以看到,不管是Director Server还是Real Server上都需要配置VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过Director Servre;
3.当Director Server收到用户的请求后根据此前设定好的调度算法结果来确定将请求负载到某台Real Server上去,假如说此时根据调度算法的结果,会将请求负载到Real Server 1上面去,此时Director Server 会将数据帧中的目标MAC地址修改为Real Server1的MAC地址,然后再将数据帧发送出去;
4.当Real Server1 收到一个源地址为CIP目标地址为VIP的数据包时,RealServer1发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理,当Real Server1处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过Director Server了,而是直接响应给用户;
四.架构实现
1.LVS Server配置
DIP设置:
[root@lvs network-scripts]# pwd /etc/sysconfig/network-scripts [root@lvs network-scripts]# cat ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" HWADDR="08:00:27:FF:73:49" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" IPADDR=192.168.0.130 NETMASK=255.255.255.0 GATEWAY=172.16.0.1
VIP设置:
(1).不同网络:
[root@lvs network-scripts]#ifconfig eth0:0 172.16.31.54/16 up
(2).同一网络的只广播给自己;本实验不需要设置广播
[root@lvs network-scripts]#ifconfigeth0:0 172.16.31.54 netmask 255.255.255.255 broadcast 172.16.31.54 up
配置路由:
[root@lvsnetwork-scripts]# route add -host 172.16.31.54 dev eth0:0
2.Real Server设置:
RS1的网卡的ip配置:
[root@node1 network-scripts]# pwd /etc/sysconfig/network-scripts [root@node1 network-scripts]# catifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" HWADDR="08:00:27:41:D4:C9" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" IPADDR=192.168.0.31 NETMASK=255.255.255.0 GATEWAY=172.16.0.1
需要指定网关:
[root@node1 network-scripts]#route adddefault gw 192.168.0.254
3.在RS上配置arptables:
[root@node1 network-scripts]#echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce [root@node1 network-scripts]#echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce [root@node1 network-scripts]#echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore [root@node1 network-scripts]#echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
在RS上设置VIP地址:
[root@node1 network-scripts]#ifconfig lo:0 172.16.31.54 netmask 255.255.255.255 broadcast 172.16.31.54 up
在RS上添加路由:
[root@node1 network-scripts]#route add-host 172.16.31.54 dev lo:0
4.启动web服务;此处安装了LAMP架构+wordpress,可以参考我前面写的文章,这里就不重复了。
#service httpd start #curl http://192.168.0.31 #curl http://172.16.100.8
5.RS2的配置:跟RS1一致的哦!
设置RIP地址: #ifconfig eth0 192.168.0.131/24 up #route add default gw 192.168.0.254 配置arptables: #echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce #echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce #echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore 设置VIP地址: #ifconfig lo:0 172.16.31.54 netmask255.255.255.255 broadcast 172.16.31.54 up 添加路由: #route add -host 172.16.31.54 dev lo:0 #启动web服务 #service httpd start #curl http://192.168.0.131 #curl http://172.16.31.54
6.LVS Server上定义集群服务:
#ipvsadm -A -t172.16.31.54:80 -s rr #ipvsadm –a -t172.16.31.54:80 -r 192.168.0.31 -g #ipvsadm –a -t172.16.31.54:80 -r 192.168.0.131 –g
设置完成后访问网页测试:
我们在LVS上查看一下连接状态:
至此:LVS-DR模式的负载均衡实验完成!!!