目标地址转换,即所有客户端的请求都被Director根据访问请求和算法被定向到后台的Real Server 上,后台的Real Server回应客户端的数据包也要经过Director返回给客户端,地址转换过程如图5-1所示:
图5-1
LVS-NAT特性:
1、Director和Real Server必须在同一个网段中;
2、一般情况下,RIP是私有地址,只用于集群内部节点间通信;
3、Director 会响应所有的请求在客户端和Real Server之间,所承担的负载较大;
4、所有的Real IP 网关必须指向DIP以响应客户端请求;
5、Director可以重映射网络端口,即前端使用标准端口,后端使用非标准端口;
6、后台的Real Server可以使用任何操作系统;
7、Director可能会成为系统瓶颈。
LVS-NAT集群的设计及实现
拓扑如图5-2所示:
图5-2
Director : VIP 192.168.0.80
DIP 192.168.110.254
Real Server 1: RIP 192.168.10.2 网关指向:192.168.110.254
提供Web服务,测试页内容为 Web1
Real Server 2: RIP 192.168.10.3 网关指向:192.168.110.254
提供Web服务,测试页内容为 Web2
Client: 192.168.0.1 客户端
Real Server 1:
# ifconfig eth0 192.168.110.2 //为eth0 设置IP地址;
# route add default gw 192.168.110.254 //添加网关;
Real Server 2:
# ifconfig eth0 192.168.110.3 //同上;
# route add default gw 192.168.110.254 //同上;
Director:
# ifconfig eth1 192.168.110.254 //为Director 设置DIP;
# echo 1 > /proc/sys/net/ipv4/ip_forward //开启内核路由功能;
# vim /etc/sysctl.conf //修改内核参数,确保永久有效;
net.ipv4.ip_forward = 1
# sysctl -p //查看内核参数;
net.ipv4.ip_forward = 1
准备工作已经配置完毕,开始LVS-NAT的配置:
# yum install ipvsadm -y //安装ipvsadm工具;
# ipvsadm -A -t 192.168.0.80:80 -s rr //定义服务,设定算法
为服务添加Real Server并设置权重:
# ipvsadm -a -t 192.168.0.80:80 -r 192.168.110.2 -m -w 5
# ipvsadm -a -t 192.168.0.80:80 -r 192.168.110.3 -m -w 2
# ipvsadm -Ln //查看服务状态;
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.80:80 rr
-> 192.168.110.3:80 Masq 5 0 11
-> 192.168.110.2:80 Masq 2 0 12
此时,我们使用物理机访问http:192.168.0.80就会发现页面出现交替变化的情况,这是由RR算法的特性决定的。我们改变为WRR算法试试:
# ipvsadm -E -t 192.168.0.80:80 -s wrr //改为WRR调度算法;
# ipvsadm -Ln
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.80:80 wrr
-> 192.168.110.3:80 Masq 5 0 50
-> 192.168.110.2:80 Masq 2 0 21
改变为LBLC算法:
# ipvsadm -E -t 192.168.0.80:80 -s lblc
# ipvsadm -Ln
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.80:80 lblc
-> 192.168.110.3:80 Masq 5 0 100
-> 192.168.110.2:80 Masq 2 0 35
此时会发现无论客户端怎么刷新,访问页面都不会改变,这是由LBLC调度算法所决定的。
六、LVS-DR
直接路由就是客户端请求经过Director分发给Real Server后,Real Server直接回应客户端。如图6-1所示,数据包地址转换过程:
图6-1
LVS-DR特性:
1、Real Server 上必须配置VIP且需要隐藏起来,只有在响应客户端请求时才使用VIP作为源地址,除此之外并不使用此VIP;
2、集群节点和Director必须在同一个网络中;
3、RIP不要求为私有地址;
4、Director仅处理所有进来的请求;
5、Real Server 不能以DIP作为网关,而是以公网上的某台路由器作为网关;
6、Director 不能再使用端口重映射;
7、大多数操作系统可以被用来作为Real Server,windows除外;
8、LVS-DR模式可以处理比LVS-NAT更多的请求。
LVS-DR为实际生产环境中最常用的一种方式,因为RIP 为公网地址,管理员可以远程连接Real Server来查看工作状态;当Director 当掉,可以通过修改DNS记录将A记录指向RIP 继续向外提供服务。
Director分发到Real Server的过程中,数据包的源地址和目标地址都没有发生改变,Director仅仅是将目标mac地址转换成某台Real Server的mac地址,源mac地址改为Director内网网卡的mac地址。这里,我们要解决的两个技术难题:
1、Real Server要避免回应客户端发来的对VIP的arp地址解析请求;
解决方法:
修改内核的两个参数:arp_announce, arp_ignore;
arp_announce :定义不同级别:当ARP请求通过某个端口进来是否利用这个接口来回应;
0 默认级别,利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
1 避免使用另外一个接口上的mac地址去响应ARP请求;
2 尽可能使用能够匹配到ARP请求的最佳地址。
arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应;
0 默认级别,利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
1 哪个接口上接受ARP请求,就从哪个端口上回应。
Red Hat系统提供了arptables工具,利用arp防火墙也可以实现。
2、当Real Server内网网卡响应客户端请求时,要以VIP作为源地址,不能以RIP作为源地址。
解决方法:添加一条路由
route add -host 192.168.110.1 dev lo:0
使客户端访问VIP,就让VIP来响应客户端。这样避免了使用RIP作为源地址。