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 事件触发。
最后更新于
这有帮助吗?