LVS即Linux Virtual Server,淘宝大牛章文嵩读博士时发起的开源软件项目,是性能非常好的四层负载均衡集群服务,Linux内核2.4以后已经被直接收录至内核。
LVS的工作模式:
在了解工作模式之前首先要晓得为什么会有不同的工作模式,用户的请求进来会先发送到director(virtual server),然后director通过一定的调度算法把请求比较公平的分发到后端的real server,那么自然由real server响应回去给用户。
本文中提到的缩写解释:
VIP: Director对外提供服务的 Virtual IP
DIP: Director IP地址
CIP: Client IP 客户端的IP地址
RIP: 实际提供服务的Real Server的IP
因为一个主机收到一个数据包,如果源IP地址不是自己请求过的IP地址那么它则认为这个包是无效的,会直接丢弃 。而通过负载均衡给后端Real Server再响应回去的数据包如果直接不加修饰的响应回去则就因为源IP是RIP而不是用户请求的VIP而被丢弃,lvs的几种工作模式就是为了解决这个问题的。
NAT 模型 :网络地址转换
NAT模式下,客户端的请求包到达Director时源IP和目标IP分别是客户端CIP和VIP,所以VIP是公网IP ,而转发至后端时则把目标IP改为RIP,响应的包回去经过Director时再把源IP改回VIP,所以Real Server的网关是必须指向DIP 的,而DIP和RIP则可以是私有地址且在同一网段 ,这样也比较安全避免realserver直接暴露在互联网上。其中目标地址和源地址的转换过程由内核模块自动完成,无需人工干预。
FullNAT : 淘宝另一大牛吴佳明牵头作品,此模式下当数据包离开Director发往realserver时会把源IP和目标IP一起全改掉成DIP|RIP,realserver响应的包则源和目标为RIP|DIP,Director回给客户端时则把源和目标再全改回VIP|CIP。
这样做的好处是DIP和VIP可以不在同一网段,从而realserver就可以分布在多个不同地点机房,既可以达到类似CDN的效果,又可以实现异地容灾。
DR模型 :
实现原理和重点:
数据包通过director转给realserver时,通过修改帧header,直接只把目标MAC改为要调度的realserver的MAC, 这样realserver回应的时候就可以保持源IP为VIP响应回去。
But,仅仅这样是不行的,因为Linux回应包的时候必须本机有这个IP地址才可以以这个IP做为源IP ,这个可以通过网卡别名配上VIP实现。
BUT BUT... 如果各realserver都配上VIP,linux的IP地址是属于主机的而非网卡 ,且linux一旦接入网络就会立即大公无私的向全网通告自己所有的IP地址和MAC ,what? 这下director和realserver连接的交换机就要晕菜了,你们都叫VIP全乱了,谁都不知道这个包会发给哪个完全不可控了,还谈什么负载均衡? 这个问题的解决可以通过修改内核参数实现控制Linux主机只向网络通告既定的网卡的IP和MAC信息。所以假设RIP是配置在eth0上的,那么VIP则一定不可以配在eth0的别名上,一般配置在lo上面即可 。
看似解决了问题其实这样还不够,因为Linux还有个特性:一个数据包从某个网卡出去时只有这个网卡上配了某个IP地址才可以以这个IP作为源IP打包出去 ,也就是说如果响应包从eth0出去响应那么必须eth0上配了VIP才可以把源IP打上VIP再出去,上面已经为了避免网络中VIP的MAC地址通告混乱,已经把VIP配在lo:0(假定lo:0)上了--> 不怕,解决这个问题可以通过添加一条主机路由,让所有到VIP的数据报文出去的时候都从eth0走就好了 。
这样一来由于包转发给realserver时只修改了目标MAC所以此模式是肯定不支持端口映射 的;
既然是直接修改MAC通信的所以DIP和RIP则一定要在同一VLAN内;
由于响应包从realserver出去时源IP和目标IP已经是VIP|CIP所以也不需要经过director ,可以通过任何路由出去即可。
TUN模型: Tunneling隧道协议
Director收到Client的请求包后,在外层再加上一个IP头为DIP|RIP后封装成IP隧道协议报文 ,然后发送给realserver,所以realserver一定要可以理解IP隧道协议 才可以,拆包后看到还有一个头是CIP|VIP,所以realserver就打上VIP|CIP的IP头直接回给Client.
LVS的十种调度算法 :
静态(fixed) :
rr:round robin 轮调
wrr: weight rr 加权的轮调
sh: source hash 源地址哈希,对客户端IP地址做哈希,director会维护一个session hash table,结果就是来自同一个客户端的请求都会被调度到一台后端服务器。
dh: destination hash 目标url等hash,适用于有cache server场景,对于同一请求发送到同一cache server.
动态(Dynamic ) :
lc: least connection 最少连接
wlc: weight lc 加权的最小连接
sed: shortest expected delay 最小期望延迟
nq: never queue 永不排队,开始就先一人发一个,然后再按sed算法调度
lblc: locality based least connection基于本地的最小连接
lblcr : lblc with replication 带复制的lblc
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com