Virtual Server via IP Tunneling
在VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统,我们没对其他操作系统进行测试。因为“IP Tunneling”正成为各个操作系统的标准协议,所以VS/TUN应该会适用运行其他操作系统的后端服务器。
一.环境配置
server1 (调度器)IP:172.25.0.116
server2 (服务器)IP:172.25.0.117
server3 (服务器)IP:172.25.0.118
1.在server1中设置如下:
modprobe ipip 加载隧道模块,ip addr出现tunl0网卡
Linux系统内核实现的IP隧道技术主要有三种(PPP、PPTP和L2TP等协议或软件不是基于内核模块的):ipip、gre、sit 。这三种隧 道技术都需要内核模块 tunnel4.ko 的支持。ipip 需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道 转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以 上溯到1.3版的内核。据网上查到信息,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。
ip link set up tunl0 #启用网卡
ip addr add 172.25.0.120/24 dev tunl0 #给网卡添加ip
2.server1写入策略
ipvsadm -A -t 172.25.0.120:80 -s rr
ipvsadm -a -t 172.25.0.120:80 -r 172.25.0.117:80 -i #-m表示tun模型
ipvsadm -a -t 172.25.0.120:80 -r 172.25.0.118:80 -i
在server2中设置如下:
安装arptables_jf包
添加策略(arptables -nL查看策略)
arptables -A IN -d 172.25.0.120:80 -j DROP ##不缓存ip的MAC地址
arptables -A OUT -s 172.25.0.120:80 -j mangle --mangle-ip-s 172.25.0.120 ##mangle是转换
ip link set up tunl0 #启用网卡
ip addr add 172.25.28.100/24 dev tunl0 #给网卡添加ip
server3中同样进行server2中的操作
测试:在client访问vip实现了轮询