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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

使用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网站可以着重测试购物车、推广页面等,因为返些页面占整个网站访问量比重较大。 










本文转自 于学康 51CTO博客,原文链接:http://blog.51cto.com/blxueyuan/1866648,如需转载请自行联系原作者

相关实践学习
使用CloudLens观测ALB下的网站访问情况
通过本实验,您可搭建网站,并使用ALB进行负载均衡,同时使用CloudLens for ALB一键采集ALB日志,进行ALB 7层日志分析、秒级监控指标分析、基于AIOps的自动异常巡检等操作。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
负载均衡 网络协议 算法
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
|
14天前
|
消息中间件 负载均衡 算法
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
21 2
|
19天前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
35 1
|
2月前
|
负载均衡 Kubernetes 网络协议
如何在集群的负载均衡过程保留请求源IP
本文探讨了在Kubernetes (k8s)集群中如何确保服务获取到请求的源IP。通常,源IP可能会因网络地址转换(NAT)和代理服务器而丢失。为保留源IP,文章建议在代理服务器层添加HTTP头`X-REAL-IP`字段。在K8s中,通过设置`externalTrafficPolicy: Local`可保留源IP,但这会牺牲负载均衡。使用Ingress时,可通过配置Ingress Controller的`use-forwarded-headers`并调整ConfigMap来同时保留源IP和实现负载均衡。文章适用于对网络和K8s感兴趣的读者。
72 3
|
1月前
|
负载均衡 运维 监控
负载均衡与容错性:集群模式在分布式系统中的应用
本文由小米分享,解释了分布式系统中的集群模式。集群模式是通过组合多个服务器节点,共同提供服务,实现高可用性、负载均衡和扩展性。文章介绍了主控节点的角色及其高可用性策略,如主备模式和选举机制,并以Zookeeper为例详细阐述了其工作机制。集群模式的优势在于高可用性、负载均衡、扩展性和数据一致性,但也面临节点通信、数据一致性、故障检测和管理等挑战。最后,作者鼓励读者讨论和交流相关技术问题。
238 5
|
2月前
|
负载均衡 网络协议
NAT模式 LVS负载均衡部署
NAT模式 LVS负载均衡部署
|
2月前
|
弹性计算 负载均衡 网络协议
LVS (Linux Virtual server)集群介绍
LVS (Linux Virtual server)集群介绍
|
2月前
|
运维 负载均衡 监控
keepalived+LVS实现高可用性集群
通过结合keepalived和LVS,你可以创建一个高可用性的负载均衡集群,确保服务器的稳定性和性能。这对于托管Web服务、应用服务器等关键服务的服务器集群非常有用。
74 1
|
2月前
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
9月前
|
负载均衡 应用服务中间件 Linux
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
136 0