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

2023-12-13 08:38

本文主要是介绍使用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头部来实现

wKioL1gQoNvCetNTAAGRyGMHIYg488.png-wh_50

 

一:实验目标

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

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

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

 

二:精简版实验拓扑图:

 

wKioL1gQoO2S7wp-AADbt3vDNGo799.png-wh_50

 

三:实验环境

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

 

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    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

wKioL1gQoQGhWTaLAABEvXW5Ljo752.png-wh_50


 

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

[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上机器性能:

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搭建集群实现负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/487790

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB