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

| 2 Comments

因为有人在我前一篇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也支持。

2 Comments

我觉得服务器倒是可以用RFC 1918的地址,而且应该也不需要多占用一个公网IP。我自己写了篇blog,简单画了个拓扑图,麻烦看一下实现起来是否有问题,貌似您这头禁用了trackback,只能人肉tb了,http://www.opslife.com/dsr-implemention/

注意patent pending

Leave a comment

About this Entry

This page contains a single entry by Xin LI published on September 18, 2009 2:25 PM.

概率趣题 was the previous entry in this blog.

改一行代码带来的性能改进 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.01