负载均衡LVS工作模型
目录:
一、集群概念
二、LVS介绍
三、Lvs集群的类型
四、几种常见的lvs集群模式
一、集群概念
Cluster概念
1. 系统扩展方式︰
Scale UP:向上扩展,增强(优化物理设备)
Scale Out :向外扩展,增加设备,调度分配问题,Cluster
2. Cluster:集群为解决某个特定问题将多台计算机组合起来形成的单个系统
3.Linux Cluster类型:
Ø LB : Load Balancing,负载均衡
Ø HA : High Availiablity,高可用(如MHA),SPOF ( single Point Of failure )
MTBF:Mean Time Between Failure平均无故障时间
MTTR:Mean Time To Restoration ( repair )平均恢复前时间
A=MTBF/ (MTBF+MTTR)(0,1): 99%,99.5%,99.9%,99.99%,99.999%
4.HPC : High-performance computing,高性能www.top500.org
5.分布式系统︰
分布式存储︰云盘
分布式计算:hadoop ,Spark
Cluster分类
6.LB Cluster的实现
7.硬件
F5 Big-IP
Citrix NetscalerA10 A10
8.软件
lvs : Linux Virtual Server
nginx:支持七层调度
haproxy:支持七层调度
ats : apache traffic server , yahoo捐助
perlbal : Perl 编写
9.基于工作的协议层次划分
10.传输层(通用) :DPORT
LVS :
nginx : stream
haproxy : mode tcp
11.应用层(专用)︰针对特定协议,自定义的请求模型分类
proxy server :
http : nginx, httpd, haproxy(mode http),...fastcgi : nginx, httpd, ...
mysql : mysql-proxy,..
pound
Cluster相关
1.会话保持:负载均衡
(1) session sticky :同一用户调度固定服务器
Source IP : LVS sh算法(对某一特定服务而言)
Cookie
(2) session replication:每台服务器拥有全部session
session multicast cluster
(3) session server : 专门的session服务器
Memcached . Redicl
2.HA集群实现方案
keepalived:vrrp协议
ais:应用接口规范
heartbeat
cman+rgmanager(RHCS)
coresync_pacemaker
二、LVS介绍
1.LVS : Linux Virtual Server,负载调度器,集成内核
官网: http://www.linuxvirtualserver.org/
vs: Virtual Server,负责调度'
RS: Real Server,负责真正提供服务
L4∶四层路由器或交换机
2.工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
3.iptables/netfilter :
iptables :用户空间的管理工具netfilter :内核空间上的框架
流入:PREROUTING --> INPUT流出:OUTPUT --> POSTROUTING
转发:PREROUTING -->FORWARD --> POSTROUTING
DNAT︰目标地址转换;PREROUTING
/**
*DNAT可以实现将目标地址进行转换,适用场景是
*互联网发出的请求去访问企业内部,在访问内部是,访问的
*先后顺序是先去访问连接公网的地址,然后再将其请求转换
*到内网的私有地址,以此来对外提供服务。
鉴于DNAT本身*的一对一的特性,无法将请求分配到多台服务器上,只能实
*一对一转换。而vs则可以实现根据请求的报文的目标ip和
*目标协议及端口将其调度转发至某RS,根据调度算法来挑选*RS。
**/
4.LVS : Linux Virtual Server,负载调度器,集成内核
官网: http://www.linuxvirtualserver.org/
Vs: Virtual Server,负责调度
RS: Real Server,负责真正提供服务
L4︰四层路由器或交换机
5.工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
6.iptables/netfilter :
iptables :用户空间的管理工具
netfilter :内核空间上的框架
流入:PREROUTING --> INPUT流出:OUTPUT --> POSTROUTING
转发∶PREROUTING -->FORWARD -->POSTROUTING
DNAT:目标地址转换;PREROUTING
//DNAT实现的单节点转换(一对一转换),无法做到调度功能。
LVS概念
1.lvs集群类型中的术语∶
Ø vs : Virtual Server , Director Server(DS)
Dispatcher(调度器),Load Balancer
//Virtual Server(虚拟服务器),Director Server(DS) //Dispatcher,Load Balancer这些指的都是前面的vs
//调度器。
Ø RS : Real Server(lvs), upstream server(nginx)
backend server(haproxy)
/**
*整正提供服务的后端服务器是RealServer,也可以称
*之为upstream server,在Nginx里面也称之为上游服*务器。在haproxy里面也称作后端服务器。
**/
Ø CIP : Client lP
//客户端的ip地址被称做CIP。
Ø VIP: Virtual serve lP VS外网的IP
/**vs发布到互联网上的地址名为vip,当它作为调度
*器时,存在两个地址,一个是发给互联网的地址,另一*个是连接内网的地址。
**/
Ø DIP: Director lP VS内网的IP
Ø RIP: Real server IP
Ø 访问流程︰CIP <--> VIP == DIP<-->RIP
三、lvs集群的类型
lvs: ipvsadm/ipvs
ipvsadm :用户空间的命令行工具,规则管理器
用于管理集群服务及RealServer
ipvs :工作于内核空间netfilter日的INPUT钩子上的框架
IPVS的框架示意图:
/**
*最大的方框表示lvs服务器
*用户发送请求首先会到达prerouting,再交由路由表
*(route)检查,检查完毕后交由input转发,当input转*发完毕后也就到达了本地进程,响应完毕后到达output,
*output与forward最终都会汇总到route路由表,经过*路由表审核后,还会经过postrouting。Lvs在route与*input之间的位置进行工作。在此可以截取错误指令发给route。
**/
lvs集群的类型:
lvs-nat :修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
//注:重点掌握lvs-nat,lvs-dr两种集群模式
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat :修改请求报文的源和目标IP
//注:了解lvs-tun,lvs-fullnat两种集群模式的原理即可。
LVS/NAT的体系结构如下图:
NAT的工作原理:
/**
*lvs服务器上存在两个地址,一个是vip,用于连接外网,
*另一个是DIP用于连接内网。两台RS服务器的地址不同。
*客户端的ip地址是CIP。客户端(浏览器)的地址是原地*址,目标是vip,DEST是TCP的80端口。
*DNAT的工作原理就是将用户发送的请求转发到某个固*定的端口上,原地址不变,端口不变,目标替换成需要转*发成的服务器(RIP1)。数据报文在经过内部的网络之后
*到达了后端的RS1,后端在回应数据报文时,原地址变成*了RIP1 80/TCP,目标地址则变成了CIP XXXXX。
数据*报文在返回的时候应该走原路径而不是另辟蹊径,此时所*有被替换的地址都应被替换回去。这种模式存在的问题是*lvs服务器负载压力过大。
后端服务器与lvs服务器之间*可以存在路由器,但是一般情况下不会加路由器,中间一*般是交互机
**/
/**
*user客户端通过客户端发请求到达lvs,lvs收到请求后的原地址理*论上应该是客户端的地址,目标地址是vip,这时的lvs服务器需要
*将其进行转换到内部去,转换的过程地址会发生转变,类似于DNAT
*的工作原理。
**/
四、几种常见的lvs集群模式
lvs-nat模式
lvs-nat :
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
( 1 )RIP和DIP应在同一个IP网络(一般情况下位于同一个网络),且应使用私网地址;RS的网关要指向DIP(前提是位于同一个网段下)
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4 ) LVS必须是Linux系统,RS可以是任意OS系统
NAT模式示意图:
NAT模式IP包调度过程:
/**
*当客户端发送的请求经过互联网到达lvs服务器后目标地*址VIP转换为目的地址RIP,因为支持端口映射,所以端口*也又原来的80转变为9000。
经过交互机之后便到达了*web服务器,数据报文在返回时,又会被替换回去。
**/
LVS-DR模式
LVS-DR :
Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
( 1 ) Director和各RS都配置有VIP
(2)确保前端路由器将目标IP为VIP的请求报文发往Director
Ø 在前端网关做静态绑定VIP和口Director的MAC地址
Ø 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
Ø 在Rs上修改内核参数以限制arp通告及应答级/proc/sys/net/ipv4/conf/all/arp_ignore/proc/sys/net/ipv4/conf/all/arp_announce
( 3 )RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
( 4 )RS和Director要在同一个物理网络
( 5 )请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
( 6)不支持端口映射(端口不能修败)(7 )RS可使用大多数OS系统
DR模式辅助理解示意图:
/**
*DR模式的工作原理大致是这样的,在LVS上有两个地址,*一个是VIP,还有一个是DIP。客户端发送请求经过路由器,*进入到企业内部,首先到达LVS服务器,这时的LVS服务*器*在接受到请求之后并不做网络层的修改。这一点与我们之*前讲的NAT DNAT会进行地址替换又有所不同。
*路由器不会修改地址,在到达lvs服务器之后,lvs会根据*调度算法将其调度到一个机器上去。特别注意调度过程是*如何实现的:
原地址CIP XXXX 不变,目标地址 VIP 80仍*然不变,但是MAC地址变了,MAC地址由原先的MAClvs*变为了MACrs1。
*当lvs通过广播寻找到它的MAC地址,但需要注意的是如*果使用了广播去寻找地址,那么LVS与ROUTE之间就只*能是交互机而不能是路由器。当然数据报文还是能够到达*后端的really server 的。
这时会出现新的问题,reall *server无法识别目标地址;解决方案是给每一台reall *server都配置一个RIP。
回应数据包,原地址变成了vip
*80 MACrs1,目标地址变为了CIP XXXXX MAC2。
MAC2*是通过广播获得的。转出去后原地址变成了 VIP 80 MAC1,*目标地址变为了CIP XXX MACc。逻辑上比较复杂,但是*配置起来十分的简单。
同步请求:
客户端发送请求到达LVS*后到达RS,回应报文是第二次过程。实际上同步请求进行了
*两次操作。
**/
//同一个网卡下的VIP和 CIP 下的MAC地址是同一个地址。
实际生产过程中的集群环境:
//总体上是一个多级调度的过程,比较典型的例子便是大众点评的调度设置。