LVS Mode&Method

LVS NAT 模式:

Summary:

普通的NAT模式为DNAT,即只更改目的地址,不改源端口。

LVS在转发报文时,将Client的源IP透传给Server,类似于透明传输。

优点:

1. 可提供从不同源地址访问的访问。

2. RS不占用公网IP。

3. 可以更改访问目的地址的端口,DR及Tun模式不可以。

缺点:

1. 因为将Client IP透传给Server,为了不使Server受到攻击,前面要放个防火墙。

2. 配置比较复杂,每次添加,删除 VIP,RS,都需要将RS的网关指向LVS。当大范围部署时,需要更改多次RS,维护成本会计较高,如果达不到自动化运维的程度,维护起来比较容易出错。

3. 性能不及DR和Tun模式。

与APV优缺点比较:

1. Array APV支持FullNAT模式:

只有在最新版的LVS中才支持FullNAT模式,但是用户目前拿不到最新版的LVS。

  1. NAT模式类似于Array的透明传输。

工作过程:

1> client发送request到LVS的VIP上,VIP选择一个Real-server,并记录连接信息到hash表中,然后修改client的request的目的IP地址为Real-server的地址,将请求发给Real-server;

2> Real-server收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS;

3> LVS收到reply包后,修改reply包的的源地址为VIP,发送给client;

4> 从client来的属于本次连接的包,查hash表,然后发给对应的Real-server。

5> 当client发送完毕,此次连接结束或者连接超时,那么LVS自动从hash表中删除此条记录。

LVS DR 模式:

Summary:

DR模式是效率最高的一种,对于每个请求LVS把目的mac改成从RS中选择的机器的mac,再将修改后的数据帧在与服务器组的局域网上发送。

但是局限性是LVS机器需要和RS至少能有一个网卡同在一个VLAN下面,这样限制了DR模式只能在比较单一的网络拓扑下使用。

优点:

1. 响应报文直接从后端服务器返回给客户,吞吐量同TUN模式差不多,或更高

缺点:

1. 真实服务器需要同负载调度器在同一个网段

2. 需要为每个后台服务器配置一个公网IP,占用公网IP多。

3. 服务器暴露在外,不安全。

与APV优缺点比较:

1. 类似于APV的三角传输模式。

2. APV可以将RS保护在后台,LVS的RS会暴露在外面。

3. APV: 客户端,APV,RS可以在不通网段;

LVS: 客户端,LVS,RS都要在同一网段。

4. 由于DR的模式设计,LVS的性能可能会比APV要高。

工作过程:

当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在hash表中记录该次连接,

然后将client的请求包发给选择的Real-server,最后选择的Real-server把应答包直接传给client;当client继续发包过来时,LVS根据更才记录的hash表的信息,

将属于此次连接的请求直接发到刚才选择的Real-server上;当连接中止或者超时,hash表中的记录将被删除。

1,Linux Director 负载调度器

1 ifconfig eth0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up

2 ifconfig eth0:0 192.168.1.3 netmask 255.255.255.255 up

3 route add -host 192.168.1.3 dev eth0:0

2,创建 ipvs.sh 脚本,并执行

#!/bin/bash

#ipvs.sh

1. ipvsadm -C

2. ipvsadm -A -t 192.168.1.3:80 -s rr

3. ipvsadm -a -t 192.168.1.3:80 -r 192.168.1.4:80 -g

4. ipvsadm -a -t 192.168.1.3:80 -r 192.168.1.5:80 -g

3,配置 Real Server 真实服务器(192.168.1.4)

1. ifconfig eth0 192.168.1.4 broadcast 192.168.1.255 netmask 255.255.255.0 up

2. ifconfig lo:0 192.168.1.3 netmask 255.255.255.255 up

3. route add -host 192.168.1.3 dev lo:0

4,创建 arp.sh脚本,并执行

#!/bin/bash

#arp.sh

1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

2. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

4. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

5,配置 Real Server 真实服务器(192.168.1.5)

1. ifconfig eth0 192.168.1.5 broadcast 192.168.1.255 netmask 255.255.255.0 up

2. ifconfig lo:0 192.168.1.3 netmask 255.255.255.255 up

3. route add -host 192.168.1.3 dev lo:0

6,创建 arp.sh 脚本,并执行

#!/bin/bash

#arp.sh

1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

2. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

4. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

LVS TUNNEL 模式:

Summary:

采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。

为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。

真实的服务器将响应处理后的数据直接返回给客户端。

这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,

集群系统的最大吞吐量可以提高10倍。

优点:

1. 由于通过IP Tunneling 封装后,封装后的IP包的目的地址为Real-server的IP地址,

那么只要Real-server的地址能路由可达,Real-server在什么网络里都可以,这样可以减少对于公网IP地址的消耗。

缺点:

因为要处理IP Tunneling封装和解封装的开销,那么效率不如DR模式。

与APV优缺点比较:

1. 类似于APV的三角传输模式。

2. APV可以将RS保护在后台,LVS的RS会暴露在外面。

3. 由于DR的模式设计,LVS的性能可能会比APV要高。

工作过程:

1)客户请求数据包,目标地址VIP发送到LB上。

2)LB接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。然后发送出去。

3)RS节点服务器根据IP Tunnel包头信息(此时就又一种逻辑上的隐形隧道,只有LB和RS之间懂)收到请求包,然后解开IP Tunnel包头信息,得到客户的请求包并进行响应处理。

4)响应处理完毕之后,RS服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源IP地址还是VIP地址。

1,Linux Director 负载调度器

1 ifconfig eth0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up

2 ifconfig eth0:0 192.168.1.3 netmask 255.255.255.255 up

3 route add -host 192.168.1.3 dev eth0:0

2,创建 ipvs.sh 脚本,并执行

#!/bin/bash

#ipvs.sh

1. ipvsadm -C

2. ipvsadm -A -t 192.168.1.3:80 -s rr

3. ipvsadm -a -t 192.168.1.3:80 -r 192.168.1.4:80 -g

4. ipvsadm -a -t 192.168.1.3:80 -r 192.168.1.5:80 -g

3,配置 Real Server 真实服务器(192.168.1.4)

1. ifconfig eth0 192.168.1.4 broadcast 192.168.1.255 netmask 255.255.255.0 up

2. ifconfig lo:0 192.168.1.3 netmask 255.255.255.255 up

3. route add -host 192.168.1.3 dev lo:0

4,创建 arp.sh脚本,并执行

#!/bin/bash

#arp.sh

1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

2. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

4. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

5,配置 Real Server 真实服务器(192.168.1.5)

1. ifconfig eth0 192.168.1.5 broadcast 192.168.1.255 netmask 255.255.255.0 up

2. ifconfig lo:0 192.168.1.3 netmask 255.255.255.255 up

3. route add -host 192.168.1.3 dev lo:0

6,创建 arp.sh 脚本,并执行

#!/bin/bash

#arp.sh

1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

2. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

4. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[LVS] NAT mode with RR method.

1. Summary;

NAT模式下,LVS RR method配置方式,测试结果。

与APV优缺点:

RR算法与APV的RR算法基本一致,没有特殊区别。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s rr

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80 -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

/usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

/usr/local/nginx/sbin/nginx

On Client:

1. 执行 wget http://11.11.11.12. 多次。

2. 在LVS上,执行ipvsadm -L -n --stats 查看SLB 统计信息。

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

[Expected result]:

每个RS的访问次数应该相等。

[[email protected] ipv4]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                     12       66       43     4799     5701

-> 22.22.22.23:80                      6       33       23     2544     3086

-> 22.22.22.24:80                      6       33       20     2255     2615

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

[Topo]

client: IP:11.11.11.11

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |

| |

| |

nginx1   nginx2

IP:22.22.22.23   IP: 22.22.22.24

[LVS] NAT mode with RR method.

1. Summary;

NAT模式下,LVS RR method配置方式,测试结果。

与APV优缺点:

LVS的WRR与APV的RR+group weight基本一致。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s wrr

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80 -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 执行 wget http://11.11.11.12. 多次。

2. 在LVS上,执行ipvsadm -L -n --stats 查看SLB 统计信息。

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

[Expected result]:

每个RS的访问次数应该相等。

[[email protected] ipv4]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                     12       66       43     4799     5701

-> 22.22.22.23:80                      6       33       23     2544     3086

-> 22.22.22.24:80                      6       33       20     2255     2615

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

[Topo]

client: IP:11.11.11.11

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |

| |

| |

nginx1   nginx2

IP:22.22.22.23   IP: 22.22.22.24

[LVS] NAT mode with LC method.

1. Summary;

NAT模式下,LVS LC method配置方式,测试结果。

与APV优缺点:

1. LVS的LC算法与APV的LC算法稍有差别。

2. LVS的LC没有“颗粒度”概念,只是简单的看哪个RS的连接数少,就将请求转到哪个RS上。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s lc

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80  -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80  -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 启动2台client,执行 "telnet 11.11.11.12 80" 多次。 基数次访问用client1, 偶数次访问用client2. 目的是为了保证client1的请求全部在RS1上,client2的请求全部在RS2上。

2. 在client1上,执行pkill -9 telnet. 将client1与RS1的连接全部断开。

3. 这时,在LVS统计中,可以看到,只有RS2的连接。

4. 在client1上,多次执行"telnet 11.11.11.12 80"。

5. 在LVS上,观察RS访问状态。

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

[Expected result]:

由于RS2的连接数大于RS1的连接数。所以,client1的全部请求,都应该hit到RS1上。此为LC算法的目的.

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http lc

-> 22.22.22.23:http             Masq    1      10         20

-> 22.22.22.24:http             Masq    1      10         20

TCP  11.11.11.13:http rr

-> 22.22.22.23:http             Masq    1      0          0

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http lc

-> 22.22.22.23:http             Masq    1      10         20

-> 22.22.22.24:http             Masq    1      0          30

TCP  11.11.11.13:http rr

-> 22.22.22.23:http             Masq    1      0          0

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http lc

-> 22.22.22.23:http             Masq    1      10         20

-> 22.22.22.24:http             Masq    1      6          30

TCP  11.11.11.13:http rr

-> 22.22.22.23:http             Masq    1      0          0

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

[Topo]

两个client: IP:11.11.11.11/11.11.11.2

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |

| |

| |

nginx1   nginx2

IP:22.22.22.23   IP: 22.22.22.24

[LVS] NAT mode with WLC method.

1. Summary;

NAT模式下,LVS WLC method配置方式,测试结果。

与APV优缺点:

WLC与LC基本一致,区别在于Weight。 如设置两个RS1,RS2,weight值为10和5:

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80 -w 5 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80 -w 10 -m

请求会按照5:10的比例分配到RS1和RS2上,当RS上的连接数小于5:10的关系时,会将后续的请求分配到连接数低的RS上,直到连接数比例达到5:10.

此后将会继续按照5:10的比例分配连接。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s wlc

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80 -w 5 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80 -w 10 -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 启动2台client,执行 "telnet 11.11.11.12 80" 多次。 基数次访问用client1, 偶数次访问用client2. 目的是为了保证client1的请求全部在RS1上,client2的请求全部在RS2上。

2. 在client1上,执行pkill -9 telnet. 将client1与RS1的连接全部断开。

3. 这时,在LVS统计中,可以看到,只有RS2的连接。

4. 在client1上,多次执行"telnet 11.11.11.12 80"。

5. 在LVS上,观察RS访问状态。

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

[Expected result]:

@step5: 由于RS2的连接数大于RS1的连接数。所以,client1的全部请求,都应该hit到RS1上。此为LC算法的目的.

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http lc

-> 22.22.22.23:http             Masq    1      10         20

-> 22.22.22.24:http             Masq    1      10         20

TCP  11.11.11.13:http rr

-> 22.22.22.23:http             Masq    1      0          0

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http lc

-> 22.22.22.23:http             Masq    1      10         20

-> 22.22.22.24:http             Masq    1      0          30

TCP  11.11.11.13:http rr

-> 22.22.22.23:http             Masq    1      0          0

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http lc

-> 22.22.22.23:http             Masq    1      10         20

-> 22.22.22.24:http             Masq    1      6          30

TCP  11.11.11.13:http rr

-> 22.22.22.23:http             Masq    1      0          0

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

[Topo]

两个client: IP:11.11.11.11/11.11.11.2

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |

| |

| |

nginx1   nginx2

IP:22.22.22.23   IP: 22.22.22.24

[LVS] DH method.

1. Summary;

DH算法通过Hash 目的IP,将相同目的IP的请求都分配到某一台RS上。

如果是NAT模式,因为所有client都向同一VIP请求,所以即使后台有多个RS,LVS也都会将请求分配到其中1台RS上。

DH算法主要是工作在有Cache服务器的透明传输模式中。目的是保持后续的请求都hit到同一RS上。

Internet

|

|------cache array

|

|-----------------------------

|                |

DH               DH

|                |

Access            Access

Network1          Network2

参考文档:

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.ipvsadm.html#DH

与APV优缺点:

1. APV不支持哈希目标地址算法

2. 对于在Cache集群服务器使用场景下,APV的算法支持可能有所不足。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s dh

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80  -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80  -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 启动2台client,在client1上多次访问vip。

2. 在client2上多次访问vip。

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

[Expected result]:

访问同一VIP的请求将会全部分配到某一台RS上。

[[email protected] vs]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                     16       38       22     2104     1272

-> 22.22.22.23:80                      0        0        0        0        0

-> 22.22.22.24:80                     16       38       22     2104     1272

[[email protected] vs]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                     39       94       55     5200     3172

-> 22.22.22.23:80                      0        0        0        0        0

-> 22.22.22.24:80                     39       94       55     5200     3172

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

[Topo]

两个client: IP:11.11.11.11/11.11.11.2

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |

| |

| |

nginx1   nginx2

IP:22.22.22.23   IP: 22.22.22.24

[LVS] NAT mode with SH method.

1. Summary;

NAT模式下,LVS SH method配置方式,测试结果。

与APV优缺点:

1. 可以设置哈希IP位数。

2. 对保持有特殊需求的用户,有增强的HIP,CHI算法.

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s sh

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80  -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80  -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 启动2台client,在client1上多次访问vip。

2. 在client2上多次访问vip。

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

[Expected result]:

从同一个Client发出的请求将会全部分配到某一台RS上。

[[email protected] vs]# ipvsadm -ln --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                      8       16        8      896      480

-> 22.22.22.23:80                      8       16        8      896      480

-> 22.22.22.24:80                      0        0        0        0        0

[[email protected] vs]# ipvsadm -ln --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                     18       36       18     2016     1080

-> 22.22.22.23:80                      8       16        8      896      480

-> 22.22.22.24:80                     10       20       10     1120      600

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

[Topo]

两个client: IP:11.11.11.11/11.11.11.2

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |

| |

| |

nginx1   nginx2

IP:22.22.22.23   IP: 22.22.22.24

[LVS] SED method.

1. Summary;

基于wlc算法,举例说明:

ABC三台机器权重分别为123,连接数也分别为123, 如果使用wlc算法的话,因为当前比例正好是1:2:3,所以新的请求会随机分给ABC中任意一个。

如果用SED算法,会进行这样一个运算:

A:(1+1)/1

B:(1+2)/2

C:(1+3)/3

根据计算结果,会把请求分配给C服务器上。

与APV优缺点:

1. LVS的SED算法与APV的LC算法稍有差别。

2. LVS的SED没有“颗粒度”概念,而是采用上面的算法,选择一个权重最大的RS。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s sed

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80  -w 1 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80  -w 2 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.25:80  -w 3 -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 保证三台服务器上的连接数分别为123.

2. 再新建一条连接,看LVS会将请求分配个哪个RS.

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

[Expected result]:

将会分配给22.22.22.25这个RS上。

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

[Topo] -- Pasted as attachment

两个client: IP:11.11.11.11/11.11.11.2

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |   |

| |   |

| |   |

nginx1   nginx2 nginx3

IP:22.22.22.23   IP: 22.22.22.24   IP:22.22.22.25

[LVS] NQ method.

1. Summary;

无需队列,如果有台RS的连接数=0,就直接分配过去,不需要进行SED运算。

与APV优缺点:

1. APV没有NQ算法。

2. NQ也是LC算法的一种,相比较SED算法,NQ的处理会快一些。

3. 使用场景应该不多。

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s nq

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80 -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80 -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 保证两台RS上各有5个连接。

2. 断开RS2上的所有连接。

3. 再次访问VIP,查看LVS与哪个RS建立连接。

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

[Expected result]:

LVS将会与RS2建立连接。

如果RS1和RS2连接数都不为0,则按照SED算法分配连接。

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http nq

-> 22.22.22.23:http             Masq    1      5          0

-> 22.22.22.24:http             Masq    1      5          0

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http nq

-> 22.22.22.23:http             Masq    1      5          0

-> 22.22.22.24:http             Masq    1      0          5

[[email protected] vs]# ipvsadm

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  11.11.11.12:http nq

-> 22.22.22.23:http             Masq    1      5          0

-> 22.22.22.24:http             Masq    1      2          5

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

[Topo]

两个client: IP:11.11.11.11/11.11.11.2

|

|

LVS:  VIP:11.11.11.12

|

|

| IP:22.22.22.22

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

| |   |

| |   |

| |   |

nginx1   nginx2 nginx3

IP:22.22.22.23   IP: 22.22.22.24   IP:22.22.22.25

[LVS] LBLC LBLCR

1. Summary;

lblc 基于局部性的最少链接(Locality-Based Least Connections):“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP 地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的 工作负载,则用”最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。

lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication):”带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法 的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找 出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连 接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服 务器组中删除,以降低复制的程度。

与APV优缺点:

1. APV没有类似于LBLC,LBLCR的算法。

2. 这两种算法主要应用于Cache集群环境中,在此场景中,APV的算法支持可能有所不足。

参考文档:

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.ipvsadm.html#DH

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

[Test Steps]

On LVS:

1. echo "1" >/proc/sys/net/ipv4/ip_forward

//参数值为1时启用ip转发,为0时禁止ip转发,在NAT模式下此操作是必须的。

2.

ipvsadm -C

ipvsadm -A -t 11.11.11.12:80 -s sh

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.23:80  -m

ipvsadm -a -t 11.11.11.12:80 -r 22.22.22.24:80  -m

//上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,

//第二行是添加一条新的虚拟IP记录,同时指定采用轮询算法。

//第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS的工作模式为NAT模式。

//-g代表gateway,意思为直接路由,还可以有-i(internet)隧道模型,-m(masq)伪装,NAT模式

On Nginx Server:

1. 修改/usr/local/apache2/conf/httpd.conf,将 80端口改为8888.

2.启动Apache:

./usr/local/apache2/bin/apachectl start

3.修改/usr/local/nginx/conf/nginx.conf,将“upstream slbserver”改为:

upstream slbserver{

server 127.0.0.1:8888;

}

4. 将网关指向 LVS机器的IP。

5.启动Nginx:

./usr/local/nginx/sbin/nginx

On Client:

1. 启动2台client,在client1上多次访问vip。

2. 在client2上多次访问vip。

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

[Expected result]:

从同一个Client发出的请求将会全部分配到某一台RS上。

[[email protected] vs]# ipvsadm -ln --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                      8       16        8      896      480

-> 22.22.22.23:80                      8       16        8      896      480

-> 22.22.22.24:80                      0        0        0        0        0

[[email protected] vs]# ipvsadm -ln --stats

IP Virtual Server version 1.2.1 (size=1048576)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

-> RemoteAddress:Port

TCP  11.11.11.12:80                     18       36       18     2016     1080

-> 22.22.22.23:80                      8       16        8      896      480

-> 22.22.22.24:80                     10       20       10     1120      600

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

[Topo]

Internet

|

|------cache array

|

|-----------------------------

|                |

DH               DH

|                  |

Access            Access

Network1          Network2

时间: 2024-11-08 10:50:43

LVS Mode&Method的相关文章

LVS之NAT模型架构

LVS-NAT 一.架构平台环境 系统平台:CentOS 6.5 64bit  vmw10.0 lvs01(RS),lvs02(RS),lvs03(Director) 相关服务和专用名词定义 Director:负责调度集群的主机:也简称为调度器.分发器 VIP:Virtual IP 向外提供服务的IP:通常此IP绑定域名 DIP:与内部主机RIP通信的IP,在Director主机上 RIP:RealServer IP:内部真正提供服务的主机 CIP:客户端IP 二.LVS-NAT架构 三.LVS

Lvs之NAT、DR、TUN三种模式的应用配置案例

LVS 一.LVS简介     LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件之一. 二.LVS的分类 LVS-NAT:地址转换 LVS-DR: 直接路由 LVS-TUN:隧道 三.ipvsadm用法 其实LVS的本身跟iptables很相似,而且连命令的使用格式都很相似,其实LVS是根据iptables的框架开发的,那么LVS的本身分成了两个部分,第一部分是工作在内

CentOS 7.3 部署LVS 集群

简介 LVS的全称Linux vitual system, linux vitual server 是由目前阿里巴巴的著名工程师章文嵩博士开发的一款开源软件.LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务,只是把特定的请求转发给对应的realserver(真正提供服务的主机),从而实现集群环境中的负载均衡. LVS的核心组件ipvs工作在kernel中,是真正的用于实现根据定义的集群转发规则把客户端的请求转发到特定的realserver.而另一个组件i

Neutron:LBaaS v2——ipvsadm实现LVS

LBaaS v2 Neutron 包含负载均衡服务,即LBaaS.负载均衡器可以将用户的访问流量通过算法均摊到多台主机实例上,实现以 Scale-out的方式扩容应用的性能.Neutron LBaaS 包含以下核心的概念: 服务器池 Pool:服务器池内包含了多个服务器成员,同一个池内的服务器至少包含一种统一的对外服务. 服务器成员 Member:服务器成员,包含服务器的IP和端口. 监听器 Listener:监听器将持续监听指定的端口上的连接请求.一个负载均衡器中允许存在多个监听器,同时通过共

linux集群系列(3) --- LVS之负载均衡集群DR实例

一.简介     1.1.  负载均衡集群:LB (load balancing) LVS 是linux virtual server 的简写,即linux的虚拟服务器,是一个虚拟的服务器集群系统.ip负载均衡技术是在负载调度器的实现技术中效率最高的,在已有的ip负载均衡技术中,主要通过网络地址转换(即VS/NAT 技术).由于使用nat技术会使分派器成为瓶颈,所以提出了通过ip隧道实现虚拟服务器(即VS/TUN)和通过直接路由实现虚拟服务器的方法即VS/DR. VS/NAT.VS/TUN和VS

LVS之NAT和DR服务脚本

NAT服务控制脚本 #!/bin/bash # # chkconfig: - 88 12 # description: LVS script for VS/NAT # . /etc/rc.d/init.d/functions # VIP=192.168.2.168 DIP=192.168.2.170 RIP1=192.168.2.171 RIP2=192.168.2.172 # case "$1" in start) /sbin/ifconfig eth0:1 $VIP netmask

深入理解keepalived+lvs

深入理解keepalived+lvs keepalived篇: master和bakeup之间的通信(vrrp协议) master : 172.25.88.1 bakeup :172.25.88.2 1.在matser上抓vrrp的包 [[email protected] ~]# /etc/init.d/keepalived startStarting keepalived:                                       [  OK  ][[email protec

第三十三天 LVS基础原理、调度算法、NAT和DR的实现 、LXC虚拟化

大规模站点构建框架 LVS的基础原理 LVS调度方法及NAT模型的实现 LVS  dr模型及lxc虚拟化 一.大规模站点架构框架 http: stateless keep-alive cookie: session 系统的:可扩展性.高可用性:99%, 99.9%, 99.999% .性能: 可扩展性: 容量:在一定时间内能完成的工作量 scale up: 向上扩展 scale out: 向外扩展 Cluster: 集群 构建高可扩展性系统的重要原则:在系统内部尽量避免串行化和交互 调度器:di

集群之LVS

LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.LVS特点具有可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份).我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的.在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一