Lvs网络负载均衡

网络负载均衡

1.基于网络设备的负载均衡(设备层面)

Cisco的以太网通道、F5负载均衡

2.基于操作系统的负载均衡

Lvs常用的三种负载均衡模式

1.Lvs nat模式

2.Lvs ip-tun模式

3.Lvs dr模式

 

lvs net 模式

1)Virtual Server via Network Address Translation(VS/NAT)

通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的相应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

Ip tun模式

2)Virtual Server via IP Tunneling(VS/TUN)

采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决整个问题,调度器把请求报文IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,负载均衡系统的最大吞吐量可以提高10倍。

Lvs dr模式

3)Virtual Server via Direct Routing(VS/DR)

VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。

四种常用的轮叫负载算法

1)轮叫(Round Robin)

调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

2)加权轮叫(Weighted Round Robin)

调度器通过“加权轮叫”调度算法根据实际服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3)最少链接(Least Connections)

调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。

4)加权最少连接(Weighted Least Connections)

在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

实验部分

一、lvs nat配置

准备部分

window中(外部用户)利用 VMnet1这块网卡来进行和Linux进行通信,设置静态ip地址为8.8.8.1,子网掩码为255.255.255.0。

准备三台linux服务器,分别为lvs-server,real-webserver1,ral-webserver2,lvs-server需要2块网卡,一块左侧网卡为VMnet1,和真实机的网卡相对称,第二块网卡用VMnet2,同其他2台linux webserver同属一个网段,所以需将另外2台WebServer的服务器网卡改为VMnet2。

lvs-server:

ifconfig eth0 8.8.8.8 netmask 255.255.255.0
ifconfig eth1 192.168.10.1 netmask 255.255.255.0

real-webserver1:

ifconfig eth0 192.168.10.2 netmask 255.255.255.0
route add default gw 192.168.10.1

real-webserver2:

ifconfig eth0 192.168.10.3 netmask 255.255.255.0
route add default gw 192.168.10.1

分别检测防火墙和SElinux状态

iptables -L -n  

sestatus

以上步骤做完后,可以检测网络连通性,windows上可以ping同lvs-server中的eth0网卡8.8.8.8,lvs-server中向左可以ping通windwos的8.8.8.1,向右可以ping通real-webserver1的地址192.168.10.2和real-webserver1的地址192.168.10.3,就是说3台linux服务器之间都可以相互ping通,则此时网络配置正确。

Lvs nat服务器脚本

lvs server:

echo 1 >/proc/sys/net/ipv4/ip_forward  #路由管道开启

安装ipvsadm软件

yum -y install ipvsadm

新建一个脚本

# vi ipvs.sh

#!/bin/bash
#lvs.sh

ipvsadm -C
ipvsadm -At 8.8.8.8:80 -s rr
ipvsadm -at 8.8.8.8: -r 192.168.10.2:80 -m
ipvsadm -at 8.8.8.8: -r 192.168.10.3:80 -m
ipvsadm -L -n

--增加执行权限
# chmod a+x ipvs.sh
--执行脚本
# ./ipvs.sh

分别在real-webserver1根目录下创建index.html文件 echo "192.168.10.2" >index.html,real-webserver2下echo "192.168.10.3" >index.html

此时,访问8.8.8.8,会分别轮询2台real-webserver,分别看到不同的ip地址。

二、lvs ip-tun配置

准备部分

window中(外部用户)利用 VMnet1这块网卡来进行和Linux进行通信,设置静态ip地址为200.168.10.4,子网掩码为255.255.255.0。

这种模式下lvs-server只需要1块网卡,所以需要停掉上次实验添加的eth1

在这种模式下,3台linux服务器都是用VMnet1来进行通信,所以,更改3台linux服务器的网卡为VMnet1。此时在windows下,能同时ping通linux3台服务器。

lvs-server:

ifconfig eth0 200.168.10.1
ifconfig eth1 down

--配置隧道网卡
ifconfig tunl0 200.168.10.10 netmask 255.255.255.255
--添加路由表
route add -host 200.168.10.10 dev tunl0

# vi ipvs.sh

#!/bin/bash
#lvs.sh

ipvsadm -C
ipvsadm -At 200.168.10.10:80 -s rr
ipvsadm -at 200.168.10.10:80 -r 200.168.10.2 -i
ipvsadm -at 200.168.10.10:80 -r 200.168.10.3 -i
ipvsadm -L -n

--增加执行权限
# chmod a+x ipvs.sh
--执行脚本
# ./ipvs.sh

real-webserver1:

--删除网关
route del default
ifconfig eth0 200.168.10.2

ifconfig tunl0 200.168.10.10 netmask 255.255.255.255
route add -host 200.168.10.10 dev tunl0

vi arp.sh

#/bin/bash
#arp.sh

echo 1 >/proc/system/net/ipv4/conf/tunl0/arp_ignore 
echo 2 >/proc/system/net/ipv4/conf/tunl0/arp_announce
echo 1 >/proc/system/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/system/net/ipv4/conf/all/arp_announce

# chmod a+x arp.sh
# ./arp.sh
--赋值脚本到200.168.10.3真实服务器
scp arp.sh 200.168.10.3:/root/ 

real-webserver2:

--删除网关
route del default
ifconfig eth0 200.168.10.3
--配置ip tun网卡
ifconfig tunl0 200.168.10.10 netmask 255.255.255.255
route add -host 200.168.10.10 dev tunl0
--执行上步复制过来的脚本
# ./arp.sh

分别在real-webserver1根目录下创建index.html文件 echo "200.168.10.2" >index.html,real-webserver2下echo "200.168.10.3" >index.html

此时,访问192.168.10.10,会分别轮询2台real-webserver,分别看到不同的ip地址。

二、lvs DR配置

lvs-server:

--关闭tunl0网卡
# ifconfig tunl0 down

# ifconfig eth0:0 200.168.10.10 netmask 255.255.255.255 up
# route add -host 200.168.10.10 dev eth0:0
# vi ipvs.sh

#!/bin/bash
#lvs.sh

ipvsadm -C
ipvsadm -At 200.168.10.10:80 -s rr
ipvsadm -at 200.168.10.10:80 -r 200.168.10.2 -g
ipvsadm -at 200.168.10.10:80 -r 200.168.10.3 -g
ipvsadm -L -n

# ./lvs.sh

real-webserver1:

# ifconfig tunl0 down

# ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up
# route add -host 200.168.10.10 dev lo:0

vi arp.sh

#/bin/bash
#arp.sh

echo 1 >/proc/system/net/ipv4/conf/lo/arp_ignore 
echo 2 >/proc/system/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/system/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/system/net/ipv4/conf/all/arp_announce

# chmod a+x arp.sh
# ./arp.sh

real-webserver2:

# ifconfig tunl0 down
# ifconfig lo:0 200.168.10.10 netmask 255.255.255.255 up
# route add -host 200.168.10.10 dev lo:0

vi arp.sh

#/bin/bash
#arp.sh

echo 1 >/proc/system/net/ipv4/conf/lo/arp_ignore 
echo 2 >/proc/system/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/system/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/system/net/ipv4/conf/all/arp_announce

# chmod a+x arp.sh
# ./arp.sh

同样,分别在real-webserver1根目录下创建index.html文件 echo "200.168.10.2" >index.html,real-webserver2下echo "200.168.10.3" >index.html

此时,访问192.168.10.10,会分别轮询2台real-webserver,分别看到不同的ip地址。

 

posted on 2016-06-06 22:04  gimin  阅读(390)  评论(0)    收藏  举报