注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

共用ip地址冗余协议:CARP  

2013-12-18 13:18:50|  分类: 带宽负载均衡 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

CARP Common Access Redundancy Protocol共用地址冗余协议Common Access Redundancy Protocol,或简称 CARP 能够使多台主机共享同一 IP 地址。在某些配置中,这样做可以提高可用性,或实现负载均衡。这些主机也可以同时使用其他的不同的 IP 地址。

简介

组合/聚合原则 [Composition/Aggregation Principle] CARP

用于软件设计时指:

组合:Class Car{Tyre tyre[4];Engine engine} Class Tyre { } Class Engine { }

聚合:Class Man{Arm arm[2]:Leg leg[2]} Class Arm{ } Class Leg{ }

区别:聚合关系表明类之间不仅有简单的组合关系,而且主类还可以决定聚合子类的生命周期。主类灭亡子类必灭。

ISA Server

使用CARP决定通过阵列解析Web请求的最佳路径。请求解析路径要么判断所请求的信息缓存在阵列中的精确位置,要么决定ISA Server是否把请求路由到Internet上以检索所请求的信息。

CARP是一个协议草案,用于在代理阵列中划分URL空间。请求将被智能地路由到代理阵列中最有可能处理请求的任何成员。相关的协议是SCSP(服务器高速缓冲存储器同步协议),设计用于在冗余服务器环境中保存高速缓存信息。RFC 2334(Server Cache Synchron—ization Protocol—scsP,Aprill998)SCSP描述为一个尝试解决高速缓冲存储器(同 步/高速缓冲存储器)复制问题的协议,当一组服务器希望对它们的高速缓存中的被服务客户机的状态信息进行同步时发生该问题。SCSP算法被说成是与 OSPF中使用的那些算法类似。该协议运行于一组服务器之间,这些服务器与服务客户机一起同步工作,例如,在一个Web站点或一个企业服务器场。这些服务器在地理上也可以是分散的,其中一些服务器位于远程站点。

启用 CARP 方法

要启用 CARP 支持,必须在 FreeBSD 内核配置中增加下列选项,并重新编译内核:

device carp

这样就可以使用 CARP 功能了,一些具体的参数,可以通过一系列 sysctl OID 来调整。

OID

描述

net.inet.carp.allow

接受进来的CARP包。默认启用。

net.inet.carp.preempt

当主机中有一个CARP网络接口失去响应时,这个选项将停止这台主机上所有的CARP接口。默认禁用。

net.inet.carp.log

当值为0表示禁止记录所有日志。值为1表示记录损坏的CARP包。任何大于1表示记录CARP网络接口的状态变化。默认值为1

net.inet.carp.arpbalance

使用ARP均衡本地网络流量。默认禁用。

net.inet.carp.suppress_preempt

此只读OID显示抑制抢占的状态。如果一个接口上的连接失去响应,则抢占会被抑制。当这个变量的值为0时,表示抢占未被抑制。任何问题都会使OID递增。

CARP 设备可以通过 ifconfig 命令来创建。

# ifconfig carp0 create

在真实环境中,这些接口需要一个称作 VHID 的标识编号。这个 VHID Virtual HostI dentification(虚拟主机标识)用于在网络上区分主机。

使用 CARP 来改善服务的可用性

CARP 的作用之一是改善服务的可用性。

这个例子中,将为三台主机提供故障转移服务,这三台服务器各自有独立的 IP 地址,并提供完全一样的 web 内容。三台机器以 DNS 轮询的方式提供服务。用于故障转移的机器有两个 CARP 接口,分别配置另外两台服务器的 IP 地址。当有服务器发生故障时,这台机器会自动得到故障机的 IP 地址。这样以来,用户就完全感觉不到发生了故障。故障转移的服务器提供的内容和服务,应与其为之提供热备份的服务器一致。

两台机器的配置,除了主机名和 VHID 之外应完全一致。在例子中,这两台机器的主机名分别是 hosta.example. org hostb.example. org。首先,需要将 CARP 配置加入到 rc.conf 。对于 hosta.example. org 而言,rc.conf 文件中应包含下列配置:

hostname="hosta.example. org"

ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"

cloned_interfaces="carp0"

ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"

hostb.example. org上,对应的rc.conf配置则是:

hostname="hostb.example. org"

ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"

cloned_interfaces="carp0"

ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"

注意:在两台机器上由 ifconfig pass 选项指定的密码必须是一致的,这一点非常重要。carp 设备只会监听和接受来自持有正确密码的机器的公告。此外,不同虚拟主机的 VHID 必须不同。

第三台机器,provider.example. org 需要进行配置,以便在另外两台机器出现问题时接管。这台机器需要两个 carp 设备,分别处理两个机器。对应的 rc.conf 配置类似下面这样:

hostname="provider.example. org"

ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"

cloned_interfaces="carp0carp1"

ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"

ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"

配置两个 carp 设备,能够让 provider.example. org 在两台机器中的任何一个停止响应时,立即接管其 IP 地址。

注意:默认的 FreeBSD 内核可能启用了主机间抢占。如果是这样的话,provider.example. org 可能在正式的内容服务器恢复时不释放IP地址。此时,管理员必须手工强制IP回到原来内容服务器。具体做法是在 provider.example. org 上使用下面的命令:

# ifconfig carp 0 down &&i fconfig carp 0 up

这个操作需要在与出现问题的主机对应的那个carp接口上进行。

现在已经完成了CARP的配置,并可以开始测试了。测试过程中,可以随时重启或切断两台机器的网络。

  评论这张
 
阅读(114)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017