3-2 LVS集群-DR模式

男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述3-2 LVS集群-DR模式相关的知识,希望能为你提供帮助。
1.
DR模式要在分发器上一个网卡上配置两个IP,可能通过复制网卡配置文件的方式,如下:

[root@xuegod13 network-scripts]# ls
ifcfg-ens33ifdown-postifup-bnepifup-routes
ifcfg-ens33:1ifdown-pppifup-ethifup-sit
ifcfg-loifdown-routesifup-ipppifup-Team
ifdownifdown-sitifup-ipv6ifup-TeamPort
ifdown-bnepifdown-Teamifup-isdnifup-tunnel
ifdown-ethifdown-TeamPortifup-plipifup-wireless
ifdown-ipppifdown-tunnelifup-plusbinit.ipv6-global
ifdown-ipv6ifupifup-postnetwork-functions
ifdown-isdnifup-aliasesifup-pppnetwork-functions-ipv6
[root@xuegod13 network-scripts]# vim ifcfg-ens33:1
#改NAME和DEVICE和IPADDR(此IP为VIP)
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33:1"
UUID="aa67c48d-c5d3-4785-bcb4-9920d3fd537b"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR="192.168.31.70"
PREFIX="24"
GATEWAY="192.168.31.1"
DNS1="114.114.114.114"
IPV6_PRIVACY="no"

安装lvs管理工具,配置规则:
[root@xuegod13 ~]# ipvsadm -A -t 192.168.31.70:80 -s rr
# -g表示DR模式
[root@xuegod13 ~]# ipvsadm -a -t 192.168.31.70:80 -r 192.168.31.14 -g
[root@xuegod13 ~]# ipvsadm -a -t 192.168.31.70:80 -r 192.168.31.15 -g
[root@xuegod13 network-scripts]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:PortForward Weight ActiveConn InActConn
TCP192.168.31.70:80 rr
-> 192.168.31.14:80Route100
-> 192.168.31.15:80Route100

2.
RS端修改网卡配置信息,绑定VIP到回环口上。改DEVICE和IPADDR还有NETMASK,NETMASK改成四个255这样快,注释掉NETWORK和BROADCAST。
[root@xuegod14 network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@xuegod14 network-scripts]# vim ifcfg-lo:1
DEVICE=lo:1
IPADDR=192.168.31.70
NETMASK=255.255.255.255
#NETWORK=127.0.0.0
# If youre 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)
#BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

3.
两台RS端都有相同的IP,那不会有冲突吗,所以需要关闭RS端ARP应答
[root@xuegod14 network-scripts]# vim /etc/sysctl.conf
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@xuegod14 network-scripts]# sysctl -p#使之生效

关闭ARP转发(在两台RS上都需要同样的操作)。
同一个广播域: 配置了多个相同的VIP   是不允许的, 要想实现,就必须让外面的网络, 无法发现这个VIP的存在
因此 在Linux里面, 可以修改内核参数,   实现接口IP的广播不响应、不广播
arp_ignore = 1   表示只回答目标IP是访问本地网络对应接口的arp请求
arp_announce = 2   只宣告本机网卡直连网络所在的ip的arp广播
参数说明:
arp_ignore为1:只回答目标IP地址是访问本网络接口的ARP查询请求。
自己的理解:
在设置参数的时候将arp_ignore设置为1,意味着当别人的arp请求过来的时候,如果接收的网卡设备上面没有这个IP,就不做出响应,默认是0,只要这台机器上面任何一个网卡设备上面有这个IP,就会响应arp请求,并发送mac地址。
还不明白的话见这里??大白话理解LVS DR模型中的arp_ignore??
arp_announce(宣告)为2
自己的理解:
2-对查询目标使用最适当的本地地址。例如,如果在eth0接口上接受到了一个VIP的arp请求包。内核判断这个VIP地址是不是eth0接口上的IP一样。如果一样,则回复这个包。如果不一样,就丢弃不回应。
4.
-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查看活动和非活动的连接数量,以确定把请求分发给哪个服务器。
【3-2 LVS集群-DR模式】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)端保存


5.
设置LVS轮询算法为wrr
设置RS权重 -g表示DR模式 -w  设置权重值,权重值如果设置成0,则不再接受请求
[root@xuegod13 ~]# ipvsadm -A -t 192.168.31.70:80 -s wrr
[root@xuegod13 ~]# ipvsadm -a -t 192.168.31.70:80 -r 192.168.31.14 -g -w 1
[root@xuegod13 ~]# ipvsadm -a -t 192.168.31.70:80 -r 192.168.31.15 -g -w 2
[root@xuegod13 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:PortForward Weight ActiveConn InActConn
TCP192.168.31.70:80 wrr
-> 192.168.31.14:80Route100
-> 192.168.31.15:80Route200

6.
压测工具ab
安装apache的httpd后就会有ab了,用法如下:
-n  测试会话中所执行的请求总个数,默认仅执行一个请求 -c  一次产生的请求个数,默认是一个
后面的网址表示对哪个页面进行压测
[root@xuegod63 ~]# ab -n 1000 -c 1000 http://192.168.31.70/index.html

结果输出:
This is ApacheBench, Version 2.3 < $Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.31.70 (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


Server Software:Apache/2.4.6
Server Hostname:192.168.31.70
Server Port:80

Document Path:/index.html
Document Length:9 bytes

Concurrency Level:1000
Time taken for tests:0.991 seconds
Complete requests:1000
Failed requests:0
Total transferred:267000 bytes
HTML transferred:9000 bytes
Requests per second:1009.32 [#/sec] (mean)
Time per request:990.762 [ms] (mean)
Time per request:0.991 [ms] (mean, across all concurrent requests)
Transfer rate:263.17 [Kbytes/sec] received

Connection Times (ms)
minmean[+/-sd] medianmax
Connect:15434.167109
Processing:4230 208.9112868
Waiting:1229 209.2112868
Total:40284 228.8202956

Percentage of the requests served within a certain time (ms)
50%202
66%335
75%470
80%479
90%625
95%688
98%927
99%937
100%956 (longest request)

最值得关注的是下面三个数值:
Requests per second:     1009.32 [#/sec] (mean)                                      每秒能够处理的请求数
Time per request:       990.762 [ms] (mean)                                              所有请求花费时间
Time per request:       0.991 [ms] (mean, across all concurrent requests)  单个请求花费时间
注:如果并发数设置高,可能会出现报,打开太多文件的错,这个因为linux设置的最多同时打开的文件默认为1024(可以通过ulimit -n查看,临时性修改可以这样设置,比如最多打开文件数设置10000,ulimit -n 10000,这个需要在所有测试相关的主机上都要设置)

    推荐阅读