34.11.共用地址冗余协议(CARP)

34.11.1. 使用 CARP

通过在 /boot/loader.conf 中添加 carp.ko 内核模块的条目,启用 CARP 的启动时支持:

carp_load="YES"

要在不重启的情况下加载模块:

# kldload carp

对于偏好使用自定义内核的用户,在自定义内核配置文件中包含以下行,并按 配置 FreeBSD 内核 中的说明编译内核:

device	carp

通过向 /etc/rc.conf 中添加条目来设置主机名、管理 IP 地址和子网掩码、共享 IP 地址以及 VHID。以下是 hosta.example.org 的示例:

hostname="hosta.example.org"
ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_em0_alias0="inet vhid 1 pass testpass alias 192.168.1.50/32"

下一组条目用于 hostb.example.org。由于它是第二个主机,因此使用不同的共享 IP 地址和 VHID。但是,使用 pass 指定的密码必须相同,因为 CARP 只会监听和接受来自具有正确密码的机器的通告。

hostname="hostb.example.org"
ifconfig_em0="inet 192.168.1.4 netmask 255.255.255.0"
ifconfig_em0_alias0="inet vhid 2 pass testpass alias 192.168.1.51/32"

第三台机器 hostc.example.org 配置为从任意主机处理故障转移。该机器配置了两个 CARP VHIDs,一个用于处理每个主机的虚拟 IP 地址。CARP 通告延迟(advskew)设置为确保备份主机的通告比主机稍后发出,因为 advskew 控制了当存在多个备份服务器时的优先级顺序。

hostname="hostc.example.org"
ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
ifconfig_em0_alias0="inet vhid 1 advskew 100 pass testpass alias 192.168.1.50/32"
ifconfig_em0_alias1="inet vhid 2 advskew 100 pass testpass alias 192.168.1.51/32"

配置两个 CARP VHIDs 后,hostc.example.org 将监控两个主机的状态。如果任何一个主机无法正常发送通告,备份服务器将接管共享 IP 地址,直到主机重新上线。

注意

如果原主机重新上线,hostc.example.org 不会自动将虚拟 IP 地址归还给它。为了实现这一点,必须启用抢占功能。该功能默认禁用,可以通过 sysctl(8) 变量 net.inet.carp.preempt 来控制。管理员可以强制备份服务器将 IP 地址归还给主机:

# ifconfig em0 vhid 1 state backup

完成配置后,可以重启网络服务或重启每台系统。高可用性现已启用。

CARP 功能可以通过多种 sysctl(8) 变量进行控制,详细信息请参阅 carp(4) 手册页。其他操作可以通过使用 devd(8) 从 CARP 事件触发。

最后更新于

这有帮助吗?