VRRP协议实战

一、基本概念


keepalived进程

keepalived启动后会有三个进程

父进程内存管理子进程管理等等

子进程VRRP子进程

子进程healthchecker子进程

二、主备切换

切换前:

关闭主节点:

在mater节点执行命令reboot
备升主

可以发现发现备节点多了一个虚拟ip(vip)

keepalived配置文件说明

bash 复制代码
local_address_group laddr_g1 {
    172.31.1.23
}
vrrp_script chk_lvs
{
    script "/etc/keepalived/lvs_check.sh 192.168.79.253"
    interval 2
    timeout 150
    fall 10
    rise 5
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 5
    priority 150
    nopreempt
    advert_int 1
    dont_track_primary

    virtual_ipaddress {
        192.168.79.253 dev eth1 label eth1:1
    }

    track_script {
        chk_lvs
    }
    notify_master "/etc/keepalived/exclusive_role_change.sh master"
    notify_backup "/etc/keepalived/exclusive_role_change.sh backup"
    notify_fault "/etc/keepalived/exclusive_role_change.sh fault"

    garp_master_refresh 30
}
bash 复制代码
这段配置文件是一个 keepalived 的配置示例,描述了一个 VRRP 实例(VI_1),用于在两台服务器之间实现高可用性。具体来说,这个配置文件中定义了以下内容:

local_address_group 定义了本地地址组,其中包含一个 IP 地址(172.31.1.23)。

vrrp_script 定义了一个 VRRP 脚本(chk_lvs),用于检查 LVS 的状态。脚本的路径为 "/etc/keepalived/lvs_check.sh 192.168.79.253",检查间隔为 2 秒,超时时间为 150 秒,连续失败 10 次后切换到备用状态,连续成功 5 次后切换回主用状态。

vrrp_instance 定义了一个 VRRP 实例(VI_1),其中包括了以下内容:

state BACKUP 表示当前实例的状态为备用状态。
interface eth0 指定了 VRRP 实例使用的网络接口。
virtual_router_id 5 定义了虚拟路由器的 ID。
priority 150 设置了当前节点的优先级为 150。
nopreempt 表示不允许其他节点抢占主用状态。
advert_int 1 设置了 VRRP 广播间隔为 1 秒。
dont_track_primary 表示不跟踪主用节点。
virtual_ipaddress 定义了虚拟 IP 地址(192.168.79.253),并指定了使用的网络接口和标签。
track_script 指定了需要跟踪的脚本(chk_lvs)。
notify_master、notify_backup 和 notify_fault 分别定义了在节点角色变化时需要执行的通知脚本。
garp_master_refresh 30 设置了主用节点发送 GARP 包的刷新间隔为 30 秒。
这个配置文件的作用是在两台服务器之间实现高可用性,通过 VRRP 实现了虚拟 IP 地址的故障切换,同时通过跟踪脚本检测 LVS 的状态来实现故障检测和自动切换。

如何判断是否会进行切换

bash 复制代码
vrrp_script 里的script返回值为0时认为检测成功,其它值都会当成检测失败;
weight 为正时,脚本检测成功时此weight会加到priority上,检测失败时不加;
	主失败:主 priority < 从 priority + weight 时会切换。
	主成功:主 priority + weight > 从 priority + weight 时,主依然为主
weight 为负时,脚本检测成功时此weight不影响priority,检测失败时priority -- abs(weight)
	主失败:主 priority -- abs(weight) < 从priority 时会切换主从
	主成功:主 priority > 从priority 主依然为主
相关推荐
hsjkdhs5 分钟前
万字详解网络编程之socket
网络·tcp/ip·udp·socket
工藤新一¹6 分钟前
Linux —— 虚拟进程地址空间
linux·运维·服务器·c/c++·虚拟进程地址空间
Aspiresky15 分钟前
浅析Linux内核scatter-gather list实现
linux·dma·scatter/gather
奔跑吧 android1 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】
linux·数据结构·input·kernel·input_dev·input_handler·input_handle
再难也得平1 小时前
Linux初级篇
linux·运维·服务器
小猫挖掘机(绝版)2 小时前
通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机
linux·windows·vscode·ubuntu·ssh
@是你太难忘2 小时前
计算机网络IP协议
网络·tcp/ip·计算机网络
attitude.x2 小时前
Swift 协议扩展与泛型:构建灵活、可维护的代码的艺术
运维·服务器·网络
专注VB编程开发20年2 小时前
rust语言-对象多级访问
服务器·前端·rust
ajassi20002 小时前
开源 C++ QT Widget 开发(十三)IPC通讯--本地套接字 (Local Socket)
linux·c++·qt·开源