在企业的运行中,LVS的负载均衡机制使得我们可以投入更少的成本并且可以让服务集群发挥更高的性能为客户服务,那么LVS到底是什么?以及它是怎么实现的呢?下面我们一起来看一看吧
高可用LVS集群系统结构图
LVS概念
LVS是LinuxVirtual Server的简写即是Linux虚拟服务器,是一个虚拟的服务器集群系统;LVS是由进行对请求合理分配的调度器以及多台提供服务的实际运行的应用服务器组成,并且可以根据企业自身的需求对其进行合理,灵活的架构;在有众多客户端进行幷发访问企业相关服务器的时候,LVS集群中的调度服务器可以将大量的服务请求根据调度器自身多种不同的算法进行合理的分发;从而实现基于IP,连接数以及访问量等多种类型的负载均衡。而且一旦集群中的某台真实服务器出现故障而不可用时,集群软件能够快速侦测到这一状况并将服务请求定向到其它的正在运行的应用服务器上
LVS类型介绍
LB:load Balancing:负载均衡集群--大容量、增加处理能力;例如:通过rsync完成web服务器之间的页面复制即在一台web服务器上存储页面,其他web服务器从此服务上进行同步;并且可以通过内核中inotify机制进行通知其他服务器页面变化情况;让其他服务器不用等到指定的同步时间进行同步,实行立即同步
HA:High Availabilty:高可用集群--实时在线一年在线时间为99.999%;例如当一台服务器挂掉可以通过调度器重新发送请求,不会因为一台服务器的崩溃而导致整个服务器的的挂掉,可以继续提供服务;这种高可用能力是依赖前端服务器调度的(调度机制的分发请求可根据后端服务器的状态检测;前端主机也会通过周期性的检测来判断节点服务器的在线状态)
HP(HPC):High Performance:高性能集群--具有超高级计算能力;例如:评估每秒钟的浮点计算能力等;应用领域一般都是科学计算、天气预报等一些大型数据计算
LVS组成结构
负载均衡实现方案
基于DNS域名轮流解析的方法
基于客户端调度访问的方法
基于应用层系统负载的调度方法
基于IP地址的调度方法
其中基于IP的负载调度算法中,IP负载均衡技术是执行效率最高的;所以下面以介绍IP负载调度方法为主
IP调度方法技术实现
LVS的IP负载均衡技术是通过IPVS模块实现,IPVS是安装在Director Server上的一个核心软件,通过在Director Server上虚拟出一个IP地址即VIP;客户端可通过这个虚拟的IP地址来访问服务器,当客户端请求通过访问VIP地址到的DirectorServer上后,然后根据负载调度器上的各种算法分发客户端请求到相对空闲或者是处理效率较高、性能较好的Real Server上
IPVS实现负载均衡的三种方式
VS/NAT:Virtual Server via Network AddressTranslation;调度器通过将请求报文的目标地址(VIP)改写成选定的RealServer地址,同时将报文的目标端口也改写成指定的Real Server的相应端口,最终将报文请求发送到选定的Real Server 上。Real Server将报文数据返回给客户端时,需要经过负载均衡器将报文源地址和源端口改写成Director Server上的VIP地址和相应端口,然后通过DirectorServer将报文数据返回给客户端
VS/DR:Virtual Server via Direct Routing,DR方式通过改写请求的MAC地址通过Director Server将请求发送到Real Server,然后Real Server直接将客户端请求响应给客户端,Director Server只是做客户端请求的处理;其性能较好,也是应用最多的一种方式,DR方式中Director Server的DIP与Real Server的RIP在同一网段内
VS/TUN:Virtual Server via IP Tunncling;客户端请求发送到Director Server上,然后调度器采用IP隧道技术将用户请求转送到远程的Real Server上,Real Server接受报文直接响应给客户端,TUN与DR不同点在于DR中的DIP与RIP在同一个网段,而TUN实现了DIP与RIP相异两地的情况
负载调度器算法
1 轮叫调度( Round Robin )
“轮叫”调度算法也可称为1:1调度算法;将外部请求按顺序1:1的轮流分配到集群中的Real Server上,平等制的分发客户端请求,不比较Real Server上的实际连接数和系统负载
2加权轮叫(Weighted Round Robin)
“加权轮叫”调度算法根据RealServer的不同处理能力来调度客户端访问请求,可以对每台Real Server配置不同的权值;权越高处理的客户端请求越多;这样可以保证处理能力强的Real Server能处理更多的访问流量。Director Server也可以自动问询Real Server的负载情况,并动态地调整其权值
3 最少链接(Least Connections)
“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。适用于具有相近系统性能的Real Server
4 加权最少链接(Weighted Least Connections)
“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载,适用于在性能方面相差较大的Real Server
5 基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,根据请求的目标IP地址找出该目标IP地址最近使用的Real Server,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器
6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度
7 目标地址散列(Destination Hashing)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
8 源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
LVS NAT模型实现
IP地址规划
Director Server
| Real Server1
| Real Server2
| DIP
| 172.16.51.71
| RIP
| 172.16.51.77
| RIP
| 172.16.51.78
| VIP
| 192.168.0.10
|
|
|
|
| 在要配置的Director的服务器上添加两块网卡,eth0为VIP,eth1为DIP;VIP地址是192.168.0.10,DIP地址是172.16.51.71;在虚拟的配置中DIP网络连接方式设置为hostonly方式,Real Server也配置为host only安装ipvsadm
# yum install ipvsadm -y
准备Real Server
配置这两台RealServer服务器的RIP,网关是 DIP
配置这两台RealServer服务器的RIP,网关是 DIP
完成Real Server服务器的web服务器的安装,提供相应的页面172.16.51.77服务器
# yum install httpd -y
# echo “RS1 magedu.com” >/var/www/html/index.html
172.16.51.78服务器web服务器准备
# yum install httpd yes
# echo “RS2 magedu.com” >/var/www/html/index.html
同步时间
可以配置DirectorServer为时间服务器使其服务器之间的时间是相同的,自己配置时间服务器或者使用一个专用时间服务器,Real Server与Director Server都从此服务器上进行同步,默认时间服务是开启的同步时需要关闭
关闭命令
# server ntpd stop
同步命令
# ntpdate 172.16.0.1
重启网络服务与web服务
在Director测试Real Server上的web服务是否可以进行访问
添加集群服务
# ipvsadm -A -t 192.168.0.10:80 -s rr
# ipvsadm -a -t 192.168.0.10:80 -r172.16.51.77 –m
# ipvsadm -a -t 192.168.0.10:80 -r172.16.51.78 –m
Ipvsadm规则查看
使用window端浏览器进行验证

刷新一次

Real Server各自连接次数查看
刷新N遍之后,查看连接次数与进出报文数据大小
调整LVS调度方法为wrr
更改ipvsadm规则
# ipvsadm -E -t 192.168.0.10:80 -s wrr
# ipvsadm -e -t 192.168.0.10:80 -r172.16.51.77 -m -w 3
# ipvsadm -e -t 192.168.0.10:80 -r172.16.51.78 -m -w 1
查看更改调度方法后规则
为了查看效果使用另外一个客户端对其进行了压力测试
# ab –n 2000 –c 100 http://192.168.0.10/index.html
访问次数与进出报文数据查看

LVS 中DR模型的实现
DR模型实验结构图

实验设备介绍
实验中是在VM9上完成的,系统是红帽5.8;共开启了5台虚拟机,两台Real Server,一台Director Server,一台路由设备B,一个window XP客户端(路由设备A这里没有添加使用,测试时直接配置window XP的地址与VIP在同一网段,网卡连接模式为桥接)
图示内容介绍
大写字母C:IP地址是公网地址,与Director Server是同一网段
大写字母V: 是Director Server上的VIP,是公网地址,与路由设备A的C网卡地址是同一网段
大写字母D:Director Server上的DIP,是内网地址
大写字母R:Real Server的RIP,是内网地址,与DIP是同一网段,连接在同一个交换机上
数字1:路由设备A的真正连接到因特网上的网卡接口
数字2:路由设备B的连接RIP的网卡是内网地址
数字3:路由设备B的连接因特网的网卡,地址是公网地址
DR模型实现流程
外网客户端访问Director上的VIP地址,其过程是客户端通过因特网,然后通过路由设备与VIP建立通信,此时VIP与这个路由设备的网卡地址是在同一个网段的,请求到达Director后,通过交换机就可以把请求转发到Real Server上,Real Server向外响应报文时,源地址是VIP;但是可以与路由通信的是RealServer上的RIP,所以RIP是报文的回应接口(但源地址是VIP);RIP完成请求回应,则其网关是RIP所指定的网关,但是此时RIP与DIP是同一个网段,VIP是公网的一个网段,所以此时RIP要实现通信就要借助一个中间设备建立连接然后实现与外网的通信,每个Real Server的VIP需要屏蔽ARP地址请求的响应,根据arptables对arp地址进行访问控制
arp_announce:向外通告本机源地址的时候,设定通告级别
0:只要本地配置的有相应地址,就给予响应
1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应
2:仅向与本地接口上地址匹配的网络进行通告
arp_ignore:设定接受arp广播地址请求的时候的响应级别
0:将本地任何接口上的任何地址向外通告;
1:仅在目标IP是本地地址,并且配置在arp地址请求进来的接口上时,才给予响应
2:仅向与本地接口上地址匹配的网络进行通告;
3:不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7:保留未使用
8:不回应所有(本地地址)的arp查询
地址规划
Director Server
| Real Server1
| Real Server2
| 路由设备B
| DIP
| 172.16.51.76
| RIP
| 172.16.51.77
| RIP
| 172.16.51.78
| Eth1
| 172.16.51.69
| VIP
| 10.10.10.10
| VIP
| 10.10.10.10
| VIP
| 10.10.10.10
| Eth0
| 10.10.10.21
| DirectorServer地址配置
DirectorServer eth0上配置DIP地址(模拟为内网网段)
Director Server上VIP地址配置
# ifconfig eth0:0 10.10.10.10/8
设定路由,定义当是请求VIP地址时让eth0:0接口作为送出报文接口
# route add –host 10.10.10.10/8dev eth0:0
RS1RIP地址配置
配置RS1arp_announce与arp_ignore配置
网卡eth0配置
# sysctl –wnet.ipv4.conf.eth0.arp_announce=2
全局配置
# sysctl –wnet.ipv4.conf.all.arp_announce=2
配置RS1arp_ignore
网卡eth0配置
#sysctl –w net.ipv4.conf.eth0.arp_ignore=1
#sysctl –w net.ipv4.conf.all.arp_ignore=1
配置的广播地址是自己的地址掩码是255.255.255.255:意思此地址只跟自己在同一网段内不跟其他任何地址在同一网段内
# ifconfig lo:0 10.10.10.10broadcast 10.10.10.10 netmask 255.255.255.255 up
添加路由
# route add –host 10.10.10.10 dev lo:0
RS2RIP地址配置

配置RS1arp_announce与arp_ignore配置
网卡eth0配置
# sysctl –wnet.ipv4.conf.eth0.arp_announce=2
全局配置
# sysctl –w net.ipv4.conf.all.arp_announce=2
配置RS1arp_ignore
网卡eth0配置
#sysctl –w net.ipv4.conf.eth0.arp_ignore=1
#sysctl –w net.ipv4.conf.all.arp_ignore=1
配置VIP地址
# ifconfig lo:0 10.10.10.10 broadcast 10.10.10.10 netmask 255.255.255.255 up
添加路由
# route add –host 10.10.10.10 dev lo:0
在Director Server测试RS1与RS2 的web服务是否正常

设定ipvsadm规则
# ipvsadm –A –t 192.168.0.100:80 –s wlc
# ipvsadm –a –t 192.168.0.100:80 –r172.16.51.77 –g –w 2
# ipvsadm –a –t 192.168.0.100:80 –r172.16.51.78 –g –w 1
查看ipvsadm规则
路由设备B的相关配置
网卡eth1模拟为内网地址,与Real Server的RIP在同一个网段
网卡eth0模拟为内网地址,与Real Server的VIP在同一个网段
打开路由器B设备的路由转发功能
# echo “1” >/pro/sys/net/ipv4/ip_forward
在RS1与RS2上添加路由使其可以通过路由设备B将报文通过互联网送至客户端
# route add –net default gw 172.16.51.69
模拟的外网客户端IP地址配置(虚拟机中window XP机器)
客户端浏览器访问VIP
刷新一下
刷新N次之后,查看分发请求次数及请求报文数据
LVS的基本知识及NAT与DR模型就实现完成了,这些只是LVS的一些很基本知识介绍,相关配置会在博文中继续更新的
|