调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,即通过交换机或者高速的HUB相连,中间没有隔有路由器。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
在VS/DR中,请求报文的目标地址为VIP,响应报文的源地址也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
DR模式的网络有2种连接方式:
1、一种是RIP和DIP和VIP在一个网段内,也就是都是公网地址。
2、RIP和DIP属于同一网段,属于私网,VIP属于公网。RIP和DIP网关指向可以路由去上网的的地址。(貌似没说对)
下面这幅图是第一种方法
工作流程说明:
客户端访问VIP,由director接收处理,选择调度相应的web服务器,服务器处理后直接返回给客户端。
因此,real server的网关需指向A地址。
1、地址规划
2、地址配置
real server的VIP不能响应广播报文,也不能让其它接口把自己通告出去,也就是存在就行,不要出门和别人打招呼。
director
[root@filesystem ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.94.132 netmask 255.255.255.0 broadcast 192.168.94.255 inet6 fe80::93e8:3599:36a8:58bf prefixlen 64 scopeid 0x20<link> ether 00:0c:29:a3:92:45 txqueuelen 1000 (Ethernet) RX packets 10619 bytes 10402504 (9.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 3046 bytes 357957 (349.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@filesystem ~]# ifconfig ens33:0 192.168.94.200 netmask 255.255.255.0 [root@filesystem ~]#
web1
不能从接口将VIP广播出去,也不要在接口上应答VIP网络的请求。
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore [root@node1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@node1 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce [root@node1 ~]# ifconfig lo:0 192.168.94.200 netmask 255.255.255.255 broadcast 192.168.94.200 [root@node1 ~]#
web2
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore [root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce [root@node2 ~]# ifconfig lo:0 192.168.94.200 netmask 255.255.255.255 broadcast 192.168.94.200 [root@node2 ~]#
测试
我们用客户端ping一下VIP地址,然后arp –a 查看mac地址表,与director的mac对应,现在web1和web2实现了VIP不对外通告也不应答。
3、路由配置
客户端请求报文的源地址和目标地址为CIP和VIP,回应报文的源地址和目标地址应该是VIP和CIP。
默认情况回应报文会使用出接口的地址,也就是134、135、132等,不会使用VIP地址,我们需要增加一条路由,如果请求的目标IP是VIP,那么出去的数据包源地址也显示为VIP。
命令:route add –host $VIP dev VIP的接口
director
[root@filesystem ~]# route add -host 192.168.94.200 dev ens33:0 [root@filesystem ~]#
web1和web2
[root@node1 ~]# route add -host 192.168.94.200 dev lo:0 [root@node1 ~]#
[root@node2 ~]# route add -host 192.168.94.200 dev lo:0 [root@node2 ~]#
4、ipvsadm规则配置
我们对web服务使用负载分担,real server上的httpd服务配置这里就省略了。
[root@filesystem ~]# curl http://192.168.94.134 this is web1 is node1 [root@filesystem ~]# curl http://192.168.94.135 this is web2 is node2 [root@filesystem ~]#
规则配置
[root@filesystem ~]# ipvsadm -A -t 192.168.94.200:80 -s rr [root@filesystem ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.134:80 -g [root@filesystem ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.135:80 -g [root@filesystem ~]# ipvsadm -l -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.94.200:80 rr -> 192.168.94.134:80 Route 1 0 0 -> 192.168.94.135:80 Route 1 0 0 [root@filesystem ~]#
5、结果测试
测试发现rr轮询的调度算法可以使用,实现了LVS的DR模型
读书和健身总有一个在路上