该测试使用了4个节点,其IP地址分别为 - 172.21.0.211 - 172.21.0.212 - 172.21.0.213 - 172.21.0.214 其中节点 1、2、3 为 FreeBSD 12.1-BETA3 系统,节点 4 为 Debian GNU/Linux 10 系统。 设计目的是在任意节点故障时,自动由其它可用节点顶替其 IP 地址。 FreeBSD 系统上相同的配置为: carp_load="YES" vfs.maxbcachebuf=1048576 需要在 Debian GNU/Linux 系统上安装定制过的 ucarp: TODO: put the source code somewhere 各节点的配置: clear_tmp_enable="YES" hostname="ha-file-server-1" #ifconfig_em0="inet 172.21.0.211 netmask 255.255.240.0" ifconfig_em0="vhid 1 pass testok 172.21.0.211/20 up" ifconfig_em0_alias0="vhid 2 advskew 2 pass testok 172.21.0.212/32" ifconfig_em0_alias1="vhid 3 advskew 3 pass testok 172.21.0.213/32" ifconfig_em0_alias2="vhid 4 advskew 4 pass testok 172.21.0.214/32" defaultrouter="172.21.0.1" sshd_enable="YES" ntpdate_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" zfs_enable="YES" samba_server_enable="YES" clear_tmp_enable="YES" hostname="ha-file-server-2" #ifconfig_em0="inet 172.21.0.212 netmask 255.255.240.0" ifconfig_em0="vhid 2 pass testok 172.21.0.212/20 up" ifconfig_em0_alias0="vhid 1 advskew 2 pass testok 172.21.0.211/32" ifconfig_em0_alias1="vhid 3 advskew 2 pass testok 172.21.0.213/32" ifconfig_em0_alias2="vhid 4 advskew 3 pass testok 172.21.0.214/32" defaultrouter="172.21.0.1" sshd_enable="YES" ntpdate_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" zfs_enable="YES" samba_server_enable="YES" clear_tmp_enable="YES" hostname="ha-file-server-3" #ifconfig_em0="inet 172.21.0.213 netmask 255.255.240.0" ifconfig_em0="vhid 3 pass testok 172.21.0.213/20 up" ifconfig_em0_alias0="vhid 1 advskew 3 pass testok 172.21.0.211/32" ifconfig_em0_alias1="vhid 2 advskew 2 pass testok 172.21.0.212/32" ifconfig_em0_alias2="vhid 4 advskew 2 pass testok 172.21.0.214/32" defaultrouter="172.21.0.1" sshd_enable="YES" ntpdate_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" zfs_enable="YES" samba_server_enable="YES" # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens36 iface ens36 inet static address 172.21.0.214/20 gateway 172.21.0.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 172.21.0.51 up sh /etc/network/start-ucarp.sh #!/bin/sh INTERFACE=ens36 ucarp --daemonize --interface $INTERFACE -s 172.21.0.214 --vhid 1 --pass testok --advskew 4 --addr 172.21.0.211 --shutdown --upscript /etc/ucarp-vh-up.sh --downscript /etc/ucarp-vh-down.sh --preempt ucarp --daemonize --interface $INTERFACE -s 172.21.0.214 --vhid 2 --pass testok --advskew 3 --addr 172.21.0.212 --shutdown --upscript /etc/ucarp-vh-up.sh --downscript /etc/ucarp-vh-down.sh --preempt ucarp --daemonize --interface $INTERFACE -s 172.21.0.214 --vhid 3 --pass testok --advskew 2 --addr 172.21.0.213 --shutdown --upscript /etc/ucarp-vh-up.sh --downscript /etc/ucarp-vh-down.sh --preempt ucarp --daemonize --interface $INTERFACE -s 172.21.0.214 --vhid 4 --pass testok --advskew 0 --addr 172.21.0.214 --shutdown --upscript /etc/ucarp-vh-up.sh --downscript /etc/ucarp-vh-down.sh --preempt #!/bin/sh ifconfig "$1:$UCARP_VHID" "$2" netmask 255.255.255.255 up #!/bin/sh ifconfig "$1:$UCARP_VHID" down