«

Lvs - TUN模式

指尖二进制 • 1 年前 • 806 次点击 • LB


[TOC]

一:LVS-IP TUN集群概述

DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网。(有一个好处是可以分布式不是集群)

异地机房的好处:容灾
但是不能保证边界最近访问到对应的realserver,这是最大的问题
对于RS来讲在DR模式虚IP绑在回环接口上,对于TUN模式来讲这个虚IP要绑在隧道接口上。对于RS和lvs之间采取的是隧道连接进行通信。隧道就是从互联网上的带宽划分出来一部分容量,来保障AD两点之间的数据传输。

二:配置LVS-IP TUN集群

精简版实验拓扑图:

2.1:director:192.168.19.11配置成分发器

1:配置ip

[root@director ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.19.11
NETMASK=255.255.255.0
[root@director ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33:1
BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.19.50
NETMASK=255.255.255.0

2:配置LVS-TUN模式
-i 隧道模式

[root@director ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm 
[root@director ~]# ipvsadm -C
[root@director ~]# ipvsadm -A -t 192.168.19.50:80 -s rr
[root@director ~]# ipvsadm -a -t 192.168.19.50:80 -r 192.168.19.200 -i
[root@director ~]# ipvsadm -a -t 192.168.19.50:80 -r 192.168.19.220 -i
[root@director ~]# 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.19.50:80 rr
  -> 192.168.19.200:80            Tunnel  1      0          0
  -> 192.168.19.220:80            Tunnel  1      0          0

设置会话保持时间短一些(可做可不做。只不过就是浏览器刷新的速度快了一些)

[root@director ~]# ipvsadm --set 1 1 1

2.2:RealServer1配置

1:ip配置

[root@realserver1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.19.200
NETMASK=255.255.255.0

2:配置vip并加载ipip模块后就会有默认的tunl0隧道。
注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块

[root@realserver1 ~]# modprobe ipip
[root@realserver1 ~]# ifconfig -a|tail -n 7     #使用ifconfig查看。没有tun0,加参数-a时,查看可以看到tun0
tunl0: flags=128<NOARP>  mtu 1480
        tunnel   txqueuelen 1  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

查看是否支持tun模式

[root@realserver1 ~]# lsmod|grep ipip
ipip                   13465  0 
tunnel4                13252  1 ipip
ip_tunnel              25163  1 ipip

配置VIP:
生成ifcfg-tunl0配置文件:

[root@realserver1 ~]# ifconfig tunl0 192.168.19.50 netmask 255.255.255.255 up 
[root@realserver1 ~]# ifconfig -a|tail -n 8
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 1480
        inet 192.168.19.50  netmask 255.255.255.255
        tunnel   txqueuelen 1  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@realserver2 ~]# /etc/init.d/network restart

3:关闭ARP转发
永久生效:
分发器和realserver都有一个vip而且是一样的。一个数据包丢过去目标地址是vip。分发器把这个包丢给realserver,如果realserver没有vip那他不会处理这个包。但是配置了多个相同的ip就要把arp给关掉。

[root@realserver1 ~]# 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@realserver1 ~]# sysctl -p

4:配置web服务器

[root@realserver1 ~]# yum install -y httpd
[root@realserver1 ~]# echo "192.168.20.200" > /var/www/html/index.html
[root@realserver1 ~]# systemctl restart httpd

2.3:RealServer2配置

1:ip配置

[root@realserver2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.19.220
NETMASK=255.255.255.0

2:配置vip并加载ipip模块后就会有默认的tunl0隧道。
注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块

[root@realserver2 ~]# modprobe ipip
[root@realserver2 ~]# ifconfig -a|tail -n 7
tunl0: flags=128<NOARP>  mtu 1480
        tunnel   txqueuelen 1  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

查看是否支持tun模式

[root@realserver2 ~]# lsmod|grep ipip
ipip                   13465  0 
tunnel4                13252  1 ipip
ip_tunnel              25163  1 ipip

配置VIP:
生成ifcfg-tunl0配置文件:

[root@realserver2 ~]# ifconfig tunl0 192.168.19.50 netmask 255.255.255.255 up 
[root@realserver2 ~]# ifconfig -a|tail -n 8
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 1480
        inet 192.168.19.50  netmask 255.255.255.255
        tunnel   txqueuelen 1  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@realserver2 ~]# /etc/init.d/network restart

3:关闭ARP转发
永久生效:
分发器和realserver都有一个vip而且是一样的。一个数据包丢过去目标地址是vip。分发器把这个包丢给realserver,如果realserver没有vip那他不会处理这个包。但是配置了多个相同的ip就要把arp给关掉。

[root@realserver2 ~]# 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@realserver1 ~]# sysctl -p

4:配置web服务器

[root@realserver2 ~]# yum install -y httpd
[root@realserver2 ~]# echo "192.168.20.220" > /var/www/html/index.html
[root@realserver2 ~]# systemctl restart httpd

2.4:客户端测试

[root@client ~]# elinks 192.168.19.200 --dump
   192.168.20.200
[root@client ~]# elinks 192.168.19.220 --dump
   192.168.20.220

访问vip进行测试

[root@client ~]# elinks 192.168.19.50 --dump
   192.168.20.200
[root@client ~]# elinks 192.168.19.50 --dump
   192.168.20.220
[root@client ~]# elinks 192.168.19.50 --dump
   192.168.20.200
[root@client ~]# elinks 192.168.19.50 --dump
   192.168.20.220

三:三种模式比较

NAT/DR/TUN比较


三种模式下的简单压力测试并对比。可以先做nat再做dr再做tun
简单的压力测试采用Apache ab命令,500并发用户,10w的请求总数。

[root@client ~]# rpm -qf `which ab`
httpd-tools-2.4.6-67.el7.centos.x86_64

自己进行测试一下吧。

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

4.1:webbench简介:

Webbench是有名的网站压力测试工具,它是由 Lionbridge公司(http://www.lionbridge.com)开发的网站压力测试工具,它能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力
官网:http://www.lionbridge.com

4.2:安装

[root@client ~]# tar fx webbench-1.5.tar.gz 
[root@client ~]# cd webbench-1.5
[root@client webbench-1.5]# mkdir -p /usr/local/man/man1 
[root@client webbench-1.5]# make 
[root@client webbench-1.5]# yum install -y gcc gcc-c++
[root@client webbench-1.5]# yum install -y ctags
[root@client webbench-1.5]# make install 

4.3:进行压力测试(测试的整个集群)

测试参数解释:
-c为客户端数,-t为时间(秒)
当为1个客户端时,持续访问1秒。

[root@client webbench-1.5]# webbench -c 1 -t 1 http://192.168.19.50/index.html
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.19.50/index.html
1 client, running 1 sec.

Speed=27119 pages/min, 123848 bytes/sec.
#当只有一个客户端时,一分钟可以响应27119个页面,1秒可以传输123848字节

Requests: 452 susceed, 0 failed.
#1个客户端,1秒产生了452个请求,0个失败。

使用20个客户端并发访问并持续访问10秒

[root@client webbench-1.5]# webbench -c 20 -t 10 http://192.168.19.50/index.html
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.19.50/index.html
20 clients, running 10 sec.

Speed=122892 pages/min, 561206 bytes/sec.
Requests: 20482 susceed, 0 failed.

在realserver1和realserver2上实时监测。查看系统性能是否上去了。

[root@realserver1 ~]# vmstat 1 #1秒刷新一次
[root@realserver2 ~]# vmstat 1 #1秒刷新一次

使用800个客户端并发访问并持续访问60秒

[root@client webbench-1.5]# webbench -c 800 -t 60 http://192.168.19.50/index.html
[root@client webbench-1.5]# webbench -c 800 -t 60 http://192.168.19.50/index.html
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.19.50/index.html
800 clients, running 60 sec.

Speed=132690 pages/min, 603580 bytes/sec.
#当有800客户端时,一分钟可以响应132690个页面,1秒可以传输603580字节

Requests: 132144 susceed, 546 failed.
#800个客户端,1秒产生了132144个请求,546个失败。

五:测试注意事项

1.压力测试工作应该放到产品上线之前,而不是上线以后;
2.webbench 做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将 webbench 安装在别的服务器上;
3.测试时尽量跨公网进行,而不是内网; 如果带宽不够时,可以内网测试。
4.测试时并发应当由小逐渐加大,观察一下网站负载及打开是否流畅,直到网站打开缓慢甚至网站完全打不开; 可以一边在linux测试,一个在浏览上打开,查看是否流畅。
5.应尽量进行单元测试,如B2C网站可以着重测试购物车、推广页面等,因为这些页面占整个网站访问量比重较大。

还没收到回复