设为首页 收藏本站
查看: 2755|回复: 0

[经验分享] LVS 工作原理解析

[复制链接]

尚未签到

发表于 2019-1-3 13:26:07 | 显示全部楼层 |阅读模式
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 最少连接


      • overhead = active(活动连接数)*256 + inactive 选最小的


    • wlc: weight lc 加权的最小连接


      • wOverhead= (active*256 + inactive) / weight 选最小的


    • sed: shortest expected delay 最小期望延迟


      • overhead = (active + 1)*256 / weight


    • nq: never queue 永不排队,开始就先一人发一个,然后再按sed算法调度

    • lblc: locality based least connection基于本地的最小连接


      • 动态的dh,大概相当于dh + lc


    • lblcr : lblc with replication 带复制的lblc


      • director维护一个proxy server table,请求进来时选择活动连接最少的










运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659026-1-1.html 上篇帖子: 集群入门浅析 下篇帖子: 手把手基于LVS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表