首页 » Linux » 使用LVS实现负载均衡原理及安装配置之TUN模式

使用LVS实现负载均衡原理及安装配置之TUN模式

 

在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

55

LVS-Tun模型特性

  • RIP、VIP、DIP全是公网地址
  • RS的网关不会也不可能指向DIP
  • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
  • 不支持端口映射
  • RS的系统必须支持隧道

其实企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便,后边实践中会总结 DR 和 NAT 具体使用配置过程。

TUN模式的概述与工作原理

TUN模式服务概述:

     IP Tunneling(IP隧道) --可以在不同地域,不同网段

     Director分配请求到同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LANWAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意丿。服务器必须拥有正式的公网IP地址用不客户机直接通信,并且所有服务器必须支持IP隧道协议。

 

LVS DR 模式工作原理: 封装IP

virtual server via ip tunneling模式:采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道广播转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
VS/TUN的工作流程图如下所示,它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
Tunnel原理流程图:

   DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现

wKioL1gQoNvCetNTAAGRyGMHIYg488.png-wh_50

 

一:实验目标

1:正确理解TUN的工作原理  

2:使用LVS+TUN搭建集群实现负载均衡

3:使用webbench测试LVS-TUN集群性能

 

二:精简版实验拓扑图:

 

wKioL1gQoO2S7wp-AADbt3vDNGo799.png-wh_50

 

三:实验环境

1准备3台

 

2iptables -F , 清除规则

3selinux关闭

4:red had 6.5版本 64位操作系统

 

四:实验代码

分发器-xuegod63

1配置网络:

 

2配置 LVS TUN模式

 

 

RealServer: xuegod62

1配置DIP:

配置 eth0的 RIP为: 192.168.1.62

[root@xuegod62 ~]# modprobe ipip #在加载好ipip模块后就会有默认的tunl0隧道。

注,如果没有在此处手加载,那么使用ifconfig tunl0 时,会自加载ipip隧道模块。 使用 ifconfig查看。没有tun0 ,加参数-a 时,查看可以看到tun0

 

 

2:配置VIP: 生成ifcfg-tunl0配置文件:

 

3关闭ARP转发。 永久生效:

 

# tunl0/rp_filter 默认为1 , 需要改为0,关闭此功能。Linux的rp_filter用实现反向过滤技术,也即uRPF,它验证反向数据包的流向,以避免伪装IP攻击 。 然而,在LVS TUN 模式中,我们的数据包是有问题的,因为从realserver eth0 出去的IP数据包的源IP地址应该为192.168.1.62,而是VIP地址。所以必须关闭返一项功能。 DR和TUN在 网络层实际上使用了一个伪装IP数据包的功能。让client收到数据包后,迒回的请求再次转给分发器。

echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter #返个值默认就是0,此功能就是关闭的。所以在LVS DR模式中,需要修改返一样内核参数

 

4, 配置web服务器

 

RealServer: xuegod64

1::配置DIP地址:

配置eth0 RIP 192.168.1.64

 

 

2:生成ifcfg-tunl0配置文件:

 

 

3关闭ARP转发。

 

 

4,配置web服务器

 

测试:

测试VIP:

wKioL1gQoQGhWTaLAABEvXW5Ljo752.png-wh_50

 

注:能在分发器上直接测试,需要去其他机器上测试

 

 

NAT/DR/IPIP比较
模式与特点 NAT模式 IPIP模式  DR模式
对服务器的要求 服务节点可以使任何操作系统 必须支持IP隧道,目前只有Linux系统支持 服务器节点支持虚拟网卡设备,能够禁用设备的ARP响应
网络要求 拥有私有IP地址的局域网络 拥有合法IP地址的局域,网或广域网 拥有合法IP地址的局域,服务器节点与负载均衡器必须在同一个网段
通常支持节点数量 10到20个,根据负载均衡器的处理能力而定 较高,可以支持100个服务节点 较高,可以支持100个服务节点
网关 负载均衡器为服务器节点网关 服务器的节点同自己的网关或者路由器连接,不经过负载均衡器 服务节点同自己的网关或者路由器连接,不经过负载均衡器
服务节点安全性 较好,采用内部IP,服务节点隐蔽 较差,采用公用IP地址,节点安全暴露 较差,采用公用IP地址,节点安全暴露
IP要求 仅需要一个合法的IP地址作为VIP地址 除了VIPO地址外,每个服务器界定啊需要拥有合法的IP地址,可以直接从路由到客户端 除了VIP外,每个服务节点需拥有合法的IP地址,可以直接从路由到客户端
特点 地址转换 封装IP 修改MAC地址
配置复杂度 简单 复杂 复杂

 

三种模式下的简单压力测试

简单的压力测试采用Apache ab命令,500并发用户,10w的请求总数。

[root@xuegod62 ~]# rpm -qf which ab

httpd-tools-2.2.15-15.el6.x86_64

结果如下:

LVS模式   总耗时(s)    TPS(#/sec)    TPS(Transaction Per Second)   每秒系统处理事务的数量

NAT         22.          480               4448.                          34

TUNNEL      10.          707               9339.                          80

DR          10.          177               9825.                          68

#可以看出NAT性能要比后两种差一倍。

 

使用webbench测试网站性能

网站压力测试工具-Webbench

webbench简介:

    Webbench是有名的网站压力测试工具,它是由 Lionbridge公司(http://www.lionbridge.com)开发的网站压力测试工具,它能测试处在相同硬件上,同服务的性能以及同硬件上同一个服务的运行状况。webbench但能具有便准静态页面的测试能力,能对态页面(ASP,PHP,JAVA,CGI)行测试的能力。

官网:http://www.lionbridge.com

 

二:在xuegod64上下载并安装webbench:

 

:进行压力测试:在xuegod64上行测试

[root@xuegod64 webbench-1.5]# webbench -h

参数: -c为客户端数,-t为时间(秒)

 

例1:当为1个客户端时,持续访问1秒。

[root@xuegod64 ~]# webbench -c 1 -t 1 http://192.168.1.63/index.html

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.63/index.html

1 client, running 1 sec.

Speed=38219 pages/min, 178080 bytes/sec.  #当只有一个客户端时,一分钟可以响应38219个页面,1秒可以传输178080字节

Requests: 637 susceed, 0 failed.  #1个客户端,1秒产生了637个请求,0个失败。

 

例2:使用20个客户端并发访问并持续访问10秒

[root@xuegod64 ~]# webbench -c 20 -t 10 http://192.168.1.63/index.html

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.63/index.html

20 clients, running 10 sec.

Speed=397356 pages/min, 1854384 bytes/sec.

Requests: 66226 susceed, 0 failed.

 

同时查看xuegod64上机器性能:

wKioL1gQoAvDNEkGAABVTdHY3G4505.png-wh_50

3: 当并发为800时持续时间60秒: 

[root@xuegod64 ~]#webbench -c 800 -t 60 http://192.168.1.63/index.html

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL OpenSource Software.

Benchmarking: GET http://www.linuxidc.com/index.php

800 clients, running 60 sec.

Speed=39571 pages/min, 33104224 bytes/sec.

Requests: 38576 susceed, 995 failed.

 

四:测试注意事项:

1:压力测试工作应该放到产品上线之前,而是上线以后;

2webbench 做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将 webbench 安装在别的服务器上;

3:测试时尽量跨公网迕行,而是内网; 如果带宽够时,可以内网测试。

4:测试时并发应当由小逐渐加大,观察一下网站负载及打开是否流畅,直到网站打开缓慢甚至网站完全打开; 可以一边在linux测试,一个在浏览上打开,查看是否流畅。

5:应尽量行单元测试,如B2C网站可以着重测试购物车、推广页面等,因为返些页面占整个网站访问量比重较大。 

原文链接:使用LVS实现负载均衡原理及安装配置之TUN模式,转载请注明来源!

0