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。
相关推荐
回忆2012初秋6 小时前
【Nginx】优雅地走进高性能 Web 服务器世界(1)
服务器·前端·nginx
信创工程师-小杨6 小时前
Linux内网环境如何解决依赖的问题
linux·运维·服务器
设计师小聂!6 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发
不吃土豆的马铃薯6 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
java知路6 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
小小龙学IT7 小时前
Go 泛型深度解析:从设计哲学到工程实践
服务器·数据库·golang
2601_955505257 小时前
自然人身份确权可信基础设施赋能 DID 身份合规
运维·金融·区块链·健康医疗·智能硬件·教育电商·政务
fanged7 小时前
设备树学习2--一个DTBO实验
linux·嵌入式开发
星间都市山脉7 小时前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
qq_163135757 小时前
Linux 【02-tac命令超详细教程】
linux