首页 > 代码库 > LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

LBLoad balance)负载均衡集群

LVS-[NAT+DR]单实例实验

LVS+keeplived实验

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

逻辑可分为

1调度层 (Director):它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的

2[服务器池(server pool)/集群层(Real server)]:是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

3共享存储:它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

 


 

从实现上可分为三种模式

 1.网络地址转换模式NAT模式:调度器将请求的目标ip即vip地址改为realserver的ip 返回包也经过调度器。调度器再把源地址修改为vip地址

 2.隧道模式TUN模式:调度器将请求来的数据包封装加密通过ip隧道转发到后端的real server 上,而realserver 会直接报数据包返回给客户端,而不经过调度器。

 3直接路由模式DR 模式:调度器将请求来的数据包的目标mac地址改为realserver的mac地址返回的时候,不进过调度器,直接返回客户端。

技术分享

Director接收用户的请求,然后根据负载均衡算法选取一台realserver,将包转发过去,最后由realserver直接回复给用户。

例如:客户端cip-----------eth0:192.168.1.5     mac:01:29:0c:8d:1a

      调度器Director dip---eth0:192.168.1.6    mac:02:29:0c:8d:1b

      集群层服务器a rip ---eth0:192.168.1.7    mac:03:29:0c:8d:1c


 

    DR 原理:当一个客户端(client发送一个web请求调度器(Direcotr)时调度器服务器根据负载均衡算法服务器池(serverpool)中选择一台服务器(realserver,然后将client客户端的请求包的目标mac地址改为选择的服务器(real-server)的mac地址,选择的服务器(Real-server)即:目标服务器,最后该服务器(Real-server)收到包拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,注:【此时源src-ip与目标dsc-ip对调】发送到局域网。如果client与LVS同一网段,那么client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。

实例说明例如:

1.客户端发送一个web请求包 信息如下:

ip(src-ip):192.168.1.5   ---》    目标ip(dsc-ip):192.168.1.6

mac(Src-mac):01:29:0c:8d:1a ---》   目标mac(dsc-ip):mac:02:29:0c:8d:1b

 2.调度器服务器Director收到包后client客户端的请求包的目标mac地址改为选择的服务器(real-server)的mac地址,送到局域网(广播):被选择的服务器(Real-server)。

此时包信息如下:

ip(src-ip):192.168.1.5   ------》目标ip(dsc-ip):192.168.1.6

mac(Src-mac):02:29:0c:8d:1b ---- 目标mac(dsc-ip):mac:03:29:0c:8d:1c

 3.Real-server服务器收到拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,注:【此时源src-ip与目标dsc-ip对调】发送到局域网。

此时报信息如下:

ip(src-ip):192.168.1.6  ---》       目标ip(dsc-ip):192.168.1.5

mac(Src-mac): mac:03:29:0c:8d:1c---》 目标mac(dsc-ip):mac:01:29:0c:8d:1a

 4.如果client与LVS同一网段,那么client将直接收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。


 

DR模型详解:

DR模型:直接路由模型,每个Real Server上都有两个IP:VI(流动ipRIP(外网ip),但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director调度服务器上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP

      注释:Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是通过arp解析的MAC地址进行封装然后转给Real Server,Real Server在接受到信息以后拆除MAC帧封装,然后直接回复给CIP。

     企业中最常用的就是LB架构就是DR模型

特点和架构要求:

   1、各个集群节点必须和Director在同一个物理网络中

   2、RIP地址不能为私有地址,可以实现便捷的远程管理和监控

   3、Director仅仅负责处理入站请求,响应报文则由Real Server直接发往客户端

   4、集群节点Real Server 的网关一定不能指向DIP,而是指向外部路由

   5、Director不支持端口映射

   6、Director能够支持比NAT多很多的Real Server

 注意:由于在负载均衡集群和高可用集群的时候要求服务器的时间必须一致,否则将会出现服务不协调等致命性的错误,我们这里把DR设置成为时间服务器,来为RS1和RS2提供时间校准,从而来保证负载均衡集群的正常运行!(关于时间服务器NTP-SERVER的搭建和配置我会在后两天的时间里发表博文详细介绍时间服务器的安装和配置),当然如果没有时间服务器也可以自己手动设置各个服务器的时间来保证时间的一致性!


 

 LB三种模式比较

这几种模式的简单比较:
1.NAT
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载 均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个 延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计 算。

2.TUN
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能 为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个 Virtual Server能达到1G的吞吐量。
缺点:但是,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。

3. DR 
优点:和TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与TUN相比,DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux、Solaris 、FreeBSD 、windows、IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上。

三种IP负载均衡技术的优缺点比较:
杂项         NAT            TUN          DR
服务器操作系统    任意      支持隧道     多数(支持Non-arp )
服务器网络      私有网络    局域网/广域网  局域网(外网组成)
服务器数目(100M网络) 10-20      100       多(100)
效率         一般      高        最高


四、LVS的几种调度算法

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

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

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

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

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

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

7.目标地址散列(Destination Hashing)(DH)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8.源地址散列(Source Hashing)(SH)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

9. 最短的期望的延迟Shortest Expected Delay Scheduling SED)(SED)
基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。

10.最少队列调度(Never Queue Scheduling NQ)(NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算


 

 

 试验:LVS NAT模式

 

环境:三台服务器:Direcotr(lvs)两台realserver。RS1和RS2

Direcotr有块网卡eth0 外网:192.168.1.105 内网网卡eth1:192.168.2.105

RS1 一块激活的内网网卡eth1:192.168.2.106

RS2 一块激活的内网网卡eth1:192.168.2.107

安装配置:

1.Direcotr(lvs)配置

(1)安装核心服务ipvsadm

yum install -y ipvsadm

(2)Direcotr上编辑nat实现脚本

vim /usr/local/sbin/lvs_nat.sh

 #! /bin/bash

#director服务器上开启路由转发功能;

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

#关闭icmp的重定向

echo 0 >/proc/sys/net/ipv4/conf/all/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/default/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/eth0/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/eth1/send_redirects

#dirctor设置nat防火墙

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE

#针对nat表 postrouteing列 -s从内外网发送过来的包,-j作为一个MASQUERADE伪装.

#director设置ipvsadm

IPVSADM=‘/sbin/ipvsadm‘

$IPVSADM -C

$IPVSADM -A -t 192.168.1.105:80 -s rr

$IPVSADM -a -t 192.168.1.105:80 -r 192.168.2.106:80 -m

$IPVSADM -a -t 192.168.1.105:80 -r 192.168.2.107:80 -m

#-s 制定算法.-m 设置为nat模式 -w 设定权重 .先不设置。

2.RS1配置

 (1)安装nginx

 yum install -y nginx

(2)配置RS1-eth1:192.168.2.106

     网关指向lvs设定为-eth1:192.168.1.105  

 (3)配置测试页面:

 echo "rs1--rs1---rs1---1111111">/usr/share/nginx/html/index.html

(4)启动nginx:

 server nginx start

  RS2配置

 (1)安装nginx

 yum install -y nginx

 (2)配置RS1-eth1:192.168.2.107

     网关指向lvs设定为-eth1:192.168.1.105

 (3)配置测试页面:

 echo "rs2--rs2---rs2---222222">/usr/share/nginx/html/index.html

 (4)启动nginx:

 server nginx start


 

测试:运行Direcotr配置文件

sh /usr/local/sbin/lvs_nat.sh

curl测试:

curl 192.168.1.105

技术分享

平均分担 成功。

设置权重测试

vim /usr/local/sbin/lvs_nat.sh

$IPVSADM -A -t 192.168.1.105:80 -s wrr

$IPVSADM -a -t 192.168.1.105:80 -r 192.168.2.106:80 -m -w 2

$IPVSADM -a -t 192.168.1.105:80 -r 192.168.2.107:80 -m -w 1

#-s 制定算法.-m 设置为nat模式 -w 1是权重为2 

技术分享

测试:curl 192.168.1.105

技术分享

成功。

 


 

 

试验:LVS DR模式

环境说明:

如果client与LVS同一网段,那么client将直接收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。这里为了实验方便统一将ip设置到同一网段:192.168.1.0网段。

客户端cip------------eth0:192.168.1.108     

调度器(LVS)Director dip---eth0:192.168.1.5

集群层服务器 rip1 ---eth0:192.168.1.6

集群层服务器 rip1 ---eth0:192.168.1.7

 配置director

清空之前NAT实验的ipvsadm 规则

查看:ipvsadm -ln

清空:ipvsadm -C

清空防火墙规则:iptables -t nat -F

设置网卡eth0 ip:192.168.1.105

编辑增加配置文件

vim /usr/local/sbin/lvs_nat.sh

#! /bin/bash

#director服务器上开启路由转发功能;

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

#设置增加vip.

#这里我们增加变量代替ip

vip=192.168.1.5

rs1=192.168.1.106

rs2=192.168.1.107

ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up

#在绑eth0上面绑定vip.

route add -host $vip dev eth0:0

#加载rule

ipvsadm -C

ipvsadm -A -t $vip:80 -s wrr

ipvsadm -a -t $vip:80 -r $rs1:80 -g -w 1

ipvsadm -a -t $vip:80 -r $rs2:80 -g -w 1

保存退出。

运行:lvs_nat.sh

sh /usr/local/sbin/lvs_nat.sh

查看ip 显示eht0:0 为192.168.1.105


 

配置RS1 RS2

设置RS1eth0 为192.168.1.106

设置RS2eth0 为192.168.1.107

RS1,RS2增加相同的配置文件

vim /usr/local/sbin/lvs_nat.sh

#! /bin/bash

#设置增加vip

vip=192.168.1.5

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

#在回环地址上绑定vip.

route add -host $vip lo:0

#关闭ARP广播响应

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

保存退出

RS1,RS2运行lvs_lnet.sh

sh /usr/local/sbin/lvs_nat.sh

查看ip都出现lo:0为192.168.1.105


 

测试

开启第四台电脑192.168.1.108测试

curl 192.168.1.5

技术分享

测试ok

改变权重测试

技术分享

保存退出后查看ipvsadm规则

技术分享

发现权重并没有生效,所以需要在配置文件中添加down eth0:0行在启动即可。

ifconfig eth0:0 down如图

技术分享

在查看:已经生效

技术分享

测试:cur 192.168.1.5

技术分享

成功

问题1:为什么需要开启第四台机测试不能用director测试吗?

因为:director ,rs1. rs2 都配置了 vip (192.168.1.5),本机测试则显示本机web信息。Director测试时,Director 配置文件中子网掩码设置为255.255.255.255,即无法收到返回的数据包。


 

试验:LVS结合keeplived配置

 

LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级