使用LVS+TUN搭建集群实现负载均衡
发布日期:2021-08-28 13:15:48 浏览次数:15 分类:技术文章

本文共 8055 字,大约阅读时间需要 26 分钟。

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

 

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头部来实现

 

一:实验目标

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

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

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

 

二:精简版实验拓扑图:

 

 

三:实验环境

1准备3台

分发器:xuegod63  VIP:eth0:0:192.168.1.63

                DIP:eth0192.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  

2iptables -F , 清除规则

3selinux关闭

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

 

RealServerxuegod62

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

 

RealServerxuegod64

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地址的局域,服务器节点与负载均衡器必须在同一个网段

通常支持节点数量

1020个,根据负载均衡器的处理能力而定

较高,可以支持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压力测试工作应该放到产品上线之前,而是上线以后;

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

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

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

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


转载地址:https://blog.csdn.net/weixin_33961829/article/details/85106786 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Exchange 2010设置附件大小
下一篇:使用Windows Server 2012 建立ISCSI虚拟磁盘软存储

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月17日 11时17分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 2019-04-21
下列不属于java语言特点的是_下列选项中,不属于Java语言特点的一项是( )。... 2019-04-21
java中小数的乘法_javascript的小数点乘法除法实例 2019-04-21
kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验 2019-04-21
linux shell mysql备份_linux shell 备份mysql 数据库 2019-04-21
Java双向链表时间复杂度_链表是什么?有多少种链表?时间复杂度是? 2019-04-21
unity3d能和java系统整合吗_Android与Unity3d的整合 2019-04-21
minecraft666java_我的世界的666的世界 2019-04-21
辽宁师范大学java_辽宁师范大学心理学院 2019-04-21
java程序有连接数据库_Java程序连接数据库 2019-04-21
java reduce.mdn_reduce高级用法 2019-04-21
java shape用法_Java PShape.scale方法代码示例 2019-04-21
java字符串三目_java字符串连接运算符和三目运算符 2019-04-21
java 堆内存 非堆内存_JVM 堆内存和非堆内存 2019-04-21
Java新手写什么demo_通过入门demo简单了解netty使用方法 2019-04-21
java国际化bundle_java语言国际化--ResouceBundle、struts 2019-04-21
java图片延迟加载_jQuery实现图片延迟加载 2019-04-21
java开发加入购物车功能_java web开发——购物车功能实现 2019-04-21
Java虚拟机不能满足_深入理解Java虚拟机--读书笔记1/3 2019-04-21
python 协程 asyncio_python – asyncio.as_completed是否会产生期货或协同程序? 2019-04-21