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

[经验分享] LVS NAT 状态同步之异步回包

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-12 20:26:50 | 显示全部楼层 |阅读模式
前言:

      此前跟同事做分享时,谈论到一个技术细节。

      场景如下:

                                     【客户端】

             【LVS NAT Director A】   【LVS NAT Director B】

  【RealServer1】【RealServer2】【RealServer3】【RealServer4】



Client: 172.16.159.100

DirectorA: 172.16.159.101\192.168.0.254   

DirectorB: 172.16.159.102\192.168.0.253   

RealServer1: 192.168.0.1

RealServer2: 192.168.0.2

RealServer3: 192.168.0.3

RealServer4: 192.168.0.4



   正常情况下,LVS NAT 框架下,Realserver的默认路由通常指向Director的DIP地址。

   原因是Director有lvs的地址转换表,/proc/net/ip_vs_conn ,所以回包时要通过此表才能还原地址和端口,发送客户端。



   那么如果可以同步这个转换表数据到其他服务器,是否可以回包无需原路返回。换句话说,

   Client   ->   DirectorA   ->  RealServer1   

   RealServer1  ->  DirectorB  ->  Client

   如果可行,那么NAT方式的瓶颈问题也可以变相解决。



   根据上述猜想我做了一些实验,把实验结果记录一下。

   实验场景如下:

         1. 部署LVS NAT实验环境,部署方法参考我之前分享的脚本。

         2. 开启LVS状态同步,部署方法参考我之前分享的文档。

         测试方案一:(短连接)

              a. 客户端访问VIP,输出正常。

              b. 修改RealServer的默认路由,指向DirectorB的DIP。

              c. 客户端访问VIP,访问异常。

         总结:

              行不通原因是,首包的状态条目信息,没有同步到另外一台设备。导致回包时必然失败。

              LVS状态同步是有选择的,仅ESTABLISHED以后的其他状态。我猜想当初设计者做此舍取,也是道理的,

              若一定要所有状态同步,还要修改ip_vs_code.c内核源码才行哦。              



         测试方案二:(长连接)

              a. 客户端访问VIP,输出正常。

              b. 修改RealServer的默认路由,指向DirectorB的DIP。

              c. 客户端访问VIP,输出正常。

         总结:

              有了上一场景的经验,此次考虑已存在状态的连接。

              1) Realserver 启动守护进程

                      nc -l 80

              2) Client 访问

                      telnet VIP 80

              经过上述两步,此时长连接已经建立。随便输入一些字符串,两端都可以看到。

              3) RealServer 默认路由修改

                   route del default gw 192.168.0.254

                   route add default gw 192.168.0.253

              此时在客户端在输入一些字符串,会发现RealServer仍然输出正常。

              最后,使用tcpdump抓包确认回路数据包是从另一个网关通过。



注:通过此次验证,可以明确的是,地址转换后,并非一定要原路返回,只要条件成熟是可以异步的。






运维网声明 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-17269-1-1.html 上篇帖子: LVS调整hash bucket及内核编译 下篇帖子: Linux Virtual Server LVS Load Balancing
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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