本文主要是介绍使用LVS+TUN搭建集群实现负载均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
TUN模式的概述与工作原理
TUN模式服务概述:
IP Tunneling(IP隧道) --可以在不同地域,不同网段
Director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意丿。服务器必须拥有正式的公网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头部来实现
一:实验目标
1:正确理解TUN的工作原理
2:使用LVS+TUN搭建集群实现负载均衡
3:使用webbench测试LVS-TUN集群性能
二:精简版实验拓扑图:
三:实验环境
1:准备3台
分发器:xuegod63 VIP:eth0:0:192.168.1.63
DIP:eth0:192.168.1.70
Real server xuegod62: RIP:eth0: 192.168.1.62
VIP:lo:1 192.168.1.63
Real server xuegod64: RIP:eth0: 192.168.1.64
VIP:lo:1 192.168.1.63
2:iptables -F , 清除规则
3:selinux关闭
4:red had 6.5版本 64位操作系统
四:实验代码
分发器-xuegod63
1:配置网络:
[root@xuegod63 ~]#ifconfig eth0 192.168.1.70
[root@xuegod63 ~]#ifconfig eth0:1 192.168.1.63
[root@xuegod63 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
2:配置 LVS TUN模式
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.25-9.el6.x86_64.rpm
[root@xuegod63 ~]# ipvsadm -C
[root@xuegod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr
[root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -i
[root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -i # -i 隧道模式
[root@xuegod63 ~]# 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.1.63:80 rr
-> 192.168.1.62:80 Tunnel 1 0 0
-> 192.168.1.64:80 Tunnel 1 0 0
RealServer: xuegod62
1:配置DIP:
配置 eth0的 RIP为: 192.168.1.62
[root@xuegod62 ~]# modprobe ipip #在加载好ipip模块后就会有默认的tunl0隧道。
注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块。 使用 ifconfig查看。没有tun0 ,加参数-a 时,查看可以看到tun0
[root@xuegod62 ~]# ifconfig -a #查看。
eth0 Link encap:Ethernet HWaddr 00:0C:29:48:80:95
tunl0 Link encap:IPIP Tunnel HWaddr
[root@xuegod62 ~]# lsmod | grep ipip
Ipip 8435 0
tunnel4 2943 1 ipip
2:配置VIP: 生成ifcfg-tunl0配置文件:
[root@xuegod62 network-scripts]# cp ifcfg-lo ifcfg-tunl0
[root@xuegod62 network-scripts]# cat ifcfg-tunl0 #写入以下内容
DEVICE=tunl0
IPADDR=192.168.1.63
NETMASK=255.255.255.0
ONBOOT=yes
NAME=tunl0
[root@xuegod62 network-scripts]# service network restart
3:关闭ARP转发。 永久生效:
[root@xuegod62 ~]# vim /etc/sysctl.conf #以文件最后添加以下内容
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@xuegod62 ~]#echo '0' > /proc/sys/net/ipv4/ip_forward
[root@xuegod62 ~]# sysctl -p
echo '1' > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo '2' > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce
echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter
# 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服务器
[root@xuegod62 ~]# yum install httpd
[root@xuegod62 ~]# echo 192.168.1.62 > /var/www/html/index.html
[root@xuegod62 ~]# service httpd restart
RealServer: xuegod64
1::配置DIP地址:
配置eth0 RIP 192.168.1.64
[root@xuegod62 ~]# modprobe ipip #在加载好ipip模块后就会有默认的tunl0隧道
[root@xuegod64 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:EF:3A:EF
tunl0 Link encap:IPIP Tunnel HWaddr
2:生成ifcfg-tunl0配置文件:
[root@xuegod64 network-scripts]# cp ifcfg-lo ifcfg-tunl0
[root@xuegod64 network-scripts]# cat ifcfg-tunl0 #写入以下内容
DEVICE=tunl0
IPADDR=192.168.1.63
NETMASK=255.255.255.0
ONBOOT=yes
NAME=tunl0
[root@xuegod64 network-scripts]# service network restart
3:关闭ARP转发。
[root@xuegod64 ~]#echo '0' > /proc/sys/net/ipv4/ip_forward
[root@xuegod62 ~]# vim /etc/sysctl.conf #以文件最后添加以下内容
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@xuegod62 ~]# sysctl -p 永久生效
4,:配置web服务器
[root@xuegod64 ~]# yum install httpd
[root@xuegod64 network-scripts]# echo 192.168.1.64 > /var/www/html/index.html [root@xuegod64 ~]# service httpd restart
测试:
测试VIP:
注:不能在分发器上直接测试,需要去其他机器上测试
[root@xuegod63 ~]# elinks --dump http://192.168.1.63/index.html #这样不行。
[root@xuegod61 ~]# elinks --dump http://192.168.1.63/index.html
[root@xuegod61 ~]# elinks --dump http://192.168.1.63/index.html
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:
[root@xuegod64 webbench-1.5]#tar zxvf webbench-1.5.tar.gz
[root@xuegod64 webbench-1.5]#cd webbench-1.5
[root@xuegod64 webbench-1.5]#make
[root@xuegod64 webbench-1.5]# mkdir -p /usr/local/man/man1 #不创建这个执行make install会报错:
[root@xuegod64 webbench-1.5]#make install
install -s webbench /usr/local/bin
install -m 644 webbench.1 /usr/local/man/man1
install -d /usr/local/share/doc/webbench
install -m 644 debian/copyright /usr/local/share/doc/webbench
install -m 644 debian/changelog /usr/local/share/doc/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上机器性能:
例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:压力测试工作应该放到产品上线之前,而不是上线以后;
2:webbench 做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将 webbench 安装在别的服务器上;
3:测试时尽量跨公网迕行,而不是内网; 如果带宽不够时,可以内网测试。
4:测试时并发应当由小逐渐加大,观察一下网站负载及打开是否流畅,直到网站打开缓慢甚至网站完全打不开; 可以一边在linux测试,一个在浏览上打开,查看是否流畅。
5:应尽量进行单元测试,如B2C网站可以着重测试购物车、推广页面等,因为返些页面占整个网站访问量比重较大。
这篇关于使用LVS+TUN搭建集群实现负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!