概述:
为了阐述方便,我根据官方原理图讲解,如下图所示:VS/DR的体系结构:
我将结合这幅原理图及具体的实例来讲解一下LVS-DR的原理,包括数据包、数据帧的走向和转换过程。
官方的原理说明:Director接收用户的请求,然后根据负载均衡算法选取一台realserver,将包转发过去,最后由realserver直接回复给用户。
实例场景设备清单:
说明:我这里为了方便,client是与vip同一网段的机器。如果是外部的用户访问,将client替换成gateway即可,因为IP包头是不变的,变的只是源mac地址。
① client向目标vip发出请求,Director接收。此时IP包头及数据帧头信息如下:
② VS根据负载均衡算法选择一台active的realserver(假设是192.168.57.122),将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。此时IP包头及数据帧头信息如下:
③ realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时IP包头及数据帧头信息如下:
④ 如果client与VS同一网段,那么client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。
例子:
DIP:172.16.14.55
VIP:172.16.14.1
RIP:172.16.14.5
RIP:172.16.14.6
R1
在R1上设置RIP为172.16.14.5,VIP为172.16.14.1
先安装httpd服务,以便于一会测试
# yum installhttpd
# echo “r1.magedu.com” > /var/www/html/index.html
在命令行界面进行测试
设置eth0的arp解析,VIP地址及其子网掩码为255.255.255.255,并且增加路由
进行ip地址设置的查看
查看路由
R2
设置R2的RIP为172.16.14.6,VIP为172.16.14.1
先安装httpd服务,以便于一会测试
# yum installhttpd
# echo “r1.magedu.com” > /var/www/html/index.html
在命令行界面进行测试
设置eth0的arp解析,VIP地址及其子网掩码为255.255.255.255,并且增加路由
进行ip地址设置的查看
查看路由
Director
在director上安装ipvsadm
#yuminstall ipvsadm
设置ipvsadm规则,同时还要进行测试是否可以访问real server的网页
在浏览器上进行测试
附加:
可以在director上安装httpd服务。这样可以在realserver服务器出现问题时,director可以出现一个欢迎页面,告诉客户端
这里再附上一个例子
DR director DIP:172.16.14.55 VIP:172.16.14.1 R1 eth0:172.16.14.5 gateway 172.16.0.1 配置httpd服务 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce # ifconfig lo:0 172.16.14.1/16 up R2 eth0:172.16.14.6 gateway 172.16.0.1 配置httpd服务 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce # ifconfig lo:0 172.16.14.1/16 up R1:设置使用VIP作为源地址 # ifconfig lo:0 down # ifconfig lo:0 172.16.14.1 broadcast 172.16.14.1 netmask 255.255.255.255 up broadcast地址为vip地址 R2:设置使用VIP作为源地址 # ifconfig lo:0 down # ifconfig lo:0 172.16.14.1 broadcast 172.16.14.1 netmask 255.255.255.255 up director # ifconfig eth0:0 down # ifconfig eth0:0 172.16.14.1 broadcast 172.16.14.1 netmask 255.255.255.255 up R2 # route add -host 172.16.14.1 dev lo:0 R1 # route add -host 172.16.14.1 dev lo:0 director # route add -host 172.16.14.1 dev eth0:0 ipvsadm # ipvsadm -A -t 172.16.14.1:80 -s wlc # ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.5 -g -w 2 # ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.6 -g -w 1