一、lvs的三种模式:

1、VS/NAT 模式

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

缺点:请求和响应报文都必须经过调度器进行地址重写,当客户端请求越来越多时,调度器的处理能力将成为瓶颈。

2、VS/TUN 模式

调度器把请求报文直接通过IP隧道转发给真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文,采用VS/TUN后,集群系统的最大吞吐量可以提高10倍。

3、VS/DR 模式

通过改写请求报文的MAC地址,将请求发给真实服务器,而真实服务器通过路由将响应直接返回给客户。

优点:同VS/TUN技术一样,VS/DR技术可以极大的提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一个物理网段上。

三种IP负载均衡技术的优缺点归纳在下表中:

 

VS/NAT

VS/TUN

VS/DR

Server

any

Tunneling

Non-arp device

server network

private

LAN/WAN

LAN

server number

low (10~20)

High (100)

High (100)

server gateway

load balancer

own router

Own router

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

二、常用的四种负载调度算法

1)轮叫(Round Robin)--rr

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

2)加权轮叫(weighted Round Robin—wrr

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

3)最少链接(Least Connections)

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

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

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

各种调度算法:

l 轮叫调度(Round-Robin Scheduling)
* 加权轮叫调度(Weighted Round-Robin Scheduling)
* 最小连接调度(Least-Connection Scheduling)
* 加权最小连接调度(Weighted Least-Connection Scheduling)
* 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
* 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
* 目标地址散列调度(Destination Hashing Scheduling)
* 源地址散列调度(Source Hashing Scheduling)
* 最短预期延时调度(Shortest Expected Delay Scheduling)
* 不排队调度(Never Queue Scheduling)
对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,

实验一、LVS/NAT模式

OS: centos5.5 * 3 ipvsadm:ipvsadm-1.24

 

Eth0

Eth1

虚拟IP eth0:0

安装LVS机器

IP:128.1.37.86

NETMASK:255.255.255.0

GATEWAY=128.1.37.1

IP:10.10.10.130 NETMASK=255.255.255.0

 

Realserver1

IP:10.10.10.131

NETMASK=255.255.255.0

GATEWAY=10.10.10.130

  

Realserver2

IP:10.10.10.132

NETMASK=255.255.255.0

GATEWAY=10.10.10.130

  

1.、安装lvs机器

先创建内核链接

ln -s /usr/src/kernels/2.6.18-53.e15-i686/ /usr/src/linux

再安装ipvsadm(注意ipvsadm一定要根据自己linux的内核版本安装对应的版本)

创建一个脚本,用来设置下系统的部分属性:

Vim lvs.sh

内容如下:

echo "1">/proc/sys/net/ipv4/ip_forward #开启路由功能

ipvsadm -C #清楚ipvsadm的规则

ipvsadm -A -t 128.1.37.86:80(本机的IP) -s rr(轮叫算法)

ipvsadm -a -t 128.1.37.86:80 -r 10.10.10.131:80 -m -w 1 #添加转发规则,-m伪装(NAT转换) -w权重值

ipvsadm -a -t 128.1.37.86:80 -r 10.10.10.132:80 -m -w 1 #添加转发规则,-m伪装(NAT转换) -w权重值

实验二、LVS/DR模式

 

Eth0

Eth1

虚拟IP eth0:0

安装LVS机器

IP:128.1.37.202

NETMASK:255.255.255.0

GATEWAY=128.1.37.1

 

IP:128.1.20.205

broadcast 128.1.37.205

Netmask:255.255.255.255

#注意掩码为4个255

Realserver1

IP:128.1.37.203

NETMASK=255.255.255.0

GATEWAY=128.1.37.1

 

IP:128.1.20.205

broadcast 128.1.37.205

Netmask:255.255.255.255

#注意掩码为4个255

Realserver2

IP:128.1.37.204

NETMASK=255.255.255.0

GATEWAY=128.1.37.1

 

IP:128.1.20.205

broadcast 128.1.37.205

Netmask:255.255.255.255

#注意掩码为4个255

LVS机器的设置如下

vi /ect/sysctl.conf

添加或修改如下配置

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 1

net.ipv4.conf.default.send_redirects = 1

net.ipv4.conf.eth0.send_redirects = 1

执行sysctl  –p 命令 立即生效

设置这个IP为负载均衡的IP    -s rr为轮询的方式负载均衡

# ipvsadm -A -t 128.1.37.205:80 -s rr

添加这个负载集群IP的成员     -g 路由模式 -w权重值

# ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.203 -g -w 1

# ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.204 -g -w 1

配置负载均衡虚拟IP地址

# ifconfig eth0:0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up 

配置主机路由

# route add -host 128.1.37.205 dev eth0:0

真实web服务器的设置如下:(每台设置都相同)

vi /ect/sysctl.conf

添加或修改如下配置

net.ipv4.ip_forward = 0

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

使realserver不响应arp请求,执行sysctl  –p 命令 立即生效

配置负载均衡虚拟IP地址

# ifconfig lo:0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up

配置主机路由

# route add -host 128.1.37.205 dev lo:0

实验三、LVS/TUN模式

 

Eth0

Eth1

虚拟IP tunl0

安装LVS机器

IP:128.1.37.202

NETMASK:255.255.255.0

GATEWAY=128.1.37.1

 

IP:128.1.20.205

broadcast 128.1.37.205

Netmask:255.255.255.255

#注意掩码为4个255

Realserver1

IP:128.1.37.203

NETMASK=255.255.255.0

GATEWAY=128.1.37.1

 

IP:128.1.20.205

broadcast 128.1.37.205

Netmask:255.255.255.255

#注意掩码为4个255

Realserver2

IP:128.1.37.204

NETMASK=255.255.255.0

GATEWAY=128.1.37.1

 

IP:128.1.20.205

broadcast 128.1.37.205

Netmask:255.255.255.255

#注意掩码为4个255

LVS机器的设置如下

ifconfig tunl0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up

route add -host 128.1.37.205 dev tunl0

ipvsadm -A -t 128.1.37.205:80 -s rr

ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.203 -i

ipvsadm -a -t 128.1.37.205:80 -r 128.1.37.204 -i

ipvsadm

真实web服务器的设置如下:(每台设置都相同)

ifconfig tunl0 128.1.37.205 broadcast 128.1.37.205 netmask 255.255.255.255 up

route add -host 128.1.37.205 dev tunl0

echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/tunlo/arp_announce

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p