使用DSR模式实现单IP服务冗余
FreeBSD支持以DSR(Direct Server Return,即服务器直接将流量通过路由器返回,而不经过负载平衡设备;俗称"单臂模式")模式提供服务。为了改善服务的可用性,可以使用这种方法来配置服务器。这种方法非常适合于大并发、大流量的环境。
网络及服务器的规划
首先,需要对服务可能产生的负载、流量进行估计,并据此设计网络的结构。DSR结构极大地降低了负载平衡设备成为瓶颈的可能,但仍对它们有一些要求,因此,设计者需要考虑下面一些问题:
如何在服务器之间分摊负载。简单地说,就是应平均地分配流量,还是根据一些特征,例如会话等等去分配流量?原则上,网络设备对于协议本身所做的计算越少,它们所需要消耗的性能就越少,合理的设计应尽可能减少对网络设备在这方面的依赖,以改善整个系统的可扩充性。靠近应用层的规则往往会比靠近物理层的规则消耗更多的计算资源,因此应用的设计者应当尽可能将这部分开销考虑在内。 网络设备的背板带宽。接入层交换机的容量是有限的,在考虑成本的前提下,有时出于性能考虑,很可能会希望使用不同的网络设备,而不是仅仅采用VLAN来划分不同的网络。 了解可能出现瓶颈的点,并予以因应。服务器配置
DSR结构对服务器有这样一些要求:
接入Internet的网络端口不应发出或响应ARP请求。具备三层能力的交换机在看到ARP请求时,会将二层地址(MAC地址)和三层地址(IP地址)予以绑定。因此,在这些交换机看来,拥有公网IP地址的端口应该是负载平衡设备,而不是最终提供服务的服务器。 服务器上应绑定提供服务的公网IP地址。操作系统通常只处理发到本机的IP包。 服务器上应绑定公网路由器的MAC地址。操作系统的TCP/IP协议栈会发二层包到公网路由器。 (可选)服务器应配置两组,而不是一组默认路由。严格地说这并不是必需的,因为提供服务的服务器并不一定需要直接主动发起访问 Internet 的请求,例如,它们可以使用有内网IP地址的代理服务器。 每一台实际提供服务的服务器应拥有一个唯一的内网IP地址。在FreeBSD上,这可以通过在 rc.conf 中的网卡配置中增加"-arp"参数,并配置 static_arp (9.0和更高版本,我会在稍后将其MFC)来实现。
负载平衡设备配置
在负载平衡设备上,在实现DSR结构时,这些设备扮演的角色是 路由器,而不是 NAT 网关。也就是说,它们的作用是将来自客户端的访问 IP 包直接 路由 到服务器的内网地址(说明:此时,这些内网 IP 地址会被当作"下一跳";负载平衡设备查找本地 ARP 表并将数据包在2层上直接传递给对应的服务器;而服务器看到的数据包的目的地址仍是提供服务的那个公网IP)。
FreeBSD pf规则举例:pass in on em0 route-to { em1 内网IP1, em1 内网IP2, em1 内网IP3 } round-robin proto tcp from any to 公网IP port http keep state (sloppy)
其中,(sloppy)需要比较新版本的pf。目前的 FreeBSD 版本并不支持这一用法。可以使用 这个 补丁。这个选项表示pf应使用较为宽松的状态机;如果不需要状态(DNS协议通常不需要保持完整的会话,因为通常不会有很大的请求包)则不需要keep state和(sloppy)配置。
建议继续学习:
- 冗余索引对查询效率的影响 (阅读:3736)
- 设置用于统计的冗余字段要谨慎 (阅读:2767)
- ORACLE Fusion-io最佳实践 (阅读:2639)
- 解释一下DSR结构中服务器IP地址的配置 (阅读:1947)
- 另外一种DSR结构 (阅读:1912)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:delphij's Chaos 来源: delphij's Chaos
- 标签: DSR 冗余
- 发布时间:2009-10-21 09:01:14
- [70] Twitter/微博客的学习摘要
- [64] find命令的一点注意事项
- [64] IOS安全–浅谈关于IOS加固的几种方法
- [62] android 开发入门
- [62] Go Reflect 性能
- [61] 如何拿下简短的域名
- [61] Oracle MTS模式下 进程地址与会话信
- [60] 流程管理与用户研究
- [56] 读书笔记-壹百度:百度十年千倍的29条法则
- [56] 【社会化设计】自我(self)部分――欢迎区