全部博文(252)
分类:
2010-05-20 10:34:33
引用: |
跟
VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地
提高整个集群系统的吞吐量。该方法与IBM的NetDispatcher产品中使用的方法类似,但IBM的NetDispatcher是非常昂贵的商品化
产品,我们也不知道它内部所使用的机制,其中有些是IBM的专利。 VS/DR的体系结构如图3.6所示:调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。(请看注释1) 图3.6:VS/DR的体系结构 VS/DR的工作流程如图3.7所示:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。(请看注释2)因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。 图3.7:VS/DR的工作流程 在VS/DR中,请求报文的目标地址为VIP,响应报文的源地址也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。 VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。 |
注释1:VIP地址为调度器和服务器(RealServer)把共享,那会不会引起IP冲突?答案是:不会。正因为后面所说的,“调度器配
置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的”。在调
度器上,VIP与其局域网内IP对外都是可见的;在服务器上,对外可见的是其在局域网上的IP(调度器调度的时候使用的IP),而在服务器上,VIP的性
质就像是平常我们所熟知的127.0.0.1的性质一样,它是一个loopback
device,他只在网络层之上可见(包括网络层),这样的loopback
device用来模拟网络适配器的行为。就算没有装网卡,127.0.0.1与VIP的这样IP都是可用的。
那为什么要在服务器上还放上一个VIP呢?
因为当只修改了MAC地址的链路层帧发到服务器的链路层时(详情请见注释2),要想再向上提交到应用层去让HTTP等服务器程序处理,必须再经过网络层、传输层等,而要通过这些层是要经过目标IP的检测的。
就像你要去参加一个婚礼,到门口,接待人员问你要参加谁的婚礼,人家这里明明举行的是李湘跟王老五的婚礼,你说你要参加谢霆锋跟张柏芝的婚礼,接待人员一定是不让你进去的。
那
我就是又要说我要参加谢霆锋跟张柏芝的婚礼,以要进入李湘跟王老五的婚礼现场,怎么办?那就在李湘跟王老五的婚礼现场里安排一个自己人,你到时候对他说:
“我要参加谢霆锋跟张柏芝的婚礼”,他会意地笑一声,就会帮你在李湘跟王老五的婚礼现场安排座位,让你在里面享受各种服务。
服务器里的VIP就有这个自己人的性质,他对外不可见,当请求包到达网络层以上的部分里,就可以看到VIP,从而一路上去,到达应用层,享用HTTP等服务。
原理如图(IPVS有没有到网络层?)
注
释2:在这里可能有人会产生疑问,修改MAC地址就能让请求包发往Real
Server上吗,不用改目标IP地址?答案是:是的。因为交换机是一个链路层的设备,链路层的传送单位是帧,他可不管网络层的包里放的是什么IP地址
(网络层的ipv4包已经被封装在帧里)。当Direcotr把存有客户机的请求包的那帧的MAC地址改成某台Real
Server的之后,就发出去,到交换机之后,交换机查找MAC地址与端口的对应表(端口MAC地址对应拥有些MAC地址的计算机),将这一帧发往与帧上
MAC地址对应的端口,之后就发到计算机的链路层,如果MAC地址与网卡上的匹配,再向上层发送,直至应用层。
现在俺们来一步一步地在局域网内配置LVS。
代码: |
ifconfig eth0 192.168.11.1 netmask 255.255.255.0 broadcast 192.168.11.255 |
代码: |
rpm ivh *.rpm |
代码: |
ipvsadm –C ipvsadm -A -t 192.168.11.200:80 -s wlc ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.21 -g ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.22 -g ipvsadm -Ln |
代码: |
DEVICE=e th 0 : 0 ONBOOT=y e s BOOTPROTO= s t a t i c IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0 NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 BROADCAST= 1 9 2 . 1 6 8 . 11 . 255 |
代码: |
DEVICE=e th 0 ONBOOT=y e s BOOTPROTO= s t a t i c IPADDR= 1 9 2 . 1 6 8 . 11 .10 NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 BROADCAST= 1 9 2 . 1 6 8 . 11 . 255 |
代码: |
/etc/rc.d/init.d/network restart |
代码: |
… #f o r i p v s n e t . ip v 4 . c o n f . l o . a r p i g n o r e = 1 n e t . ip v 4 . c o n f . l o . a rp announ c e = 2 n e t . ip v 4 . c o n f . a l l . a r p i g n o r e = 1 n e t . ip v 4 . c o n f . a l l . a rp announ c e = 2 n e t . ip v 4 . c o n f . d e f a u l t . r p f i l t e r = 1 #end o f i p v s … |
代码: |
DEVICE=e th 0 ONBOOT=y e s BOOTPROTO= s t a t i c IPADDR= 1 9 2 . 1 6 8 . 11 . 21 NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 0 BROADCAST= 1 9 2 . 1 6 8 . 11. 2 5 5 |
代码: |
DEVICE=l o : 0 ONBOOT=y e s IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0 NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 |
代码: |
/etc/rc.d/init.d/network restart |
代码: |
… #f o r i p v s n e t . ip v 4 . c o n f . l o . a r p i g n o r e = 1 n e t . ip v 4 . c o n f . l o . a rp announ c e = 2 n e t . ip v 4 . c o n f . a l l . a r p i g n o r e = 1 n e t . ip v 4 . c o n f . a l l . a rp announ c e = 2 n e t . ip v 4 . c o n f . d e f a u l t . r p f i l t e r = 1 #end o f i p v s … |
代码: |
DEVICE=e th 0 ONBOOT=y e s BOOTPROTO= s t a t i c IPADDR= 1 9 2 . 1 6 8 . 11 . 22 NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 0 BROADCAST= 1 9 2 . 1 6 8 . 11. 2 5 5 |
代码: |
DEVICE=l o : 0 ONBOOT=y e s IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0 NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5 |
代码: |
/etc/rc.d/init.d/network restart |