目录:

1.lvs简介

2.lvs模式(四种)

3.lvs调度算法

3.安装

版本说明:
ipvs1.26
系统版本:
2.6.32-642.el6.x86_64

1.lvs简介

-  负载均衡 这里用LVS

3791ae9877a974472f2b233c13b7e298.png-wh_

从2.4.24以后IPVS已经成为linux官方标准内核的一部分,
lvs已经被Linux集成到内核中了,内核模块为ipvs.不能直接配置内核中的ipvs,而需要使用ipvs的管理工具ipvsadm进行管理。通过keepalived也可以管理LVS。
LVS体系结构与工作原理简单描述
所以我们要调用ipvs内核的两种方法:
- ipvsadm 命令行管理ipvs (了解即可)
- keepalived 管理   (使用这种)

2.lvs四种模式介绍:

NAT 模式

DR  模式   (重点是DR模式,其他模式了解即可)

tun 隧道模式

full-NAT模式 淘宝自创模式


其中DR模式效率最高

DR模式原理:

spacer.gif

名词解释:

CIP : 客户源IP

VIP : 虚拟IP

DIP : LB 调度器IP


DR模式原理: 直接路由模式

lvs 负载均衡器主要做的是修改目的mac,将mac改为某一台real_server

real server 主要做的是 1.绑定vip 2.抑制arp

数据包流程:

客户求请求由LVS接受,但是由Real Server返还给用户信息,不经过LVS转发.

  这里引发一个问题: 当用户请求时,源IP是CIP,目标地址是VIP;LVS调度器将请求转发给Real Server处理后再发送给用户,这个时候源IP是RIP,目标地址是CIP,但是用户并没有请求RIP,用RIP响应请求时CIP不会接受,所以需要用VIP响应请求。

spacer.gif

所以DR原理是:

DR模式下LVS和Real server都需要配备一样的VIP(Real Server通过将VIP绑定在loopback实现).

但是 同一个局域网中,多台服务器出现同样的IP地址会引起冲突(arp协议的ip地址冲突检测机制,免费arp),so 那么如何工作下去?

需要在调度服务器上设置一个VIP和DIP, 每个RS也有一个RIP和VIP,但是RS需要对VIP地址做隐藏,不会应答ARP广播,只有在响应CIP时,作为源地址使用.

当产生请求时,LVS将目标mac修改为RS中的MAC,然后转发到相应的RS上处理,此时源,目的IP都没有改变,RS收到LVS转发来的包时,发现mac是自己的,IP也是自己的,所以合法接收,并直接回复,不经过LVS.

   注意: 免费arp,主机发送自己的ip查询mac,如果没有应答ok,有应答出事.

spacer.gif

其他模式简介:

NAT模式简介:

这个是通过网络地址转换的方法来实现调度的。

   首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

spacer.gif

原理图简述:

1)客户端请求数据,目标IP为VIP

2)请求数据到达LB服务器,LB根据调度算法将目的地址修改为RIP地址及对应端口(此RIP地址是根据调度算法得出的。)并在连接HASH表中记录下这个连接。

3)数据包从LB服务器到达RS服务器webserver,然后webserver进行响应。Webserver的网关必须是LB,然后将数据返回给LB服务器。

4)收到RS的返回后的数据,根据连接HASH表修改源地址VIP&目标地址CIP,及对应端口80.然后数据就从LB出发到达客户端。

5)客户端收到的就只能看到VIP\DIP信息。

TUN模式

采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。

VS/TUN的工作流程图如下所示,它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。

spacer.gif

原理图过程简述:

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

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

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

4)响应处理完毕之后,RS服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源IP地址还是VIP地址。(RS节点服务器需要在本地回环接口配置VIP,后续会讲)


各种模式优缺点对比:

DR模式VS/NATVS/TUN

1. 高并发

RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)


2. 同一个局域网:

DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面


3. RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制


NAT模式优缺点:

1、NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点

2、只需要在LB上配置一个公网IP地址就可以了。

3、每台内部的节点服务器的网关地址必须是调度器LB的内网地址。

4、NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

可以WAN 环境

但是需要隧道支持.

优点:性能最高

缺点: 不能跨域LAN

优点:地址和端口转换

缺点: 效率低

优点:WAN环境,加密数据

缺点:需要隧道支持

  1. lvs调度算法

参考此文章:http://www.linuxvirtualserver.org/zh/lvs4.html

共8种算法,分为两类:

固定调度算法和动态调度算法:

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

算法说明
rr
 轮询算法
wrr

加权轮询调度:

它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。

wlc

加权最小连接调度:

假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS

dh  

目的地址hash调度:

以目的地址为关键字查找一个静态hash表来获得需要的RS

sh

源地址hash调度:

以源地址为关键字查找一个静态hash表来获得需要的RS

lc

最小连接数调度:

IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.

lblc

基于地址的最小连接数调度:

将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑

LVS算法选型:

1、一般的网络服务,如http,mail,mysql等常用的LVS调度算法为:

a.基本轮询调度rr

b.加权最小连接调度wlc

c.加权轮询调度wrc

2、基于局部性的最小连接lblc和带复制的给予局部性最小连接lblcr主要适用于web cache和DB cache

3、源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一。

  1. lvs安装

安装LVS软件

1)在安装LVS软件之前,先确定两条HTTPserver是能够正常访问的。

2)下载软件

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

这里我们使用的2.4版本,并且注意内核是2.6版本的,如果你的版本是6.X版本的话,那么可以使用2.6版本

3)编译安装

需要创建一个软连接:ln -s /usr/src/kernels/2.6.18-238.el5-i686 /usr/src/linux

此处红色许根据自己的系统来进行定义,可以使用tab键来补齐。

tar -zxf ipvsadm-1.24.tar.gz

cd ipvsadm-1.24

make

make install

lsmod |grep ip_vs     

如果此时没有显示,则表示系统未将ipvs模块加载进去.

ipvsadm --》因为此时系统还没有把ipvs模块加载进系统,需要我们执行ipvsadm命令才会加载进去

或者modprobe ip_vs

DR模式

在real server上需要做的是:

1.添加lo口的vip

ifconfig lo:0 192.168.255.10/32 up

route add -host 192.168.255.10 dev lo

2.在realserver上抑制rap响应:

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

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

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

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

小结:

lvs故障排错理论

1.调度器上LVS的规则和IP的正确性

2.RS上做VIP绑定和arp抑制检查

lvs试验:

3台机器,一台lvs 2台nginx

3台机器都安装ipvsadm,如果报错说明下列依赖包没有,yum安装

yum install libnl* popt* -y

lvs:

    ipvsadm -C

    ipvsadm -Ln

    ipvsadm -A -t 192.168.255.111:80 -s rr -p 20

    ipvsadm -a -t 192.168.255.111:80 -r 192.168.255.137 -g -w 1

    ipvsadm -a -t 192.168.255.111:80 -r 192.168.255.138 -g -w 1

real server:

  373  cat /proc/sys/net/ipv4/conf/lo/arp*

  374  cat /proc/sys/net/ipv4/conf/all/arp

 若全为0则:

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

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

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

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

添加vip地址和路由:

ifconfig lo:0 192.168.255.111/32 up

route add -host 192.168.255.111 dev lo:0