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。
- 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的访问次数应该相等。
[root@RHEL6 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的访问次数应该相等。
[root@RHEL6 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算法的目的.
[root@RHEL6 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
[root@RHEL6 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
[root@RHEL6 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算法的目的.
[root@RHEL6 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
[root@RHEL6 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
[root@RHEL6 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上。
[root@RHEL6 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
[root@RHEL6 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上。
[root@RHEL6 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
[root@RHEL6 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算法分配连接。
[root@RHEL6 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
[root@RHEL6 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
[root@RHEL6 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上。
[root@RHEL6 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
[root@RHEL6 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
LVS Mode&Method的更多相关文章
- Lvs之NAT、DR、TUN三种模式的应用配置案例
LVS 一.LVS简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的 ...
- 3、使用keepalived高可用LVS实例演示
回顾: keepalived: vrrp协议的实现: 虚拟路由器: MASTER,BACKUP VI:Virtual Instance keepalived.conf GLOBAL VRRP LVS ...
- LVS的调度算法
LVS的调度算法(Scheduling Method)一共有10种 一.静态方法:仅根据算法本身进行调度 1.rr(Round Robin):轮询 2.wrr(Werghted Round Robin ...
- LVS安装使用详解
简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. ...
- linux服务之lvs
开发语言: 服务器端:在内核中实现,无守护程序 客户端:一般是cli界面下的ipvsadm命令 相关包:ipvsadm 在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件IPVS.基于 ...
- LVS Nginx HAProxy 优缺点
搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...
- lvs学习笔记
本人身为一个网工,最近一直在工作中学习linux的相关知识.前短时间通过自查资料学习了lvs的相关内容,摘录部分整理后和大家分享,内容较多,较琐碎,望见谅!!! LVS 从Linux内核版本2.6起, ...
- LVS初始使用步骤
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. 现在L ...
- LVS之NAT和DR服务脚本
NAT服务控制脚本 #!/bin/bash # # chkconfig: - 88 12 # description: LVS script for VS/NAT # . /etc/rc.d/init ...
随机推荐
- java编程基础——栈压入和弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- MongoDB+nodejs查询并返回数据
const express = require('express');const router = express.Router(); const Monk = require('monk');con ...
- GVIM——简直美如画,有没有!
"========================================== " Author: wklken " Version: 9.1 " Em ...
- mysql--连接查询(内外连接)
连接查询又称多表查询,查询到的字段来自于多个表中的数据. 一. 连接查询的分类和语法 1.分类 按标准分: 92标准:只支持内连接 99标准:支持内连接和.外连接和全外连接 功能进行分类: 内连接:i ...
- struts2、hibernate的知识点
以下内容是我在复习struts2.hibernate和spring的时候记下得到,部分书上找不到的内容来自网络 以下是网络部分的原文网站: http://blog.csdn.net/frankaqi/ ...
- Datatable 省略显示列中内容,当鼠标放在内容上,悬浮显示全部内容
第一种方法是网上看到的,没成功,贴出来参考一下 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- aop配置问题引发的报错
今天在使用注解配置aop时出现了几次的错误 INFO - Refreshing org.springframework.context.support.ClassPathXmlApplicationC ...
- PHP递归排序怎么实现的?
递归算法对于任何一个编程人员来说,应该都不陌生.因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂. 对于PHP新手来说,递归算法的实现原理可能不容易理解.但是 ...
- 【Isamaru, Hound of Honda】SVN常用命令补遗
一些常用的 就是svn commit的时候 都必须是最新版本的东西 不能不是,但是其实只是.svn在控制,所以可以update到最新版本再svn merge -r 20:10 将版本10和20的融合, ...
- 51nod_1459 最短路 dijkstra 特调参数
好多基础知识都没补完,只好看到.用到一个赶紧补全一个,并且保证下次需要的时候直接用,不用回来再补: 其实这个算法是在补同余最短路的时候用到的,当时突然发现理解算法导论上的原理甚至有效性证明,但是就是没 ...