IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

解释一下DSR结构中服务器IP地址的配置

delphij's Chaos 2009-10-21 09:01:56 累计浏览 2,799 次
本机暂存

    因为有人在我前一篇blog《使用DSR模式实现单IP服务冗余》里提了个问题,这里解释一下。

    DSR比较常见的两种配置,一种是我之前文章中提到的禁止外网网卡ARP的方法,另一种是把虚拟IP绑定到lo0上。这两种方法各自有一些优缺点。一般来说,我喜欢用前一种方法。

    实现DSR结构的关键是,通往Internet路由器的那个网络上,只有负载平衡设备在网络上宣示虚拟出来的那个IP的MAC地址,这样,当请求进来的时候,数据会发到负载平衡设备,而不是某一台服务器上。

    禁止某块网卡上的ARP的时候,由于这块网卡完全忽略ARP(不仅是禁止发出ARP请求,同一广播域上的ARP广播也会忽略)。禁止网卡上的ARP,但将虚拟IP绑在网卡上的语义是这样:

当收到目的地址为虚拟IP的包时,将这个包看作是发给自己的包; 这块网卡不接受任何ARP协议的请求,也不广播ARP。

    而另一种方法,也就是网卡上绑与虚拟IP同网段的另一个IP(服务器之间不冲突),但将虚拟IP绑在lo0上的做法的语义则是这样:

当收到目的地址为虚拟IP的包时,将这个包看作是发给自己的包; 禁止响应虚拟IP的ARP请求,也不主动宣示虚拟IP的MAC地址;

    第一种做法的优点是无需在与虚拟IP同网段的网络上再占用一个IP(第二种方法需要:这个IP必须和虚拟IP是同一个网段上的,以便让系统知道通往路由器的网卡是这一块)。很明显,DSR的时候你不会希望使用 RFC 1918 规定的的私有IP,除非这个服务是针对内部网络的。

    第二种做法的优点是无需在服务器上维护路由器IP与MAC地址的对应表。这个特性可以减少维护的压力。例如,如果网络上只有一个路由器,而没有做VRRP或CARP的时候,在做路由器割接时,由于路由器的MAC地址变动,第一种做法会需要一次性修改全部服务器上的MAC绑定。当然,如果网络上的路由器是冗余的,这个优势可能就不那么明显了;另一方面,IPv4地址已经快用完了,所以,为了世界和平,还是建议大家用第一种做法。lo上绑定的IP地址掩码最好是/32(仅此IP)。

    当然,两种做法,*nix系统都是支持的。FreeBSD支持,Linux也支持。

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. 解析nginx负载均衡 (累计阅读 16,623)
  2. Facebook 网站架构 (累计阅读 11,112)
  3. 使用Apache 和Passenger来运行puppetmaster (累计阅读 8,317)
  4. LVS hash size解决4096个并发的问题 (累计阅读 6,410)
  5. 由12306.cn谈谈网站性能技术 (累计阅读 6,399)
  6. 不要在linux上启用net.ipv4.tcp_tw_recycle参数 (累计阅读 4,996)
  7. Kubernetes – Google分布式容器技术初体验 (累计阅读 4,976)
  8. MTU值的调整导致MySQL复制异常 (累计阅读 4,798)
  9. 再谈QQ游戏百万人在线的技术实现 (累计阅读 4,518)
  10. nginx的upstream目前支持5种方式的分配 (累计阅读 4,360)