1、理解:
由于DR模型director只负责分发请求,而不连入外网,外网由前段路由接入,所以前段路由、director和realserver都通过交换机链接,所以在集群内部通过MAC地址进行通信。由于Direstor双IP:VIP|别名DIP,RS双IP:RIP|别名VIP,因此在ARP广播时要限制网卡ARP响应功能,比如路由器要把保温送到VIP,做ARP广播时,只能是Director回应,而RS不能回应,解决办法:
1,在路由器绑定VIP:DirectMAC。但是这种方法有限制,如果路由设备是供应商,你怎么改?
2,借助红帽的工具arptables
3,内核2.6以后,引入了两个新的内核参数Kernel parameter:
arp_ignore 响应级别:当接收到ARP请求时是否选择响应的级别
默认0 将本机任何接口上的任何地址向外通告
1:请求的目标IP配置在对外通信接口(一般是eth0)上,才响应
2:..
3:..
arp_announce 向外通知级别:定义将自己地址主动向外通知的级别
默认0
1:本地接口地址不止一个,如果某个本地接口地址不在ARP请求的目标地址所在的子网络,就避免通告。
2:响应最佳本地地址。即只有目标地址在网络接口的通信接口上,才予以回应。即通信接口(eth0)上的地址就是目标地址,才予以响应,当然如果没匹配,还是可以有其他响应的,先理解到这就可以了
:
例如:假设一台主机,两个网卡,MAC1和MAC2
MAC1上边的网络接口有eth0,lo;IP地址配置为:eth0配置192.168.10.3/24,lo:0配置172.168.19.2/16,lo:1配置192.168.10.111/24。这里eth0和lo:1在同一子网哦
MAC2 上边就一个接口eth0配置IP 192.168.122.7/24
若arp_announce=1:我们知道如果要通信,则一定是经过eth0接口,所以,当目标请求lo:1时即,则在目标子网络中的接口有eth0,所以就会响应ARP请求;如果目标请求lo:0,则目标网络中没有eth0,所以不响应。注意到LVS-DR模型,VIP、DIP和RIP都在同一网段哦,所以设置arp_announce=1是不行的,因为RS主机上eth0上的RIP和lo:0上的VIP在同一网段,所以收到ARP广播是会响应的。
若arp_announce=2:通告最佳本地地址,即只有目标地址在网络接口的通信接口上,才予以回应。即通信接口(eth0)上的地址就是目标地址,才予以响应
再了解一个概念:
172网段主机之所以能访问192网络,因为172主机访问192主机时,192.168.10.1网卡使用172.16.100.1的MAC予以相应
再例如 一个RS主机有两个网络接口(不是两个网卡哦,说白了就是eth0和lo是两个接口,但是是同一个网卡,所以只有一个MAC,但是所有向外通信都是通过eth0这个接口),一个eth0一个lo,对吧,我们将VIP配置到lo接口的别名lo:0上,如果VIP要通信,则一定是通过eth0,对吧,也就是说当收到ARP广播请求VIP地址时,请求是通过eth0进来的,而VIP将以eth0的MAC并通过eth0予以响应,所以我们只要设置了忽略响应级别和响应级别,即设置只要请求的IP不是配置在eth0接口上,一律不予响应(arp_ignore的意义)
2、规划
注意1:响应报文的源IP设置为VIP
VIP、DIP、RIP在同一网段
Director:eth0--DIP:172.16.100.2/16;eth0:0—VIP:172.16.100.1 桥接
RS1:eth0—RIP:172.16.100.7;lo:0—VIP:172.16.100.1 桥接
RS2:eth0—RIP:172.16.100.8;lo:0—VIP:172.16.100.1 桥接
大家要在同一个交换机上,即同一个物理网络,就桥接
这里要插入一个话题,实验室后的失误:
关于试验时主机设置:血的教训
主机做client;虚拟机1做Director;虚拟机RS1;虚拟机RS2
因为DIP,RIP,VIP都要在同一个网络,所以我们的虚拟主机都要桥接
但是,桥接是和主机再同一网段,而且IP是自动分配,本人在学校,所以主机IP是由学校的路由分配的,自然的,我所有的虚拟主机开机后都是自动获取到IP,开始时实际主机能ping同所有虚拟机,但是配置好之后,就有的能通有的不能同。因为学校路由有多人连接,所以虚拟机IP会失效。
所以我想设置好主机本地连接,然后把虚拟机设置到同一网段,问题就在这,都设同一网段了,还是不能ping通。
解决方法如下:
在实际主机上添加网络设备:
添加新硬件--网络适配器--制造商--Microsoft--选择Microsoft回环适配器--下一步
然后在网络和Internet\网络连接里边看到 本地连接2,类型为Loopback Adapter
在虚拟机界面:编辑--虚拟网络编辑器--桥接到:Microsoft Loopback Adapter
然后设置本地连接2
然后在设置虚拟机到此网段,就能通信了
3,配置
配置好director,
配置好RS的RIP,不能直接先配置VIP,要先关闭arp_ignore和arp_annonce
小插曲:更改网卡配置最好认准 setup或者编辑配置文件一种,别混用,TNND,害死人。如果网卡错乱,这样试试:
#vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net",ACTION=="add", DRIVERS=="?*",ATTR{address}=="00:0c:29:79:4c:f7", ATTR{type}=="1",KERNEL=="eth*", NAME="eth0"
复制MAC,然后修改eth0
#vim/etc/sysconfig/network-scripts/ifcfg-eth0
添加网卡物理地址,设置好其它选项,重启服务,OK
实验环境完成:全部桥接,能相互ping通
实验环境完成:全部桥接,能相互ping通
(1)首先配置各个接口的arp_ignore=1和arp_announce=2
# cd /proc/sys/net/ipv4/conf/
注意要设置eth1或lo,all一定要设置,说是全局的设置,不知道为什么
#ls eth1
里边的文件和lo、all都一样,但是要设置all和eth1或lo中的一个
使用命令:
对RS的操作:
首先修改ARP参数
# sysctl -wnet.ipv4.conf.eth0.arp_announce=2
我发现这个命令跟/proc/sys/net/ipv4/conf/很像啊)
#sysctl -w net.ipv4.conf.eth0.arp_ignore=1
当然这样来看的话,echo也可以啊,直接写进去
然后配置VIP啦
# sysctl -w net.ipv4.conf.all.arp_announce=2
#sysctl -wnet.ipv4.conf.all.arp_ignore=1
实机实验:
说明:本想在自己设置的私有IP段进行实验,无赖于桥接模式虚拟机要自动获取IP到实际主机所在IP段,NND,如果自己设置了虚拟机如在172.16段,主机无论如何不能和虚拟机通信,包括主机再新建本地连接到172.16网段。没办法,只能主机现货区IP,然后虚拟机再桥接并自动获取IP,然后在此基础上进行实验。
后来又发现,只要都选择桥接,然后在直接设置虚拟机到主机的IP段内,就可以通信了。
注意啊,防火墙就是坑爹,全关了最方便,尤其是WIN7,虚拟机互相通信如果要访问服务的话也可以直接打开防火墙对应端口。#chkconfig iptables off
1,Win7:CIP:202.193.53.221(这个是主机,作client,自动获取的IP,不能手动改哦,只能修改虚拟机IP到主机网段,切记)
规划:
Director:eth0:DIP--202.193.53.11/23 eth0:0 VIP—202.193.53.10/23
RS1:eth0:RIP--202.193.53.12/23 lo:0 VIP--202.193.53.10/23
RS2:eth0:RIP--202.193.53.13/23 lo:0 VIP--202.193.53.10/23
2,#serviceiptables stop 对所有主机执行
3,配置:
Director
#ifconfig eth0 202.193.53.11/23
# ifconfig eth0:0202.193.53.10
RS1:
#ifconfig eth0 202.193.53.12/23
# sysctl -w net.ipv4.conf.eth0.arp_ignore=1
# sysctl -w net.ipv4.conf.eth0.arp_announce=2
# sysctl -w net.ipv4.conf.all.arp_ignore=1 all也要改,不知道为什么不能直接改all就可以了?
# sysctl -w net.ipv4.conf.all.arp_announce=2
# ifconfig lo:0 202.193.53.10/23
RS2:
#ifconfig eth0 202.193.53.12/23
# echo "1">/proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo "2">/proc/sys/net/ipv4/conf/eth0/arp_announce
# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 202.193.53.10/23
4,添加IPVS规则
# ipvsadm -E -t 202.193.53.10:80 -s wlc
# ipvsadm -a -t 202.193.53.10:80 -r 202.193.53.12 -g -w 3
# ipvsadm -a -t 202.193.53.10:80 -r 202.193.53.13 -g -w 1
查看一下
# ipvsadm -Ln
但是实验还是失败已经无语,下一篇成功。。。