有 V2EX 的坛友问到如何静态编译 keepalived 的问题,实际上 keepalived 确实配置比较麻烦。那还有一个简单易行的 ucarp,生产也可以用这个。
ucarp 跟 keepalived 一样,都是用于高可用的 IP 漂移
但是比 keepalived 配置简单,而且 opnsense 就是用的这个做的高可用,opnsense 是个非常可靠的防火墙软件。
首先有两台虚机,172.18.19.1和172.18.19.2,虚拟ip是172.18.19.3
先配置172.18.19.1
yum install epel-release
yum install psmisc
yum install ucarp
cat<< EOF >> /etc/systemd/system/ucarp.service
[Unit]
Description=UCARP virtual interface
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ucarp.sh
RemainAfterExit=true
ExecStop=/usr/bin/killall -SIGTERM ucarp
ExecStop=/bin/sleep 10
TimeoutStopSec=30
StandardOutput=journal
[Install]
WantedBy=multi-user.target
EOF
注意,上面我们的systemd是直接调用了ucarp.sh来启动,这样更简单。
三个脚本,注意权限是755
cat<< EOF >> /usr/local/bin/ucarp.sh
#!/bin/bash'
/usr/sbin/ucarp -i eth0 -B -p nb1Dshiwode -v 001 -a 172.18.19.3 -s 172.18.19.1 --shutdown --preempt -u /usr/local/bin/vip-up.sh -d /usr/local/bin/vip-down.sh
EOF
cat<< EOF >> /usr/local/bin/vip-up.sh
#!/bin/sh
/sbin/ip addr add ${2}/24 dev ${1}
/sbin/ip neigh flush dev ${1}
EOF
cat<< EOF >> /usr/local/bin/vip-down.sh
#!/bin/sh
/sbin/ip addr del ${2}/24 dev ${1}
/usr/sbin/arp -d ${2}
EOF
chmod 755 /usr/local/bin/ucarp.sh /usr/local/bin/vip-up.sh /usr/local/bin/vip-down.sh
ok,第一台机器就配置好了
所有的东西都在ucarp.sh的那一行的参数上,直接用ucarp -h来查看
配置第二台172.18.19.2,其他的东西都一样,唯一不同的就是ucapr.sh的一处不一样
cat<< EOF >> /usr/local/bin/ucarp.sh
#!/bin/bash'
/usr/sbin/ucarp -i eth0 -B -p nb1Dshiwode -v 001 -a 172.18.19.3 -s 172.18.19.2 --shutdown --preempt -u /usr/local/bin/vip-up.sh -d /usr/local/bin/vip-down.sh
EOF
# -s 172.18.19.2 源ip和19.1不同
ok,两台都配置完毕, 分别执行启动
systemctl daemon-reload
systemctl enable --now ucarp
可以再找一台机器,一直长 ping 172.18.19.3,然后随机杀掉 19.1 和 19.2 上面的 ucarp 进程,可以看到 vip 172.18.19.3 会来回飘
注意:如果主掉了,从接管了 vip 变成 master,那么主再起来的时候不会去抢从的 master。