LVS之TUN原理、安装、调试

LVS之TUN工作原理:
(1)IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行第二次封装,这样这个报文就可以发送到一个指定的目标主机上;
(2)VS/TUN模式下,调度器和后端服务器组之间使用IP隧道技术。当客户端发送的请求(CIP-->VIP)被director接收后,director修改该报文,加上IP隧道两端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标;
(3)当后端服务器接收到报文后,首先解封报文得到原有的CIP-->VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包。
(4)当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端;在后端服务器返回给客户端数据包时,由于使用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址,例如是RIP。因此,要让响应数据包的源IP为VIP,必须添加一条特殊的路由条目,明确指定该路由的源地址是VIP。

环境要求:
1)Real Server的RIP和director的DIP不用处于同一物理网络中,且RIP必须可以和公网通信。也就是说集群节点可以跨互联网实现。
(2)real server的 tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。
(3)director给realserver时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP。而realsever响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP。这样客户端就无法区分这个VIP到底是director的还是服务器组中的。
(4)需要添加一条特殊的路由条目,使得后端服务器返回响应给客户端时的源IP为VIP。
(5)director只处理入站请求,响应请求由realserver完成。

就近问题优化:
 一般来说,VS/TUN模式会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同网络环境,可以就近返回数据给客户端。在请求对象不能在Cache服务器本地命中的情况下,Cache服务器要向源服务器发请求,将结果取回,最后将结果返回给客户。


192.168.187.150 vip tunl0
192.168.187.151 director
192.168.187.152 realA
192.168.187.153 realB

1、配置隧道IP地址
[root@director ~]# more /etc/sysconfig/network-scripts/ifcfg-tunl0 
DEVICE=tunl0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.187.150
NETMASK=255.255.255.0

[root@realA ~]# more /etc/sysconfig/network-scripts/ifcfg-tunl0
DEVICE=tunl0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.187.150
NETMASK=255.255.255.0

[root@realB ~]# more /etc/sysconfig/network-scripts/ifcfg-tunl0
DEVICE=tunl0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.187.150
NETMASK=255.255.255.0

2、在两台real服务器上执行:
因为隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时,由于客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。

[root@realA ~]# more /etc/sysctl.conf |grep -v "^#"|grep -v "^$"
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_announce = 2
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
[root@realA ~]# sysctl -p

[root@realA ~]# sysctl -a|grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.eth1.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.tunl0.arp_filter = 0

[root@realB ~]# more /etc/sysctl.conf |grep -v "^#"|grep -v "^$"
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_announce = 2
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
[root@realB ~]# sysctl -p

[root@realB ~]# sysctl -a|grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.eth1.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.tunl0.arp_filter = 0


3、在转发服务器上执行
[root@director ~]# ipvsadm -C   #清除之前的策略
[root@director ~]# ipvsadm -A -t 192.168.187.150:80 -s rr #添加轮询算法
[root@director ~]# ipvsadm -a -t 192.168.187.150:80 -r 192.168.187.152 -i   #-i表示是tunl模式,-g是DR模式 -m是nat模式
[root@director ~]# ipvsadm -a -t 192.168.187.150:80 -r 192.168.187.153 -i

[root@director ~]# 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.187.150:80 rr
  -> 192.168.187.152:80           Tunnel  1      0          0         
  -> 192.168.187.153:80           Tunnel  1      0          0         
[root@director ~]# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值