lvs-dr:直接路由 Director在实现转发时不修改请求的IP首部,而是通过直接封装MAC首部完成转发;目标MAC是Director根据调度方法挑选出某RS的MAC地址;拓扑结构有别有NAT类型; 架构特性: (1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Director 解决方案: 静态绑定:在前端路由直接将VIP对应的目标MAC静态配置为Director的MAC地址; arptables:在各RS上,通过arptables规则拒绝其响应对VIP的ARP广播请求; 内核参数:在RS上修改内核参数,并结合地址的配置方式实现拒绝响应对VIP的ARP广播请求; (2) RS的RIP可以使用私有地址;但也可以使用公网地址,此时可通过互联网上的主机直接对此RS发起管理操作; (3) 请求报文必须经由Director调度,但响应报文必须不能经由Director; (4) 各RIP必须与DIP在同一个物理网络中; (5) 不支持端口映射; (6) RS可以使用大多数的OS; (7) RS的网关一定不能指向Director; (1) 各RS要直接响应Client,因此,各RS均得配置VIP;但仅能够让Director上的VIP能够与本地路由直接通信; (2) Director不会拆除或修改请求报文的IP首部,而是通过封闭新的帧首部(源MAC为Director的MAC,目标MAC为挑选出的RS的MAC)完成调度; 2.4.26, 2.6.4 kernel引入了两个内核参数: arp_announce:定义arp通知级别; arp_ignore:定义arp忽略arp请求或arp通告的级别; /proc/sys/net/ipv4/conf/INTERFACE
node3
在/proc/sys/net/ipv4/conf下
1,修改两个接口,all和lo
[root@node3 conf]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node3 conf]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node3 conf]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node3 conf]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node3 conf]# sysctl -a | grep arp
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
2,添加lo:0地址,
[root@node3 ~]# ifconfig lo:0 172.16.100.202 netmask 255.255.255.255 broadcast 172.16.100.202 up
[root@node3 ~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:172.16.100.202 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
3,添加路由,如果你访问的地址是172.16.100.202,要求必须通过lo:0进出
[root@node3 ~]route add -host 172.16.100.202 dev lo:0
4,启动httpd,创建测试页面
node2
1,修改两个接口,all和lo
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node2 ~]# sysctl -a | grep arp
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
2,添加lo:0地址
[root@node2 ~]# ifconfig lo:0 172.16.100.202 netmask 255.255.255.255 broadcast 172.16.100.202 up
[root@node2 ~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:172.16.100.202 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
3,添加路由,如果你访问的地址是172.16.100.202,要求必须通过lo:0进出
[root@node2 ~]route add -host 172.16.100.202 dev lo:0
4,启动httpd,创建测试页面
node1
1,添加eht1:0地址,(仅对自己访问,广播域broadcast限制)
root@node1 ~]# ifconfig eth1:0 172.16.100.202 netmask 255.255.255.255 broadcast 172.16.100.202 up
[root@node1 ~]# ifconfig eth1:0
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:78:10:11
inet addr:172.16.100.202 Bcast:172.16.100.202 Mask:255.255.255.255
2,清空ipvsadm配置
[root@node1 ~]# ipvsadm -C
3,清空iptables配置
[root@node1 ~]# iptables -F
4,给本机添加路由指向
[root@node1 ~]# route add -host 172.16.100.202 dev eth1:0
5,开启网卡转发
[root@node1 ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
6,添加集群服务,-s指明调度方法rr
[root@node1 ~]# ipvsadm -A -t 172.16.100.202:80 -s rr
7,添加172.16.100.202:80的客户端服务器172.16.249.157,类型为-g DR,权重为5
[root@node1 ~]# ipvsadm -a -t 172.16.100.202:80 -r 172.16.249.157 -g -w 5
8,添加172.16.100.202:80的客户端服务器172.16.249.186,类型为-g DR,权重为1
[root@node1 ~]# ipvsadm -a -t 172.16.100.202:80 -r 172.16.249.186 -g -w 1
其实在dr中,权重是无任何意义的
[root@node1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.100.202:80 rr
-> 172.16.249.157:80 Route 5 0 0
-> 172.16.249.186:80 Route 1 0 0
[root@node1 ~]#
客户端:
在客户机arp -a 查看两个ip地址的mac地址
172.16.100.202 00-0c-29-78-10-11
172.16.249.117 00-0c-29-78-10-11
浏览器测试
不同ip直接构建,需要现将网络打通,其他便简单
[root@node3 ~]# ifconfig eth2 192.168.0.101/24 up
[root@node3 ~]# route add default gw 192.168.0.254
[root@node2 ~]# ifconfig eth2 192.168.0.102/24 up
[root@node2 ~]# route add default gw 192.168.0.254
[root@node1 ~]# ifconfig eth1 192.168.0.100/24 up
[root@node1 ~]# ipvsadm -A -t 172.16.100.202:80 -s rr
[root@node1 ~]# ipvsadm -a -t 172.16.100.202:80 -r 192.168.0.101 -g -w 1
[root@node1 ~]# ipvsadm -a -t 172.16.100.202:80 -r 192.168.0.102 -g -w 3
[root@node1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.100.202:80 rr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 3 0 0
[root@node1 ~]#