LVS-DR集群

LVS-DR集群

DR=Direct Routing(直接路由)

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

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

Direct Routing 和 IP Tunneling 区别

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

 

LVS-DR工作原理拓扑

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

 

 

LVS-DR 工作流程

   工作原理也就是:MAC 转换过程

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

Director

VIP

Real Server

Client/Gateway

10.1.10.164  eth0

00:0C:29:65:4A:22

10.1.10.166

00:0C:29:65:4A:22

10.1.10.165 eth0

00:0C:29:64:F4:70

10.1.10.9

00:0C:29:25:1F:DD

 

1:Client 基本信息  IP:10.1.10.9

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

Src mac

Dst mac

type

Source ip

Src port

Dst ip

Dst port

……

CRC

……

……

……

10.1.10.9

55014

10.1.10.166

80

……

……

 

 

 

Source MAC

Dst MAC

00:0C:29:25:1F:DD

00:0C:29:65:4A:22

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

Src mac

Dst mac

type

Source ip

Src port

Dst ip

Dst port

……

CRC

……

……

……

10.1.10.9

55014

10.1.10.166

80

……

……

 

 

Source MAC

Dst MAC

00:0C:29:65:4A:22

00:0C:29:64:F4:70

整个过程不会修改IP报文的内容! [访问客户端无论多么复杂,我们可以认为客户端与LVS链接的时候属于同一网段的公网地址]

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

 

Src mac

Dst mac

type

Source ip

Src port

Dst ip

Dst port

……

CRC

……

……

……

10.1.10.166

80

10.1.10.9

55014

……

……

 

 

 

Source MAC

Dst MAC

00:0C:29:64:F4:70

00:0C:29:25:1F:DD

 

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

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

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

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

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

 

总结:需要保证我们前段路由将我们所有目标地址为VIp的报文发往director

        RS可以使用私有地址,可以使用公网地址,但是diector和前段路由统一网段,且RS和director必须在统一物理网段!

        如果RS为私有地址,就必须保证RS可以通达外网,RS的网关必须指向出口路由

        请求的报文经过director,响应报文不经过director

LVS-DR集群

 

 

环境

角色

主机名

网卡

IP

操作系统

Director

Strong-Tony01

Eth0

10.1.10.164

CentOS6.5 x86_64

Eth0:1

10.1.100.166

Real server1

Strong-Tony02

Eth0

10.1.100.165

CentOS6.5 x86_64

Lo:1

10.1.10.166

Real server2

Strong-Tony03

Eth0

10.1.100.167

CentOS6.5 x86_64

Lo:1

10.1.10.166

 

分发器IP地址配置

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

DIP===eth0===10.1.10.164                 VIP===eth0:1===10.1.10.166

[root@Strong-tony01 ~]# cd /etc/sysconfig/network-scripts/

[root@Strong-tony01 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1

[root@Strong-tony01 network-scripts]# vi ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

UUID=39e0cb32-20b6-4ce7-8722-7659dcd2233d

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

HWADDR=00:0C:29:65:4A:22          #若配置文件有MAC,必须和eth0:1的MAC一样

IPADDR=10.1.10.164

PREFIX=24

GATEWAY=10.1.10.1

DNS1=114.114.114.114

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth0"

 

[root@Strong-tony01 network-scripts]# vi ifcfg-eth0:1

DEVICE=eth0:1    #修改网卡名称

TYPE=Ethernet

UUID=39e0cb32-20b6-4ce7-8722-7659dcd2233d

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

HWADDR=00:0C:29:65:4A:22      #MAC地址与eth0保持一致

IPADDR=10.1.10.166              #设置VIP   IP地址

PREFIX=24

GATEWAY=10.1.10.1

DNS1=114.114.114.114

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth0:1"

 

[root@Strong-tony01 network-scripts]# ifdown eth0

[root@Strong-tony01 network-scripts]# ifup eth0

[root@Strong-tony01 network-scripts]# ifconfig     #查看是否有两个IP地址

eth0      Link encap:Ethernet  HWaddr 00:0C:29:65:4A:22 

         inet addr:10.1.10.164  Bcast:10.1.10.255  Mask:255.255.255.0

         inet6 addr: fe80::20c:29ff:fe65:4a22/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

          collisions:0 txqueuelen:1000

          RX bytes:62315 (60.8 KiB)  TX bytes:34793 (33.9 KiB)

 

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:65:4A:22 

          inet addr:10.1.10.166  Bcast:10.1.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

两台RealServer的IP配置

[root@Strong-tony02 ~]# cd /etc/sysconfig/network-scripts/

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

[root@Strong-tony02 network-scripts]# vi ifcfg-lo:1

DEVICE=lo:1            #修改网卡名称

IPADDR=10.1.10.166    #修改IP地址,VIP IP

NETMASK=255.255.255.255     #掩码4个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

[root@Strong-tony02 network-scripts]# ifdown lo

[root@Strong-tony02 network-scripts]# ifup lo

[root@Strong-tony02 network-scripts]# ifconfig          #查看网卡配置信息

eth0      Link encap:Ethernet  HWaddr 00:0C:29:64:F4:70 

          inet addr:10.1.10.165  Bcast:10.1.10.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe64:f470/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

          collisions:0 txqueuelen:1000

          RX bytes:87957 (85.8 KiB)  TX bytes:28559 (27.8 KiB)

 

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  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)

 

lo:1      Link encap:Local Loopback 

          inet addr:10.1.10.166  Mask:255.255.255.255

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

 

第二台RealServer配置

[root@Strong-tony03 ~]# cd /etc/sysconfig/network-scripts/

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

[root@Strong-tony03 network-scripts]# vi ifcfg-lo:1

DEVICE=lo:1           #修改网卡名称

IPADDR=10.1.10.166          #修改IP地址,VIP IP

NETMASK=255.255.255.255      #掩码4个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

[root@Strong-tony03 network-scripts]# ifdown lo

[root@Strong-tony03 network-scripts]# ifup lo

[root@Strong-tony03 network-scripts]# ifconfig lo:1

lo:1      Link encap:Local Loopback 

          inet addr:10.1.10.166  Mask:255.255.255.255

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

 

分发器配置LVS-DR规则

[root@Strong-tony01 ~]# yum install -y ipvsadm

[root@Strong-tony01 ~]# ipvsadm -A -t 10.1.10.166:80 -s rr   # 配置ipv规则

# -A,表示添加; -t,表示TCP的服务,后面书写格式为VIP:Port; -s设置调度算法

# rr表示轮询,round-robin

#-u: UDP协议的集群 ,-f: FWM: 防火墙标记

[root@Strong-tony01 ~]# ipvsadm -a -t 10.1.10.166:80 -r 10.1.10.165:80 –g  #添加real server

#-g 表示--gatewaying,也就是DR模式LVS

# -a,表示添加real server的地址;

# -r表示realserver地址;

[root@Strong-tony01 ~]# ipvsadm -a -t 10.1.10.166:80 -r 10.1.10.167:80 –g

[root@Strong-tony01 ~]# ipvsadm –L  #查看当前ipvsadm规则

# 配置及查看内核IPVS表和算法的工具类似于iptables

[root@Strong-tony01 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.1.10.166:80 rr

  -> 10.1.10.165:80               Route   1      0          0        

  -> 10.1.10.167:80               Route   1      0          0 

InActConn 指非活跃连接数, TCP ESTABLISH 状态以外的连接都称为不活跃连接。例如处于 SYN_RECV 状态的连接,处于 TIME_WAIT 状态的连接等

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

[root@Strong-tony01 ~]# /etc/init.d/ipvsadm save   #保存ipvsadm规则

#保存ipvsadm规则到/etc/init.d/ipvsadm

ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

[root@Strong-tony01 ~]# chkconfig ipvsadm on      #设置开机启动ipvsadm服务

[root@Strong-tony01 ~]# chkconfig --list ipvsadm

ipvsadm         0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

测试数据站

[root@Strong-tony02 ~]# vi /etc/sysctl.conf

net.ipv4.conf.eth0.arp_ignore = 1           #追加下面四行内容

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

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

参数说明:

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

自己的理解:

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

arp_announce  (宣告) 为 2 

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

arp_announce:如何通告本地址,默认0,表示通过网络直连的接口地址

arp_ignore:如何接受arp请求,默认为0,如果你改为1,表示仅在请求的地址配置在请求的报文的接口进行响应

[root@Strong-tony02 ~]# sysctl -p       #配置生效 

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key

error: "net.bridge.bridge-nf-call-iptables" is an unknown key

error: "net.bridge.bridge-nf-call-arptables" is an unknown key

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.conf.eth0.arp_ignore = 1

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

 

[root@Strong-tony02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0  | grep GATEWAY

GATEWAY=10.1.10.1    #查看网关是否正确

[root@Strong-tony02 ~]# yum install -y httpd          #安装httpd服务测试

[root@Strong-tony02 ~]#echo "<h1><em> This is Stong-tony02.cn </em></e1>" /var/www/html/index.html        # 创建测试页面

[root@Strong-tony02 ~]# chkconfig httpd on   # 设置开机自启动

[root@Strong-tony02 ~]# chkconfig --list httpd

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@Strong-tony02 ~]# service httpd start # 启动服务

Starting httpd: [ OK ]

 

[root@Strong-tony03 ~]# vi /etc/sysctl.conf

net.ipv4.conf.eth0.arp_ignore = 1           #追加这4行

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

[root@Strong-tony03 ~]# sysctl -p       #配置生效 

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key

error: "net.bridge.bridge-nf-call-iptables" is an unknown key

error: "net.bridge.bridge-nf-call-arptables" is an unknown key

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.conf.eth0.arp_ignore = 1

net.ipv4.conf.eth0.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

 

[root@Strong-tony03 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0  | grep GATEWAY

GATEWAY=10.1.10.1    #查看网关是否正确

[root@Strong-tony03 ~]# yum install -y httpd          #安装httpd服务测试

[root@Strong-tony03 ~]#echo "<h1><em> This is Stong-tony03.cn </em></e1>" /var/www/html/index.html        # 创建测试页面

[root@Strong-tony03 ~]# chkconfig httpd on   # 设置开机自启动

[root@Strong-tony03 ~]# chkconfig --list httpd

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@Strong-tony03 ~]# service httpd start # 启动服务

Starting httpd: [ OK ]

 

注意,在前面我们重启网卡的时候,我们没有做ARP处理方案的时候,可能网卡是无法重启成功的,你也可以配置好VIP和Arp相关的处理方式之后,在重新启动,效果一样,只是一个启动顺序的问题而已!

 

 

测试集群运作

浏览器访问http://10.1.10.164,使用F5键刷新

按F5刷新,测试结果是会在两个页面之间切换

 

 

[root@Strong-tony01 ~]# ipvsadm -L -n –c                # 查看客户端连接分发器和Real Server的情况

 

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:33  FIN_WAIT    172.16.10.31:52623 10.1.10.166:80     10.1.10.167:80

TCP 00:48  FIN_WAIT    172.16.10.31:52632 10.1.10.166:80     10.1.10.165:80

TCP 01:26  FIN_WAIT    172.16.10.31:52645 10.1.10.166:80     10.1.10.167:80

TCP 00:13  FIN_WAIT    172.16.10.31:52620 10.1.10.166:80     10.1.10.165:80

TCP 01:27  FIN_WAIT    172.16.10.31:52648 10.1.10.166:80     10.1.10.165:80

TCP 00:38  FIN_WAIT    172.16.10.31:52631 10.1.10.166:80     10.1.10.167:80

TCP 01:26  FIN_WAIT    172.16.10.31:52646 10.1.10.166:80     10.1.10.165:80

TCP 01:26  FIN_WAIT    172.16.10.31:52642 10.1.10.166:80     10.1.10.167:80

TCP 01:24  FIN_WAIT    172.16.10.31:52639 10.1.10.166:80     10.1.10.165:80

TCP 01:27  FIN_WAIT    172.16.10.31:52647 10.1.10.166:80     10.1.10.167:80

TCP 01:26  FIN_WAIT    172.16.10.31:52643 10.1.10.166:80     10.1.10.165:80

TCP 00:33  FIN_WAIT    172.16.10.31:52624 10.1.10.166:80     10.1.10.165:80

TCP 00:14  FIN_WAIT    172.16.10.31:52621 10.1.10.166:80     10.1.10.167:80

TCP 01:25  FIN_WAIT    172.16.10.31:52640 10.1.10.166:80     10.1.10.167:80

TCP 01:24  FIN_WAIT    172.16.10.31:52638 10.1.10.166:80     10.1.10.167:80

TCP 01:25  FIN_WAIT    172.16.10.31:52641 10.1.10.166:80     10.1.10.165:80

TCP 00:15  FIN_WAIT    172.16.10.31:52622 10.1.10.166:80     10.1.10.165:80

[root@Strong-tony01 ~]# ipvsadm -Z   # 清空当前虚拟服务表的计数器

[root@Strong-tony01 ~]# ipvsadm -L -n --stats    #查看分发情况

IP Virtual Server version 1.2.1 (size=4096)                                 

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  10.1.10.166:80                     36      184        0    22758        0

  -> 10.1.10.165:80                     18       92        0    11309        0

  -> 10.1.10.167:80                     18       92        0    11449        0

Conns (connections scheduled) 已经转发过的连接数

InPkts (incoming packets) 入包个数

OutPkts (outgoing packets) 出包个数

InBytes (incoming bytes) 入流量(字节)

OutBytes (outgoing bytes) 出流量(字节)

 

[root@Strong-tony01 ~]# ipvsadm -d -t 10.1.10.166:80 -r 10.1.100.165 # 删除一台RS

[root@Strong-tony01 ~]# ipvsadm -C # 清空规则

相关术语

director:分发器,负载调度器,也就是load balancer

real server:真正为用户提供服务器服务器IP

VIP:Virtual IP,真正对外提供服务的IP,也就是DNS解析的地址IP

DIP:Director IP,面对我们后端真实服务器的IP

RIP:Realserver IP

CIP:Client IP

ipvs:ip virtual server

 

LVS集中调度模式

-s rr               轮询法                                                      -s wrr      带权重的轮询

       -s lc               最少链接法                                                -s wlc      带权重的最少链接法

       -s lblc            基于本地的最少链接法                              -s dh    目标散列法

       -s sh              散列法                                                      -s sed      最短周期延迟法

       -s nq              永不排队法                                                -s=scheduler=调度的意思

调度散发配置后立即生效,就像iptables规则一样

rr轮询     round robin

       在服务器中无穷的循环中遍历

wrr带权重轮询       Weighted Round Robin 

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

lc最少链接法          Least-Connection

       当新的请求到达 director 时,director 查看活动和非活动的连接数量,以确定把请求分发给哪个服务器。director 将集群节点目前的活动连接数量 x256 再加上不活动的连接数量,得到节点的开销值。最低开销值的节点胜出,被分发给新的入站请求。(如果开销一样,则第一个节点被选中)

wlc带权重的最少链接法   Weighted Least-Connection

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

lblc基于本地的最少链接法             Locality-Based  Least-Connection

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

dh目标散列法  Destination Hashing

sh散列法 Source  Hashing

       同一个 ip 的客户端总是分发给同一个 real server。 让客户端总是能访问到自己的会话信息,这种机制叫会话保持。 基于 ip 地址标识客户端的缺点:很多内网用户会伪装成公网 ip,来访问服务器,不能人为的控制负载均衡。

       比较高级的方法是基于客户端提供我们的 session id 来实现会话保持。haproxy(做负载均衡的软件)可以实现基于会话信息来判断保持会话。

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

       会话同步的方法:所有的 RS 把自己的会话信息保存到数据库当中(memcached 软件)。

sed最短周期延迟法  Shortest Expected Delay 最短延时预测  (Ci+1)/Ui  Ci 连接数  Ui 权重值

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

计算方法: 每个休群节点的开销值是通过将活动的连接数加 1 计算的。然后开销值除以分配给每个节点的权重,以取得 SED 值,具有最低 SED 值的集群节点胜出。

nq永不排队法  Never  Queue

没有队列,分配请求给空闲的服务器,没有空闲的就找响应最快的,如果集群节点中没有活动的连接 ,不管每个集群节点 SED 计算值的结果,它始终被 分配置服务的新入站请求。

HTTP 的会话(session)信息:

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

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

 

LVS DR wrr调度算法

  实现我们访问,轮询的时候在第一台real server上轮询两次之后,在第二台real server上轮询一次,2:1的比例承担我们的访问负载!

算法配置

[root@Strong-tony01 ~]# ipvsadm -C

[root@Strong-tony01 ~]# ipvsadm -A -t 10.1.10.166:80 -s wrr

[root@Strong-tony01 ~]# ipvsadm -a -t 10.1.10.166:80 -r 10.1.10.165:80 -g -w 20

[root@Strong-tony01 ~]# ipvsadm -a -t 10.1.10.166:80 -r 10.1.10.167:80 -g -w 10

[root@Strong-tony01 ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  10.1.10.166:80                      0        0        0        0        0

  -> 10.1.10.165:80                      0        0        0        0        0

  -> 10.1.10.167:80                      0        0        0        0        0

测试:

物理机上刷新http://10.1.10.166

刷新的过程中我们发现,Strong-tony02.cn的页面我们看到两次之后才会变为Strong-tony01

[root@Strong-tony01 ~]# ipvsadm -L -n –stats  #状况可以说明问题

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  10.1.10.166:80                     45      225        0    31056        0

  -> 10.1.10.165:80                     30      150        0    20571        0

  -> 10.1.10.167:80                     15       75        0    10485        0

 

LVS DR wrr权重

实现我们访问,设置第一台real server轮询权重为0,第二台real server权重为20

[root@Strong-tony01 ~]# ipvsadm -C

[root@Strong-tony01 ~]# ipvsadm -A -t 10.1.10.166:80 -s wrr

[root@Strong-tony01 ~]# ipvsadm -a -t 10.1.10.166:80 -r 10.1.10.165 -g -w 0

[root@Strong-tony01 ~]# ipvsadm -a -t 10.1.10.166:80 -r 10.1.10.167 -g -w 20

测试机多次访问http://10.1.10.166查看结果

[root@Strong-tony01 ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  10.1.10.166:80                     44      220        0    30664        0

  -> 10.1.10.165:80                      0        0        0        0        0

  -> 10.1.10.167:80                     44      220        0    30664        0

可以看到所有的链接都给了Strong-tony03这台real server,权重为0的Strong-tony这台real server不接收链接

此外:发现InPkts是有的,OutPkts为0,  因为数据包出去时,直接交给了 real server,而没有交给 Director!

 

posted @ 2016-12-01 14:11  海公公  阅读(320)  评论(0编辑  收藏  举报