一、LVS-IP TUN集群概述

DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网。TUN模式可以解决DR模式下不能跨网段的问题,甚至可以跨公网进行

如图:

异地机房的好处: 容灾

        但是是否可以保证 边界 最近访问到对应的real server呢? 不能,这是最大的问题

        DNS view功能实现 边界最近访问。  智能DNS   大家nslookup www.baidu.com   每个人地方的ip都是不一样的

二、实战:配置LVS-IP TUN集群

精简版实验拓扑图:

A、xuegod63 配置成 Director:

1 配置网络:

eth0       DIP

eth0:1     VIP

[root@xuegod63 ~]#ifconfig eth0 192.168.1.70

[root@xuegod63 ~]#ifconfig eth0:1 192.168.1.63

[root@xuegod63 ~]#ifconfig

[root@xuegod63 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

#该文件表示是否打开IP转发。0表示禁止,1表示转发

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

B、RealServer: xuegod62

1 配置IP:

配置 eth0的  RIP为:   192.168.1.62

[root@xuegod62 ~] # lsmod | grep ipip 查看

[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

。。。

lo        Link encap:Local Loopback

。。。

tunl0     Link encap:IPIP Tunnel  HWaddr

NOARP  MTU:1480  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@xuegod62 ~]# lsmod | grep ipip

ipip                    8435  0

tunnel4                 2943  1 ipip

C、配置VIP:

1. 生成ifcfg-tunl0配置文件:

[root@xuegod62 network-scripts]# ifconfig tunl0 192.168.1.63 netmask 255.255.255.255 up

[root@xuegod62 network-scripts]# service network restart

Shutting down interface eth0:                              [  OK  ]

Shutting down interface tunl0:                             [  OK  ]

Shutting down loopback interface:                          [  OK  ]

Bringing up loopback interface:                            [  OK  ]

Bringing up interface eth0:                                [  OK  ]

Bringing up interface tunl0:                               [  OK  ]

D、 关闭ARP转发。

echo '0' > /proc/sys/net/ipv4/ip_forward
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模式中,不需要修改这一样内核参数。

永久生效:

[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

E、  配置web服务器

[root@xuegod62 ~]# yum install httpd

[root@xuegod62 ~]# echo 192.168.1.65 > /var/www/html/index.html

[root@xuegod62 ~]# service httpd restart

RealServer: xuegod64

1,配置IP地址:

配置eth0    RIP  192.168.1.64

[root@xuegod62 ~]# modprobe ipip

#在加载好ipip模块后就会有默认的tunl0隧道

配置VIP:

[root@xuegod64 ~]# ifconfig tunl0 192.168.1.63 netmask 255.255.255.255

查看:

[root@xuegod64 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:EF:3A:EF

。。。

tunl0     Link encap:IPIP Tunnel  HWaddr

inet addr:192.168.1.63  Mask:255.255.255.255

UP RUNNING NOARP  MTU:1480  Metric:1

生成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
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
ONBOOT=yes
NAME=tunl0

[root@xuegod64 network-scripts]# service network restart

关闭ARP转发。

echo '0' > /proc/sys/net/ipv4/ip_forward
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

永久生效:

[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

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

测试:

先测试realserver:

http://192.168.1.64

http://192.168.1.62

正常打开

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

[root@xuegod65 ~]# elinks 192.168.1.63 –dump

F、NAT/DR/TUN比较

比较

TUN

NAT

DR

配置复杂度

复杂

简单

复杂

拓展性

很好

支持数量

>100

<20

>100

特点

封装IP

地址转化

修改MAC

支持OS

需要支持IPIP隧道

Any

大部分

三种模式下的简单压力测试

简单的压力测试采用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性能要比后两种差一倍。

三、实战2:使用webbench测试网站性能

网站压力测试工具-Webbench

一.webbench简介:

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

官网:http://www.lionbridge.com

二.在xuegod64上下载并安装webbench:

[root@xuegod64~]# wget http://www.ha97.com/code/webbench-1.5.tar.gz
[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报错:

install: cannot create regular file
`/usr/local/man/man1': No such file or directory

make: *** [install] Error 1

[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秒。 

[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个失败。

实战:使用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上机器性能:

[root@xuegod64 ~]# vmstat  1 20

procs -----------memory---------- ---swap--
-----io---- --system-- -----cpu-----

r  b  
swpd   free   buff 
cache   si   so   
bi    bo   in  
cs us sy    id wa st

0  0     
0 537392 105636 356068    0    0   
21     2   20  
16  0  0 99 
0  0

0  0     
0 537368 105636 356068    0    0    
0     0   42  
39  0  0 100 
0  0

0  0      0 537368 105636 356068    0   
0     0     0  
45   61  0  0 100  0  0

0  0     
0 535796 105636 356068    0    0    
0     0  126 
101  0  1 99  0 
0

9  0     
0 535400 105636 356068    0    0    
0     4  520 
799  1  9 90  0 
0

9  0     
0 532896 105636 356124    0    0    
0     0 6361 18112 14 84  2  0 
0

15 
0      0 528772 105636 356640    0   
0     0     0 7470 23536 23 76  1  0 
0

11 
0      0 523508 105636 357360    0   
0     0     0 7622 25163 21 79  0  0 
0

25 
0      0 515344 105636 358160    0   
0     0     0 7974 27589 15 84  1  0 
0


0      0 499788 105652 362472    0   
0     0     0 
122   42  0  0
100  0 
0

1  0     
0 500416 105652 362472    0    0    
0     0   61  
42  0  0 100 
0  0

例:

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

LVS系列三、LVS集群-IP-TUN模式的更多相关文章

  1. Dubbo源码学习总结系列三 dubbo-cluster集群模块

    Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...

  2. 一文掌握Redis的三种集群方案

    在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...

  3. LVS集群之IP TUN模式以及网站压力测试

    今天来看一下LVS的第三种模式IP TUN. TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网. 环境: 主机名 IP 系统 角色 tiandong63 RIP:192.168. ...

  4. LVS集群之NAT模式实现

    LVS集群之NAT模式实现 一.集群的种类 集群系统主要分为 1.HA:高可用集群,又叫双机热备.   (a)原理      2台机器A,B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至 ...

  5. MongoDB最新4.2.7版本三分片集群修改IP实操演练

    背景 重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾 ...

  6. rabbitmq系统学习(三)集群架构

    RabbitMQ集群架构模式 主备模式 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单.主备模式也称为Warren模式 HaProxy配置 listen r ...

  7. K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署

    Prometheus Operator不同于Prometheus,Prometheus Operator是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控 ...

  8. Redis源码阅读(三)集群-连接初始化

    Redis源码阅读(三)集群-连接建立 对于并发请求很高的生产环境,单个Redis满足不了性能要求,通常都会配置Redis集群来提高服务性能.3.0之后的Redis支持了集群模式. Redis官方提供 ...

  9. 【运维技术】kafka三实例集群环境搭建及测试使用

    kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...

  10. 搭建Redis三主三从集群

    Redis三主三从集群规划 10.0.128.19   使用端口 7000  7001 10.0.128.22   使用端口 7002  7003 10.0.128.23   使用端口 7004  7 ...

随机推荐

  1. qjson中把记录或类型或泛型数组转换为json字符串

    unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  2. java——maven依赖版本冲突

    博客:maven依赖jar包时版本冲突的解决

  3. Matlab---绘图及其位置摆放

    Matlab---绘图及其位置摆放 [@WP@20180509] 一.绘图函数 (1)绘制二维图形 (1.1) plot( ) 函数的应用格式. 1,plot(x). 当x 为一向量时,以x 元素的值 ...

  4. 05—动态sql

    1.创建表 CREATE TABLE tb_employee ( ID INT(11) PRIMARY KEY AUTO_INCREMENT, loginname VARCHAR(18), PASSW ...

  5. scala-currying化

    scala的加里化(currying)纠结了很久.通过Scala Worksheet 可以打印很多调试信息,所以用它写了一些测试代码,帮助自己理解. object test { //一个参数列表,3个 ...

  6. zendstudio zenddebug 调试技巧

    毋庸置疑debugger软件减轻了程序员的负担. 最近使用php开发,感觉没有开发C#时的爽快了,原因就是debugger似乎因为商业目的(zend server的原因) zend debugger ...

  7. 《深入理解Java虚拟机》之(二、垃圾收集器与内存分配策略)

    程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了,而java堆和方法区 ...

  8. Hivesql中的正则

    ================================================================================================= 一般 ...

  9. 粗暴,干就完了----徐晓冬似的C语言自学笔记-----实现一个链表结构

    #include <stdio.h> #include <stdlib.h> #define N 5 /*N 假定数组长度为5*/ typedef struct snode { ...

  10. 题解 【NOIP2003】神经网络

    [NOIP2003]神经网络 Description 问题背景: 人工神经网络( Artificial Neural Network )是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷 ...