34.11.共用地址冗余协议(CARP)
通用地址冗余协议 (CARP) 能让多个主机共享相同的 IP 地址和虚拟主机 ID (VHID),以便为一个或多个服务提供高可用性。这意味着一个或多个主机可能会发生故障,而其他主机将透明地接管,从而用户不会看到服务故障。
除了共享 IP 地址外,每个主机还有自己用于管理和配置的 IP 地址。共享同一 IP 地址的所有机器都具有相同的 VHID。每个虚拟 IP 地址的 VHID 必须在网络接口的广播域中是唯一的。
在 FreeBSD 中内置了使用 CARP 实现高可用性,尽管配置它的步骤略有不同取决于 FreeBSD 版本。本节为 FreeBSD 10 及其之前或之后的版本提供相同的示例配置。
该示例配置了三台主机的故障转移支持,所有主机都具有唯一的 IP 地址,但提供相同的网络内容。它有两个不同的主节点,名为 hosta.example.org 和 hostb.example.org,以及一个名为 hostc.example.org 的共享备用节点。
这些机器使用循环 Robin DNS 配置进行负载均衡。主备机器的配置相同,除了它们的主机名和管理 IP 地址不同。这些服务器必须具有相同的配置并运行相同的服务。当故障切换发生时,只有备用服务器访问相同的内容,才能正确响应共享 IP 地址上的服务请求。备用机器有两个额外的 CARP 接口,一个用于每个主内容服务器的 IP 地址。当发生故障时,备用服务器将接管失败的主机器的 IP 地址。
使用 CARP
通过在 /boot/loader.conf 中添加 carp.ko 内核模块的条目,启用 CARP 的启动支持。
现在加载模块而无需重启:
对于喜欢使用定制内核的用户,请在定制内核配置文件中包含以下行,并按照在配置 FreeBSD 内核中说明的步骤编译内核:
主机名、管理 IP 地址和子网掩码、共享 IP 地址和 VHID 都通过在 /etc/rc.conf 中添加条目来设置。此示例适用于 hosta.example.org :
下一组条目是为了 hostb.example.org。由于它代表第二主机,因此使用不同的共享 IP 地址和 VHID。但是,必须使用与 pass 指定的密码相同,因为 CARP 只会接收来自具有正确密码的机器的广告。
第三台机器,hostc.example.org,配置为处理来自任一主机的故障转移。该机器配置有两个 CARPVHID,一个用于处理每个主机的虚拟 IP 地址。CARP 广告偏移,advskew,设置为确保备份主机的广告比主机晚,因为 advskew 控制了多个备份服务器时的优先顺序。
配置了两个 CARPVHID 意味着 hostc.example.org 会注意到任一主服务器变得不可用。如果主服务器在备份服务器之前未能进行广告发布,则备份服务器将接管共享 IP 地址,直到主服务器再次变为可用。
配置完成后,要么重启网络,要么重启每个系统。高可用性现在已启用。
CARP 功能可以通过 carp(4)手册页面中记录的几个 sysctl(8)变量来控制。通过 devd(8)可以触发 CARP 事件的其他操作。
最后更新于