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。
相关推荐
测试员周周4 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
小辰记事本6 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
小鹏linux7 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
北京耐用通信7 小时前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
在角落发呆8 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇8 小时前
Zabbix 7 概述与配置
linux·zabbix·监控告警
裴东青10 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
江公望10 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦10 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn10 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能