VIP常用于负载均衡的高可用,使用VIP可以给多个主机绑定一个IP,这样,当某个负载应用挂了之后,可以自动切到另一个负载。
我这里是在k8s环境中做的测试,集群中有6个节点,我给140和141两个节点配置VIP。
1. 安装keepalived
1.1 Ubuntu / Debian:
使用 apt 包管理器安装 Keepalived:
sudo apt update
sudo apt install keepalived
1.2 CentOS / RHEL:
使用 yum 包管理器安装 Keepalived:
sudo yum install keepalived
等待安装完成。
2. 配置keepalived
2.1 准备一个未被使用的ip作为VIP
可以联系网络管理员获取,或者自行获取(我是通过ping 一个一个试的,ping不通的就是未被使用的)。
我这里准备的IP是:10.10.101.254
keepalived配置文件:
global_defs {
router_id node140 # 唯一的节点标识,不同节点需要配置成不一样的
}
vrrp_script check_health {
script "/etc/keepalived/check_nginx.sh" # 替换为你的健康检查脚本
interval 10
weight -2 # 注意,这里必须为负数
}
vrrp_instance VI_1 {
state MASTER # MASTER 或 BACKUP
interface ens192 # 根据你的网络接口名修改
virtual_router_id 51
priority 100 # 在 MASTER 节点上设置较高的优先级
advert_int 1
authentication {
auth_type PASS
auth_pass your_authentication_password
}
virtual_ipaddress {
10.10.101.254 # 你的 VIP 地址
}
track_script {
check_health
}
}
/etc/keepalived/check_nginx.sh
#!/bin/bash
# Check Nginx health
if curl -s -o /dev/null -w "%{http_code}" http://10.10.101.140:10254/healthz | grep -q "200"; then
echo "Nginx is healthy"
exit 0 # Nginx is healthy, return success
else
echo "Nginx is not healthy"
exit 1 # Nginx is not healthy, return failure
fi
重要参数详解:
参数一:global_defs.router_id
唯一的节点标识,不同节点需要配置成不一样的。
参数二:vrrp_instance VI_1.interface:
网络接口名称,即VIP所负载的节点的IP的网络接口名称(也叫网卡名称)。
我这里给140节点配置的VIP,所以我需要确定10.10.101.140这个IP的网卡名称。
ip addr show | grep 'inet 10.10.101.140'
ens192就是10.10.101.140的网卡名称。
参数三:vrrp_instance VI_1.virtual_ipaddress:
VIP,即上面准备的VIP。
参数四:vrrp_instance VI_1.state:
MASTER 或 BACKUP
参数五:vrrp_instance VI_1.priority:
节点权重。
除了这五个参数需要修改,其他参数都不需要改。
3. 启动keepalived
sudo systemctl start keepalived # 启动服务
sudo systemctl stop keepalived # 停止服务
sudo systemctl restart keepalived # 重启服务