1.概述
Keepalived 是一个轻量级的高可用(High Availability, HA)解决方案,主要用于 Linux 系统。它通过实现 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 来提供服务的持续性和故障自动切换能力,从而避免单点故障。
一、Keepalived 的核心作用
实现高可用性:当主服务器宕机时,备用服务器能自动接管服务,对外表现为“无缝切换”。
IP 漂移(VIP 漂移):通过 VRRP 协议,在多个节点之间共享一个 虚拟 IP 地址(VIP)。正常情况下 VIP 绑定在主节点上;主节点故障后,VIP 自动漂移到备节点。
2.配置过程
准备两台服务器 192.168.2.17,192.168.2.26 ,vip ip 为 192.168.2.222,服务器为 ubuntu.
其中 17 为节点
2.1 安装 keepalived
sudo apt install -y keepalived
2.2 编辑 keepalived 配置
- 主节点配置
编辑主节点 的/etc/keepalived/keepalived.conf
global_defs {router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0.1 # 必须 > 0vrrp_gna_interval 0.1 # 必须 > 0enable_script_security # 允许执行 notify 脚本}vrrp_instance VI_1 {state MASTERinterface enp0s3virtual_router_id 51priority 200advert_int 1#authentication {# auth_type PASS# auth_pass 1111#}virtual_ipaddress {192.168.2.222/24 brd 192.168.2.255 dev enp0s3 noprefixroute}notify_master "/etc/keepalived/send_garp.sh"##notify_master "/etc/keepalived/add_vip.sh"#notify_backup "/etc/keepalived/del_vip.sh"
}
这个 notify_master 的作用是 在节点成为主节点的时候,执行的脚本。
其中 send_garp.sh 内容为
#!/bin/bash
sleep 1
/usr/sbin/arping -U -c 3 -I enp0s3 192.168.2.222
- 从节点配置
global_defs {router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0.1 # 必须 > 0vrrp_gna_interval 0.1 # 必须 > 0enable_script_security # 允许执行 notify 脚本}vrrp_instance VI_1 {# 为BACKUPstate BACKUP# 网卡名称interface enp0s3virtual_router_id 51# 从节点比主节点小priority 100advert_int 1#authentication {# auth_type PASS# auth_pass 1111#}virtual_ipaddress {192.168.2.222/24 brd 192.168.2.255 dev enp0s3 noprefixroute}notify_master "/etc/keepalived/send_garp.sh"##notify_master "/etc/keepalived/add_vip.sh"#notify_backup "/etc/keepalived/del_vip.sh"
}
2.2 验证漂移是否生效
我们可以启动节点和从节点
在主节点执行
ip addr show enp0s3
ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 08:00:27:ac:af:45 brd ff:ff:ff:ff:ff:ffinet 192.168.2.17/24 brd 192.168.2.255 scope global noprefixroute enp0s3valid_lft forever preferred_lft foreverinet 192.168.2.222/24 brd 192.168.2.255 scope global secondary noprefixroute enp0s3valid_lft forever preferred_lft forever
这里可以看到 vip 在主节点上
在从节点执行命令
ip addr show enp0s3
ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 08:00:27:1f:90:10 brd ff:ff:ff:ff:ff:ffinet 192.168.2.26/24 brd 192.168.2.255 scope global dynamic noprefixroute enp0s3valid_lft 65444sec preferred_lft 65444sec
模拟 主节点宕机
在主节点执行命令
systemctl stop keepalived
我们可以看到从节点
ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 08:00:27:1f:90:10 brd ff:ff:ff:ff:ff:ffinet 192.168.2.26/24 brd 192.168.2.255 scope global dynamic noprefixroute enp0s3valid_lft 64901sec preferred_lft 64901secinet 192.168.2.222/24 brd 192.168.2.255 scope global secondary noprefixroute enp0s3valid_lft forever preferred_lft forever
vip 漂移到从节点,使用 ping 命令 测试,发现 222 可以联通。