OpenEuler系统常用服务(九)

Keepalived 服务指南

一、理论知识 & 功能介绍

1. 什么是 Keepalived?

Keepalived 是一个基于 VRRP (Virtual Router Redundancy Protocol, 虚拟路由器冗余协议) 实现的高可用性软件。它主要用于提供服务的故障切换 (Failover) 功能,确保当主服务器发生故障时,备用服务器能够自动接管服务,从而最大限度地减少服务中断时间,提高系统的可用性。

2. 核心功能

  • VRRP 实现: 管理虚拟 IP 地址 (Virtual IP, VIP)。多个节点组成一个 VRRP 组,共同虚拟出一个 VIP。其中一个节点作为 Master(主节点),持有并对外宣告该 VIP;其他节点作为 Backup(备节点)监听 Master 的状态。当 Master 失效时,优先级最高的 Backup 会接管 VIP 成为新的 Master。
  • 健康检查 (Health Checking): Keepalived 可以监控本地系统或网络服务的状态(例如检查进程是否存在、端口是否可访问、执行自定义脚本等)。如果健康检查失败,Keepalived 可以主动降低自身在 VRRP 组中的优先级,触发主备切换。
  • 负载均衡 (Load Balancing): 通过与 LVS (Linux Virtual Server) 集成,Keepalived 也可以作为 LVS 集群的负载均衡器控制节点,管理后端真实服务器的状态。

3. 典型应用场景

  • Web 服务器高可用 (如 Nginx, Apache)
  • 数据库高可用 (如 MySQL 主从切换)
  • 其他需要 VIP 和故障切换的关键服务

二、安装 Keepalived (OpenEuler 下使用 yum)
  1. 更新软件包索引:

    bash 复制代码
    sudo yum makecache
  2. 安装 Keepalived:

    bash 复制代码
    sudo yum install keepalived
  3. 验证安装:

    bash 复制代码
    keepalived --version

    输出类似 Keepalived v2.2.7 (05/22,2023) 表示安装成功。

  4. 设置开机启动 (可选,但推荐):

    bash 复制代码
    sudo systemctl enable keepalived

三、配置 Keepalived

Keepalived 的主配置文件是 /etc/keepalived/keepalived.conf。配置主要分为两部分:全局定义 (global_defs)VRRP 实例 (vrrp_instance)。以下是一个基本的配置示例,实现一个包含两个节点 (Master 和 Backup) 的 VRRP 组,并监控本地 Nginx 服务。

示例配置 (Master 节点 - 假设 IP: 192.168.1.10):

bash 复制代码
! Configuration File for keepalived

global_defs {
    notification_email {
        admin@example.com  # 通知邮件接收地址
    }
    notification_email_from keepalived@example.com # 发件人
    smtp_server smtp.example.com # SMTP 服务器
    smtp_connect_timeout 30 # SMTP 连接超时
    router_id node_master # 本节点标识,需唯一
}

# 定义一个 VRRP 实例,名称是 VI_1
vrrp_instance VI_1 {
    state MASTER # 初始状态,本节点是 MASTER
    interface ens33 # 绑定 VIP 的网络接口名 (使用 ip addr 查看)
    virtual_router_id 51 # 虚拟路由 ID,同一组需相同 (0-255)
    priority 100 # 优先级,MASTER 应高于 BACKUP (如 100 > 90)

    advert_int 1 # VRRP 通告间隔 (秒)

    # 认证信息,同一组需相同
    authentication {
        auth_type PASS
        auth_pass mypassword # 密码,建议复杂
    }

    # 定义要管理的虚拟 IP (VIP)
    virtual_ipaddress {
        192.168.1.100/24 # VIP,子网掩码需匹配
    }

    # 健康检查 - 监控 Nginx 进程
    track_script {
        chk_nginx
    }
}

# 定义健康检查脚本
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" # 自定义脚本路径
    interval 2 # 检查间隔 (秒)
    weight -20 # 检查失败时,优先级降低的值 (可能导致切换)
    fall 2 # 连续失败几次认为服务 down
    rise 2 # 连续成功几次认为服务 up
}

示例配置 (Backup 节点 - 假设 IP: 192.168.1.11): 与 Master 节点配置类似,主要修改 statepriority

bash 复制代码
global_defs {
    router_id node_backup # 修改为唯一标识
    ... (其他 global_defs 配置)
}

vrrp_instance VI_1 {
    state BACKUP # 初始状态为 BACKUP
    ... (其他配置,interface, virtual_router_id, authentication, virtual_ipaddress 必须与 MASTER 一致)
    priority 90 # 优先级低于 MASTER
    ... (其他配置)
    track_script {
        chk_nginx
    }
}

vrrp_script chk_nginx { ... } # 与 MASTER 相同

Nginx 健康检查脚本 (/etc/keepalived/check_nginx.sh):

bash 复制代码
#!/bin/bash

# 检查 Nginx 主进程是否在运行
if ! pgrep -x "nginx" > /dev/null; then
    exit 1 # 状态异常,返回非0
fi
exit 0 # 状态正常,返回0

重要步骤:

  1. 将上述配置分别保存到两台服务器的 /etc/keepalived/keepalived.conf 文件中。

  2. 创建健康检查脚本 /etc/keepalived/check_nginx.sh,并赋予可执行权限:

    bash 复制代码
    sudo chmod +x /etc/keepalived/check_nginx.sh
  3. 确保脚本逻辑正确! 此脚本仅检查 nginx 进程名,实际应用中可能需要更健壮的检查(如检查端口)。

  4. 确保防火墙允许 VRRP 协议通信 (通常使用 IP 协议号 112 ) 和组播通信。OpenEuler 防火墙 (firewalld) 可能需要添加规则:

    bash 复制代码
    sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="vrrp" accept' # 允许 VRRP 协议
    sudo firewall-cmd --reload
  5. 确保 interface 配置项的值 (ens33) 与服务器上的实际网卡名称一致 (使用 ip addr 命令查看)。


四、启动与验证
  1. 启动 Keepalived 服务 (两台服务器):

    bash 复制代码
    sudo systemctl start keepalived
  2. 检查服务状态:

    bash 复制代码
    sudo systemctl status keepalived

    查看是否运行正常 (active (running))。

  3. 检查 VIP 绑定 (在 Master 节点):

    bash 复制代码
    ip addr show ens33 # 替换为你的网卡名

    输出中应该能看到类似 192.168.1.100/24 的 IP 地址绑定在 ens33 上。

  4. 模拟故障测试:

    • 停止 Master 节点的 Keepalived 服务 (sudo systemctl stop keepalived) 或 Nginx 服务 (如果配置了健康检查)。
    • 观察 Backup 节点的 ip addr show ens33,VIP 应该会转移到 Backup 节点。
    • 恢复 Master 节点服务,VIP 应自动切回 (因为 Master 优先级更高)。

五、注意事项
  1. 脑裂 (Split-Brain): 网络分区可能导致多个节点都认为自己是 Master。配置 unicast_peer (单播通信) 或确保网络质量可以减少此风险。
  2. 脚本权限与路径: 确保健康检查脚本路径正确且可执行。
  3. 防火墙: VRRP 通信必须畅通。
  4. 日志: Keepalived 日志通常位于 /var/log/messages 或通过 journalctl -u keepalived 查看,是故障排查的重要依据。
  5. 虚拟路由 ID (virtual_router_id): 同一局域网内不同的 VRRP 组必须使用不同的 ID。
相关推荐
不怕犯错,就怕不做2 小时前
rk3562 buildrooot编译更新的lib库push后无效问题分析
linux·驱动开发·嵌入式硬件
a里啊里啊2 小时前
常见面试题目集合
linux·数据库·c++·面试·职场和发展·操作系统
陳錄生2 小时前
ThinkBook ubuntu,TouchPad不起作用的解决办法
linux·运维·ubuntu
大卡片2 小时前
标准IO函数
linux
肖爱Kun2 小时前
SRT协议封装MPEG-TS 流的视频和音频TS头结构
网络·音视频
AI先驱体验官2 小时前
实时交互数字人:企业服务场景的技术落地分析
大数据·运维·人工智能·重构·aigc
.select.2 小时前
TCP 4(四次挥手)
服务器·网络·tcp/ip
老卢聊运维2 小时前
深入理解Pod生命周期:从创建到终止的完整链路
运维·云原生·k8s
汤愈韬2 小时前
网络安全之网络基础知识
服务器·网络协议·网络安全·security