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_DEVEL
    vrrp_skip_check_adv_addr
    vrrp_garp_interval 0.1      # 必须 > 0
    vrrp_gna_interval 0.1       # 必须 > 0
    enable_script_security      # 允许执行 notify 脚本

}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s3
    virtual_router_id 51
    priority 200
    advert_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_DEVEL
    vrrp_skip_check_adv_addr
    vrrp_garp_interval 0.1      # 必须 > 0
    vrrp_gna_interval 0.1       # 必须 > 0
    enable_script_security      # 允许执行 notify 脚本

}

vrrp_instance VI_1 {
    # 为BACKUP
    state BACKUP
	# 网卡名称
    interface enp0s3
    virtual_router_id 51
	# 从节点比主节点小
    priority 100
    advert_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 1000
    link/ether 08:00:27:ac:af:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.17/24 brd 192.168.2.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.2.222/24 brd 192.168.2.255 scope global secondary noprefixroute enp0s3
       valid_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 1000
    link/ether 08:00:27:1f:90:10 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.26/24 brd 192.168.2.255 scope global dynamic noprefixroute enp0s3
       valid_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 1000
    link/ether 08:00:27:1f:90:10 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.26/24 brd 192.168.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 64901sec preferred_lft 64901sec
    inet 192.168.2.222/24 brd 192.168.2.255 scope global secondary noprefixroute enp0s3
       valid_lft forever preferred_lft forever

vip 漂移到从节点,使用 ping 命令 测试,发现 222 可以联通。

posted on 2025-11-24 16:41  自由港  阅读(0)  评论(0)    收藏  举报