使用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/487789

相关文章

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同