zoukankan      html  css  js  c++  java
  • 01linux架构-LVS负载均衡

    一、LVS集群简介

    1.1 lvs集群工作结构图

    负载调度器:分发器:整个集群推外的最前端机,负责接收用户请求,并且根据自己的调度算法,将请求转发到后端真实服务器上的动作,而客户端认为服务来自一个IP地址(我们可称为VIP或虚拟IP地址)上的

    服务器池:真正为用户提供服务的服务器,每一台服务器就是一个realserver,执行的服务有WEBMAILFTP和DNS等服务

    共享存储:为rs保持相同内容,提供数据的一致性,也就是说,他为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同内容,提供相同的服务

    1.2LVS模式及工作原理

    1.2.1LVS的三种模式

    NAT  DR  TUN

    1.2.2 LVS负载均衡的三种包转发方式

      lvs提供了三种包转发方式:NAT(网络地址映射)、IP tunneling(IP隧道)、Direct Routing(直接路由)。不同的转发模式决定了不同cluster的网络结构

    1.2.3 NAT(网络地址映射)

    nat方式可支持任何的操作系统,以及私有网络,并且只需一个InternetIP地址,但是整个系统的性能受到限制,因为执行NAT每次需要重写包,有一定的延迟,另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常长,付负载均衡器形成很大的压力,成为了新的瓶颈

    1.2.4IP隧道

    director(分发器)分配请求到不同realserver。realserver处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。ip隧道技术极大的提高了分发器的调度处理能力,同事也极大地提高了系统能容纳的最大节点数,可以超过100个节点,realserver可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式IP地址用于与客户机直接通信,并且有所服务器必须支持IP隧道协议

    1.2.5直接路由

    与IP隧道类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性,直接路由和IP隧道相比,没有IP封装的开销,单由于采用物理层(修改MAC)地址的技术,所有服务器都必须在一个物理网段

    二、配置搭建LVS-NAT

    1、实验环境准备

    准备三台主机、并关闭三台主机的防火墙,关闭selinux,清空iptables

    2、三台主机的IP注释

    三台主机分别为分发器一台,realserver两台

    分发器配置两块网卡,一台网卡地址为192.168.75.13(对外提供服务的地址),一块网卡IP地址为192.168.204.128(对内网的)

    两台realserver的IP地址分别为192.168.204.137、192.168.204.138

    注意,配置IP地址的时候,两台realserver的网关必须配置成分发器对内网的IP地址 (192.168.204.128)

    3、分发器的配置

    3.1打开路由转发功能

    vim /etc/sysctl.conf    

    net.ipv4.ip_forward = 1

    sysctl -p  #让配置生效

    3.2 安装LVS管理工具ipvsadmin

    yum -y install ipvsadmin

    3.3 使用ipvsadmin命令设置规则

    ipvsadm -A -t 192.168.75.13:80 -s rr   #rr表示轮询

      选项解释:

        -A   添加虚拟服务器

        -t  表示tcp服务

        -s  指定调度算法  rr表示轮询

    添加realserver

    ipvsadm -a -t 192.168.75.13:80 -r 192.168.204.137 -m

    ipvsadm -a -t 192.168.75.13:80 -r 192.168.204.137 -m

      选项解释:

        -a  表示添加realserver的地址

        -r  指定realserver的IP地址

        -m  表示masquerade也就是NAT方式的LVS

    3.4  查看

    ipvsadm命令,用于配置及查看内核ipvs表和算法的工具,类似于iptables

    root@test ~]# 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.75.13:80 rr

      -> 192.168.204.137:80              Masq    1      0          0         

      -> 192.168.204.138:80              Masq    1      0          0  

    3.5 保存配置或规则

    [root@test ~]# ipvsadm --save > /etc/sysconfig/ipvsadm      ipvsadm -S    保存以上的配置

    Saving IPVS table to /etc/sysconfig/ipvsadm:           [确定]

    4、配置realserver的ip地址,并安装httpd,在网页中输入不同的内容。然后客户端测试访问192.168.75.13 。看是否轮询

     

    附录:ipvsadm命令选项解释:  

    -A --add-service    在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。  

    -E --edit-service      编辑内核虚拟服务器表中的一条虚拟服务器记录。  

    -D --delete-service  删除内核虚拟服务器表中的一条虚拟服务器记录。  

    -C --clear                 清除内核虚拟服务器表中的所有记录。  

    -R --restore             恢复虚拟服务器规则  

    -S --save                 保存虚拟服务器规则,输出为-R 选项可读的格式  

    -a --add-server       在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器  

    -e --edit-server       编辑一条虚拟服务器记录中的某条真实服务器记录  

    -d --delete-server    删除一条虚拟服务器记录中的某条真实服务器记录  

    -L|-l --list                  显示内核虚拟服务器表  

    -Z --zero                  虚拟服务表计数器清零(清空当前的连接数量等)  

    --set tcp tcpfin udp  设置连接超时值  

    --start-daemon        启动同步守护进程。他后面可以是master backup,用来说明LVS Router master 或是backup。在这个功能上也可以采用keepalivedVRRP 功能。  

    --stop-daemon        停止同步守护进程  

    -h --help                  显示帮助信息  

    其他的选项:  

    -t --tcp-service service-address        说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]  

    -u --udp-service service-address      说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]  

    -f --fwmark-service fwmark               说明是经过iptables 标记过的服务类型。  

    -s --scheduler scheduler                   使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.  

    -p --persistent [timeout]                   持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。  

    -M --netmask                                    netmask persistent granularity mask  

    -r --real-server server-address         真实的服务器[Real-Server:port]  

    -g --gatewaying                                指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)  

    -i --ipip                                              指定LVS 的工作模式为隧道模式  

    -m --masquerading                           指定LVS 的工作模式为NAT 模式  

    -w --weight weight                           真实服务器的权值  

    --mcast-interface interface              指定组播的同步接口  

    -c --connection                                  显示LVS 目前的连接 如:ipvsadm -L -c  

    --timeout                                        显示tcp tcpfin udp timeout  如:ipvsadm -L --timeout  

    --daemon                                          显示同步守护进程状态  

    --stats                                              显示统计信息  

    --rate                                                显示速率信息  

    --sort                                                对虚拟服务器和真实服务器排序输出  

    --numeric -n                                      输出IP 地址和端口的数字形式

     

    超时时间用ipvsadm --set tcp tcpfin udp设置,比如

    #ipvsadm --set 120 20 100

    表示tcp空闲等待时间为120 

    客户端关闭链接等待时间为20

    udp空闲等待为100

     

     二、配置LAS-DR

    2.1  LVS-DR和LVS-IP TUN集群概述

    2.1.1  服务概述:

    2.1.2  Direct Routing(直接路由)

    director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing由于采用物理层(修改MAC地址)技术,因此所有服务器都必须在一个网段中。

    2.2.3  IP Tunneling(IP隧道)

    director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的公网IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。

    2.2.4  Direct Routing 和IP Tunneling 区别:

    Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用数据链路层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

    2.2.5  DR模式实际拓扑图及工作DR方式工作流程图:

    Lvs-dr的工作原理:Deiector收到请求,将请求转发给了我们的realserver,但是接下来的工作就是我们的realserver和我们的客户端进行通讯了,所以原理图如下

    2.2.6  LVS DR模式工作原理:

    MAC转换过程

    实例场景设备清单: director分发器,IP: 192.168.1.70, VIP : 192.168.1.63

    ①  client基本信息: IP:192.168.1.101向目标vip发出请求,Director接收。此时IP包头及数据帧头信息如下:

    ②  Director分发器根据负载均衡算法选择一台active的realserver(假设是192.168.1.62),将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。此时IP包头及数据帧头信息如下:

    ③ realserver(192.168.1.62)在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时IP包头及数据帧头信息如下:

    ③  如果client与VS同一网段,那么client(192.168.1.101)将收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。

    归纳一下:

    1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的ip;

    2)以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台RS;

    3)在hash table中记录连接信息。

    数据包、数据帧的大致流向是这样的:client --> VS --> RS --> client

    以上就是对LVS/DR模式的原理介绍

    为什么需要DR?  因为NAT模式效率太低。

    DR方式特点?成本?都是公网地址

    网络转发:

    基于2层的数据报文的转发, 要比基于3层的网络转发效率要高

    lvs-DR 是基于2层的转发, 所以在LVS中所有的模式, 效率是最好的

    1):基于mac的数据报文转发, 是效率最好的, 但是是根据交换机的MAC地址表来实现的MAC表主要告诉你, 到xxxx地方该走那个端口如果交换不知道对方在哪儿, 这个时候, 他就要进行广播, 就问xxxx在哪儿, 如果对应的设备给了回应, 那么交换机也就更新了自己的MAC地址表 记录到xxxx需要走这个端口

    2):2层设备不具有路由功能, 那么广播也就不具有跨路由的功能, 所有要实现mac地址广播, 必须在同一物理网段

    3):vlan具有隔离广播的功能, 所有要能处理mac地址广播, 就应该在同一个VLAN中

    因此: 如果要实现LVS-DR模式

    1): 所有的设备应该在同一个物理网段

    2): 所有的设备都应该在同一个广播域中

    LVS-DR模式工作原理:

    1), DR模式, 全程目标地址, 原地址不变, 因为DR模式工作于2层

    2), 请求报文从客户端发出:原地址: CIP   源MAC  CMAC    目标地址: VIP   目标mac: xxx

    3), 请求报文到达机房防火墙之后, 会在防火墙的内网口进行广播, 找到VIP在哪儿 然后把包丢出去

    原地址: CIP   目标地址: VIP

    MAC: FMAC  目标MAC: VMAC

    4), 报文到达director之后, 解包, 发现目标mac是自己, 开始解析这个报文

    处理完成, 通过自定义的一个调度算法, 转发报文到达其中一台RS上

    原地址: CIP   目标地址: VIP

    mac: DMAC    目标MAC: RMAC

    5), 数据报文到达RS之后, 进行节封装, 发现目标mac是自己, 开始解析, 发现VIP也有,开始处理

    6), 处理完成之后, 数据直接通过RS流向客户端

    2.2  实战:配置LVS-DR集群

    分发器IP配置

    从拓扑图看出我们的eth0有2个IP地址,所以我们需要配置eht0和eth0:1两个IP

    DIP===ens33===192.168.1.70VIP===ens33:1===192.168.1.63

    2.2.1  配置IP:

    DIP: ens33      ip地址:  192.168.1.70

    VIP: ens33:1   ip地址:  192.168.1.63 

    [root@xuegod63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  #以配置以下信息

    IPADDR=192.168.1.70

    NETMASK=255.255.255.0

    GATEWAY=192.168.1.1

    DNS1=202.96.134.133

    网关:192.168.1.1

    2.2.2  生成ens33:1配置文件

    [root@xuegod63 network-scripts]# pwd

    /etc/sysconfig/network-scripts

    [root@xuegod63 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1

    [root@xuegod63 network-scripts]# vim ifcfg-ens33:1   #写入以下内容

    DEVICE=ens33:1

    NM_CONTROLLED=yes

    IPADDR=192.168.1.63

    NETMASK=255.255.255.0

    ONBOOT=yes

    TYPE=Etherneten

    BOOTPROTO=none

    IPV6INIT=no

    USERCTL=no

    PREFIX=24

    DEFROUTE=yes

    IPV4_FAILURE_FATAL=yes

    NAME="ens33:1"

    HWADDR=00:0C:29:12:EC:1E   #Mac地址必需要写成和eth0一样,否则出不来eth0:1这个网卡设备

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

    [root@xuegod63 network-scripts]# ifconfig   #查看是否有ens33 和ens33:1

    [root@xuegod63 network-scripts]# ifconfig

    ens33      Link encap:Ethernet  HWaddr 00:0C:29:12:EC:1E  

              inet addr:192.168.1.70  Bcast:192.168.1.255  Mask:255.255.255.0

              inet6 addr: fe80::20c:29ff:fe12:ec1e/64 Scope:Link 

              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

              collisions:0 txqueuelen:1000

              RX bytes:239961 (234.3 KiB)  TX bytes:22832 (22.2 KiB)

    ens33:1    Link encap:Ethernet  HWaddr 00:0C:29:12:EC:1E  

              inet addr:192.168.1.63  Bcast:192.168.1.255  Mask:255.255.255.0

              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

    2.2.3  配置LVS-DR规则:

    [root@xuego63 network-scripts]# rpm -ivh /mnt/Packages/ipvsadm-1.25-9.el6.x86_64.rpm

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

    [root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g 

    注: -g 表示DR模式 , -m 表示IP tun 模式

    [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              Route   1      0          0         

      -> 192.168.1.64:80              Route   1      0          0      

    注:三个LVS 模式中,只有NAT模式需要开启 路由转发功能。 DR和TUN模式不需要开启。

    2.2.4  两台RealServer的IP配置: 

    xuegod62:

    配置IP:192.168.1.62

    1、配置ip  eth0,桥接模式

    ifconfig eth0 192.168.1.62/24

    2、回环接口

    [root@xuegod62 ~]# ifconfig lo:1 192.168.1.63 netmask 255.255.255.255

    生成回环口配置文件:

    [root@xuegod62 network-scripts]# pwd 

    /etc/sysconfig/network-scripts 

    [root@xuegod62 network-scripts]# cp ifcfg-lo ifcfg-lo:1

    [root@xuegod62 network-scripts]# cat ifcfg-lo:1

    DEVICE=lo:1 

    IPADDR=192.168.1.63 

    NETMASK=255.255.255.255 

    # 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=loopback

    3、网关指向公网出口路由器IP:

    [root@xuegod62 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

    GATEWAY=192.168.1.1

    4、启动80端口

    echo  192.168.1.62 > /var/www/html/index.html

    service httpd restart

    2.2.3  关闭ARP转发(在两台RS上都需要同样的操作)。

    同一个广播域: 配置了多个相同的VIP  是不允许的, 要想实现,就必须让外面的网络, 无法发现这个VIP的存在

    因此 Linux里面, 可以修改内核参数,  实现接口IP的广播不响应、不广播

    arp_ignore = 1  表示只回答目标IP是访问本地网络对应接口的arp请求

    arp_announce = 2  只宣告本机网卡直连网络所在的ip的arp广播 

    [root@xuegod62 ~]#  echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore 

    [root@xuegod62 ~]# echo 2 >  /proc/sys/net/ipv4/conf/ens33/arp_announce

    永久生效:(注意realserver的实际link ok的网卡是不是ens33)

    [root@xuegod62 ~]# vim /etc/sysctl.conf #最后添加 

    net.ipv4.conf.ens33.arp_ignore = 1 

    net.ipv4.conf.ens33.arp_announce = 2

    或:

    net.ipv4.conf.ens33.arp_ignore = 1

    net.ipv4.conf.ens33.arp_announce = 2 

    net.ipv4.conf.all.arp_ignore = 1 

    net.ipv4.conf.all.arp_announce = 2

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    [root@xuegod62 ~]# sysctl -p

    参数说明:

    arp_ignore 为:1  #  - 只回答目标IP地址是访问本网络接口(eth0)的ARP查询请求。 

    自己的理解:

    在设置参数的时候将arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的网卡设备上面没有这个ip,就不做出响应,默认是0,只要这台机器上面任何一个网卡设备上面有这个ip,就响应arp请求,并发送mac地址。

    arp_announce  宣告) 2

    2 - 对查询目标使用最适当的本地地址。例如,如果在eth0接口上接受到了一个VIP的arp请求包。内核判断这个VIP地址是不是eth0接口上的IP一样。如果一样,则回复这个包。如果不一样,就丢弃不回应。

    2.2.4  配置real server xuegod64

    配置IP: 192.168.1.64

    1、配置ip  ens33 ,桥接模式

    ifconfig ens33 192.168.1.64/24

    2、回环接口

    [root@xuegod64 ~]# ifconfig lo:1 192.168.1.63 netmask 255.255.255.255

    生成回环口配置文件:

    [root@xuegod64 network-scripts]# pwd

    /etc/sysconfig/network-scripts

    [root@xuegod64 network-scripts]# cp ifcfg-lo ifcfg-lo:1

    [root@xuegod64 network-scripts]# cat ifcfg-lo:1

    DEVICE=lo:1

    IPADDR=192.168.1.63

    NETMASK=255.255.255.255

    # 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=loopback

    3、关闭ARP转发。

    [root@xuegod64 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore

    [root@xuegod64 ~]# echo 2 >  /proc/sys/net/ipv4/conf/ens33/arp_announce

    永久生效:(注意realserver的实际link ok的网卡是不是eth0)

    [root@xuegod64 ~]# vim /etc/sysctl.conf #最后添加

    net.ipv4.conf.ens33.arp_ignore = 1

    net.ipv4.conf.ens33.arp_announce = 2

    或:

    net.ipv4.conf.ens33.arp_ignore = 1

    net.ipv4.conf.ens33.arp_announce = 2

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    [root@xuegod64 ~]# sysctl -p

    4、网关指向公网出口路由器IP:

    [root@xuegod64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

    GATEWAY=192.168.1.1

    5、启动80端口

    echo  192.168.1.64 > /var/www/html/index.html

    service httpd restart

    客户端测试访问vip:

    先测试real server  :

    http://192.168.1.62

    http://192.168.1.64

    或物理机上测试:

    http://192.168.1.63/

    注: 测试时,不要在分发器上测试。那样测试是不行的

    2.3  LVS的多种调度模式:

    [root@xuegod63 ~]# ipvsadm -h

    --scheduler    -s scheduler(ˈskejələr调度)  one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc.

    -s rr

    轮循法

    -s wrr

    带权重的循环法

    -s lc

    最少连接法

    -s wlc

    带权重的最少连接法

    -s lblc

    基于本地的最少连接法

    -s dh

    目标散列法

    -s sh

    源散列法

    -s sed

    最短预期延迟法

    -s nq

    永不排队法

     

    注:调度算法配置后立即生效,就像iptables配置规则一样。

    2.3.1  每个调度算法详细说明:

    ------------------------------------------------------------------------------------------------

    1、rr  -  round robin   --- 在服务器池中无穷的循环中遍历

    2、wrr  -  Weighted Round Robin --- 基于集群节点可以处理多少来分配给每个节点一个权重值。权重值为2的服务器将收到权重值为1的服务器的两倍的连接数量。如果服务器的权重为0 ,则不会收到新的连接请求(但当前活动的已经建立的连接将不会丢失)。

    3、lc  -  Least-Connection  --- 当新的请求到达director时,director查看活动和非活动的连接数量,以确定把请求分发给哪个服务器。

    director将集群节点目前的活动连接数量x256 再加上不活动的连接数量,得到节点的开销值。最低开销值的节点胜出,被分发给新的入站请求。(如果开销一样,则第一个节点被选中)

    4、wlc  -  Weighted Least-Connection

    --- 先如上算出集群节点的开销值,然后除以分配给其的权重值,最小值节点胜出,将入站请求分发给它。

    5、lblc - Locality-Based  Least-Connection

    --- 基于局部的最小连接,当real server是缓存服务器时用得比较多

    6、lblcr  -  Locality-Based Least-Connection with Replication

    --- 带复制的基于局部的最小连接,当real server是缓存服务器时用得比较多

    7、dh  -  Destination Hashing

    8、sh  -  Source  Hashing

    --- 同一个ip的客户端总是分发给同一个real server。

    让客户端总是能访问到自己的会话信息,这种机制叫会话保持。

    基于ip地址标识客户端的缺点:很多内网用户会伪装成公网ip,来访问服务器,不能人为的控制负载均衡。

    比较高级的方法是基于客户端提供我们的session id来实现会话保持。

    haproxy(做负载均衡的软件)可以实现基于会话信息来判断保持会话。

    扩展:

    如何保持会话一致:

    1、如果总是保持和一个RS会话,这台RS如果故障了,要确定另一个RS也有会话信息,所有的RS保持数据同步。

    会话同步的方法:

    1、所有的RS把自己的会话信息保存到数据库当中(memcached软件)。

    9、sed  - Shortest Expected Delay最短延时预测  (Ci+1)/Ui  Ci连接数  Ui权重值

    --- 在wlc方法上做了轻微改进,这些服务使用tcp,而且当群节点在处理每个请求时保持在活动状态。

    计算方法: 每个休群节点的开销值是通过将活动的连接数加1计算的。然后开销值除

    分配 给每个节点的权重,以取得SED值,具有最低SED值的集群节点胜出。

    10、nq  -  Never  Queue没有队列,分配请求给空闲的服务器,没有空闲的就找响应最快的,

    --- 如果集群节点中没有活动的连接 ,不管每个集群节点SED计算值的结果,它始终被

    分配置服务的新入站请求。

    HTTP的会话(session)信息:

    cookies客户端(client)自己保存缓存

    会话(session)服务器(server)端保存

    2.3.2  实例:

    1:测试LVS 其它调度算法,如LVS-DR  wrr   diào dù

    [root@xuegod63 ~]# ipvsadm -C

    [root@xuegod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s wrr

    [root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -g -w 10

    [root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g -w 20

    [root@xuegod63 ~]# ipvsadm -L -n --stats

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

      -> RemoteAddress:Port

    TCP  192.168.1.63:80                     0        0        0        0        0

      -> 192.168.1.62:80                     0        0        0        0        0

      -> 192.168.1.64:80                     0        0        0        0        0

    测试:

    在物理机上,刷新9次这个链接:http://192.168.1.63/

    查看:

    [root@xuegod63 ~]# ipvsadm -L -n --stats

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

      -> RemoteAddress:Port

    TCP  192.168.1.63:80                     9       45        0     6111        0

      -> 192.168.1.62:80                     3       15        0     2037        0

      -> 192.168.1.64:80                     6       30        0     4074        0

    # 一共9次连接, xuegod62:xuegod64  是 1:2 关系。  说明权重越大,获得的连接说越多。

    2:如果一个real server 的权重是0,将不再分配给他客户端的请求

    [root@xuegod63 ~]# ipvsadm -C

    [root@xuegod63 ~]#  ipvsadm -A -t 192.168.1.63:80 -s wrr

    -s  wrr 加权轮循

    [root@xuegod63 ~]#  ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.62 -g -w 0

    [root@xuegod63 ~]# ipvsadm -a -t 192.168.1.63:80 -r 192.168.1.64 -g -w 20

    在物理机上,刷新9次这个链接:http://192.168.1.63/

    查看:

    root@xuegod63 ~]# ipvsadm -L -n --stats

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

      -> RemoteAddress:Port

    TCP  192.168.1.63:80                     8       40        0     5432        0

      -> 192.168.1.62:80                     0        0        0        0        0  #62的请求数为0

      -> 192.168.1.64:80                     8       40        0     5432        

    另外:  

    ipvsadm -L -n --stats

      发现进来的包是有的,但是出去的包为0

        InPkts                  OutPkts

                 0      

      因为数据包出去时,直接交给了real server,而没有交给Director

    扩展:

    ipvsadm 更多参数说明

     -L -n  ==>  查看规则,显示内核虚拟服务器表

     -L -n -c ==> 查看客户端连接分发器和real server 的情况

    1:[root@xuegod63 ~]# ipvsadm -L -n -c

    IPVS connection entries

    pro expire state       source             virtual            destination

    TCP 01:33  TIME_WAIT   192.168.1.100:49698 192.168.1.70:80    192.168.1.62:80

    TCP 01:26  TIME_WAIT   192.168.1.100:49690 192.168.1.70:80    192.168.1.64:80

    TCP 01:57  TIME_WAIT   192.168.1.100:49739 192.168.1.70:80    192.168.1.62:80

    -L -n --stats  ==>  查看分发情况

     -L -n --rate  ==> 查看速率

    • -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

    1:[root@xuegod63 ~]# ipvsadm -Z

    [root@xuegod63 ~]# ipvsadm -L -n --stats

    IP Virtual Server version 1.2.1 (size=4096)

    实例2:删除一条记录

    [root@xuegod63 ~]# ipvsadm -d -t 192.168.1.63:80 -r 192.168.1.64

    [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.2.62:80              Masq    1      0          0       

    -C --clear 清除内核虚拟服务器表中的所有记录。

    3: 清空所有记录

    [root@xuegod63 ~]# ipvsadm -C

    其他查看方式:

    --stats 显示统计信息

    [root@xuegod63 ~]# ipvsadm -L -n --stats

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

      -> RemoteAddress:Port

    TCP  192.168.1.63:80                     0        0        0        0        0

      -> 192.168.2.62:80                     0        0        0        0        0

    --rate 显示速率信息

    [root@xuegod63 ~]# ipvsadm -L -n --rate

    IP Virtual Server version 1.2.1 (size=4096)

    Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS

      -> RemoteAddress:Port

    TCP  192.168.1.63:80                     0        0        0        0        0

      -> 192.168.2.62:80                     0        0        0        0        0

    -c --connection 显示LVS 目前的连接

    [root@xuegod63 ~]# ipvsadm -L -n -c

    IPVS connection entries

    pro expire state       source             virtual            destination

    LVS的规则配置文件:/etc/sysconfig/ipvsadm

    配置文件方法:

    [root@xuegod63 ~]# ipvsadm-save>/etc/sysconfig/ipvsadm  可以保存。

    LVS的规则存储配置文件:/etc/sysconfig/ipvsadm

    [root@xuegod63 ~]# cat /etc/sysconfig/ipvsadm

    -A -t 192.168.1.63:80 -s rr

    -a -t 192.168.1.63:80 -r 192.168.1.62:80 -m -w 1

    -a -t 192.168.1.63:80 -r 192.168.1.64:80 -m -w 1

    2.4  linux下ab网站压力测试命令

    2.4.1  实战: 同时处理1000个请求。 一次要执行1000个并发请求。

    xuegod64:测试VIP:

    [root@xuegod64 ~]# ab -n 1000 -c 1000 http://192.168.1.63/index.html

    2.4.2  linux下ab网站压力测试命令

    参数:

    语法: ab -n 数字  -c 数字  http://链接

    -n requests Number of requests to perform

    #在测试会话中所执行的请求总个数。默认时,仅执行一个请求
    -c concurrency Number of multiple requests to make
    #一次产生的请求个数。默认是一次一个。

    2.4.3  实战: 同时处理1000个请求。 一次要执行1000个并发请求。

    [root@xuegod64 ~]# ab -n 1000 -c 1000 http://192.168.1.63/index.html

    ab命令在一般系统上面做测试时候,一般并发不能超过1024个,其实是因为因为系统限制每个进程打开的最大文件数为1024,可以用ulimit -a来查看

    可以测试一下后面两机器的负载情况。

    查看状态:

    [root@xuegod63 ~]# watch -n 0.1 ipvsadm -L -n --stats

    [root@xuegod64 ~]# ab -n 1000 -c 1000 http://192.168.1.63/index.html

    This is ApacheBench, Version 2.3 <$Revision: 655654 $>

    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking 192.168.1.63 (be patient 耐心)

    Completed 100 requests

    Completed 200 requests

    Completed 300 requests

    Completed 400 requests

    Completed 500 requests

    Completed 600 requests

    Completed 700 requests

    Completed 800 requests

    Completed 900 requests

    Completed 1000 requests

    Finished 1000 requests  #完成1000个请求

    Server Software:        Apache/2.2.15   #被测试的httpd服务器版本://平台apache 版本2.0.54

    Server Hostname:        192.168.1.63 //服务器主机名

    Server Port:            80  //服务器端口

    Document Path:          /index.html   //测试的页面文档

    Document Length:        13 bytes  //文档大小

    说明:在xuegod62查看index.html大小。确实是13字节

    [root@xuegod62 html]# ll -h

    -rw-r--r-- 1 root root 13 May  5 17:57 index.html

    Concurrency(并发) Level:      1000  //并发数

    Time taken for tests:   2.166 seconds  #整个测试花费的时间

    Complete requests:      1000  //完成的请求数量

    Failed requests:        0  //失败的请求数量

    Write errors:           0

    Total transferred:      281120 bytes   #整个测试过程中总传输字节数

    HTML transferred:       13052 bytes  #//整个场景中的HTML内容传输量

    Requests per second:    461.77 [#/sec] (mean)   #每秒处理请求数。//大家最关心的指标之一,相当于服务器中的每秒事务数 ,后面括号中的 mean 表示这是一个平均值

    Time per request:       2165.597 [ms] (mean)  # //大家最关心的指标之二,平均请求响应时间 ,后面括号中的 mean 表示这是一个平均值

    Time per request:       2.166 [ms] (mean, across all concurrent requests) #每个请求的时间:2.166[毫秒](意思是说,在所有的并发请求)  //每个请求实际运行时间的平均值。

    由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数

    Transfer rate:          126.77 [Kbytes/sec] received  #传输速率://平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

    Connection Times (ms)  #连接时间(毫秒)

                  min  mean[+/-sd] median   max    # median(中间

    Connect:        4  225 143.8    214     538

    Processing:    39  484 433.5    318    1581

    Waiting:       36  480 433.8    317    1580

    Total:        116  709 516.3    581    1807

     

    Percentage of the requests served within a certain time (ms) #在一定的时间内提供服务的请求的百分比(毫秒)

      50%     44 

      66%     49

      75%    285

      80%    453

      90%    495

      95%    884

      98%    899

      99%    904

     100%    906 (longest request) 

    整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于44 毫秒,66% 的用户响应时间小于49 毫秒,最大的响应时间小于906 毫秒

     

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

    精简版实验拓扑图:

     

    xuegod63 配置成 Director:

    1,配置网络:

    eth0DIP

    eth0:1VIP

    [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

    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,配置IP:

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

    。。。

    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

    配置VIP:

    生成ifcfg-tunl0配置文件:

    [root@xuegod62 network-scripts]# ifconfg 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  ]

    3,关闭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

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

    3,关闭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

    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

    测试:

    先测试realserver:

    http://192.168.1.64

    http://192.168.1.62

    正常打开

    测试VIP:

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

    [root@xuegod65 ~]# elinks 192.168.1.63 –dump  

     

    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)每秒系统处理事务的数量

    NAT22.4804448.34

    TUNNEL10.7079339.80

    DR10.1779825.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      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  

    例:

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

  • 相关阅读:
    Request.QueryString("id")与Request("id")区别
    C#中System.DateTime.Now.ToString()用法
    MySQL忘记密码
    zookeeper不停的拒绝client连接
    【异常】 Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server.
    kafka无法消费数据提示找不到分区
    yum list报一些error的组件
    【异常】‘for’ loop initial declarations are only allowed in C99 mode
    Airflow安装异常:ERROR: flask-appbuilder 1.12.3 has requirement Flask<2,>=0.12, but you'll have flask 0.11.1 which is incompatible.
    批量kill指定名称的进程
  • 原文地址:https://www.cnblogs.com/hackerlin/p/11357548.html
Copyright © 2011-2022 走看看