博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVS-模式
阅读量:6202 次
发布时间:2019-06-21

本文共 1282 字,大约阅读时间需要 4 分钟。

LVS主要是DR,TUN,NAT和淘宝的FULLNAT模式,对于绝大部分人而言只能选择原版内核支持的前三种。


1.DR模式

DR模式是效率最高的一种,对于每个请求LVS把目的mac改成从RS中选择的机器的mac,再将修改后的数据帧在与服务器组的局域网上发送。但是局限性是LVS机器需要和RS至少能有一个网卡同在一个VLAN下面,这样限制了DR模式只能在比较单一的网络拓扑下使用。


2.TUN模式

TUN模式其实性能与DR模式相比差别不大的,TUN模式下会动态地从RS列表选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;RS服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。TUN模式可以解决DR模式下不能垮网段的问题,甚至可以垮公网进行。但是需要RS能支持ipip模块。


3.NAT模式

NAT模式对RS没有其他要求,唯一的要求是得把RS的网关设置为LVS机器。因为进出的流量都要通过LVS机器,所以性能相对会差很多,而且部署的规模很难做大。


以上DR模式和TUN模式在部署的时候都需要在本机绑定VIP,非常麻烦,比如我们之前有的老应用因为一些历史问题单个应用的VIP有40来个,如果用LVS做负载均衡基本就崩溃了,每次新增/删除一个VIP,估计得线下测试好多次ip addr add/del的用法。NAT模式在部署的时候也是太麻烦了。而且还有一个很关键很关键的是,使用了LVS后万一被人ddos怎么办?syn-cookie在抵挡攻击的时候效果一般不是太好,这样攻击透过lvs直击后端应用就杯具了。所以在很多大公司都不敢直接把lvs放公网,前面得加个防火墙啥的。所以淘宝单独搞了一个fullnat模式,一方面可以解决部署绑VIP、或者把RS的网关设置为LVS机器IP带来的部署复杂问题,另外一方面是加了一个syn-proxy等等,可以抵挡下一般的网络层攻击。但是使用FULLNAT模式后确实有个麻烦的是后端机器看不到用户的IP了,所以RS上还得用装上打过补丁的内核,对取IP的操作就劫持才能获取到用户IP。


对于大规模网站,其实无论单独使用哪种LVS都是不能替换商业设备的,所以还是得配合nginx or haproxy做负载均衡。这个时候最简单的就是lvs(fullnat)+nginx/haproxy(nginx官方版本现在没有4层代理功能,haproxy对后端又不支持keepalive),当然使用DR模式或者TUN模式也还可以的。总之基本都得用2层才能搞得定,满足大部分应用上的需求。其实对于很多小公司,我觉得直接用nginx/haproxy就OK了。搞的那么复杂维护成本会非常高的,自动化运维没有跟上的时候只会把自己给玩死。

本文转自 周新宇1991 51CTO博客,原文链接:http://blog.51cto.com/zhouxinyu1991/1747091,如需转载请自行联系原作者
你可能感兴趣的文章
[转]typedef的四个用途和两个陷阱
查看>>
建造者模式(Builder)
查看>>
JavaScript数值类型及变量
查看>>
【转】CSS雪碧图会占用太多浏览器内存吗
查看>>
开发相关“视频-公开课-webcast”资源地址
查看>>
Android 编码规范:(一)考虑用静态工厂方法代替构造器
查看>>
第四种行转列
查看>>
Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-4 熊猫的跳和打滚
查看>>
StatCounter
查看>>
MySQL笔记---视图,存储过程, 触发器的使用入门
查看>>
【C语言】14-返回指针的函数与指向函数的指针
查看>>
linux 命令学习大全
查看>>
解决 MySQL Cluster 通过 某一个MySqld节点新建表时,其他 MySqld节点 看不到表内容的问题...
查看>>
win10企业版激活密钥
查看>>
hdu 4862 KM算法 最小K路径覆盖的模型
查看>>
powerdesigner添加mysql的字符集ENGINE和DEFAULT CHARACTER SET
查看>>
BZOJ 3098: Hash Killer II(新生必做的水题)
查看>>
BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
查看>>
关于go语言的环境配置 SDK+path+工作目录
查看>>
html5--6-53 阶段练习4-画廊
查看>>