keepalived详细笔记

一、Keepalived 概述

  • Keepalived 是一种基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)协议实现的高可用解决方案,主要用于服务器的负载均衡和高可用性保障,能够在主服务器出现故障时,自动将服务切换到备用服务器上,确保业务的连续性。

  • 二、工作原理

  • VRRP 协议:一组路由器(或服务器)组成一个虚拟路由器,其中有一个主路由器(Master)和多个备份路由器(Backup)。虚拟路由器有一个虚拟 IP 地址(VIP),对外提供服务。主路由器定期发送 VRRP 通告消息,备份路由器监听这些消息**。当备份路由器在一定时间内没有收到主路由器的通告消息时,会认为主路由器发生故障,此时会根据优先级选举出一个新的主路由器,并接管虚拟 IP 地址,继续对外提供服务。**

  • Keepalived 在此基础上,不仅实现了 VRRP 的基本功能,还添加了一些自定义的健康检查机制和服务管理功能。它可以对后端的真实服务器进行健康检查,如通过 HTTP、TCP 等协议检查服务器的端口是否可达、服务是否正常响应等。如果检测到某台真实服务器出现故障,Keepalived 可以将其从负载均衡集群中剔除,待服务器恢复正常后再重新加入。
    三、安装与配置

  • 安装:在大多数 Linux 发行版中,可以使用包管理器进行安装。例如,在 CentOS 上,可以使用 yum install keepalived 命令进行安装。

  • 配置文件:Keepalived 的主要配置文件通常为 /etc/keepalived/keepalived.conf。以下是一个简单的配置示例:

    global_defs {
    router_id SERVER1 # 服务器唯一标识
    }

    定义 VRRP 实例

    vrrp_instance VI_1 {
    state MASTER # 此服务器为主服务器
    interface ens160 # 绑定的网络接口
    virtual_router_id 65 # 虚拟路由器 ID,取值范围 0 - 255,同一组需保持一致
    priority 100 # 优先级,数值越大优先级越高
    advert_int 1 # 通告间隔时间,单位为秒
    authentication {
    auth_type PASS # 认证类型为简单密码认证
    auth_pass 123456 # 认证密码,需与 Server2 保持一致
    }
    virtual_ipaddress {
    192.168.65.200/24 dev ens160 # 虚拟 IP 地址
    }
    }

    ###server2
    global_defs {
    router_id SERVER2 # 服务器唯一标识
    }

    定义 VRRP 实例

    vrrp_instance VI_1 {
    state BACKUP # 此服务器为备用服务器
    interface ens160 # 绑定的网络接口
    virtual_router_id 65 # 虚拟路由器 ID,取值范围 0 - 255,同一组需保持一致
    priority 90 # 优先级,低于 Server1
    advert_int 1 # 通告间隔时间,单位为秒
    authentication {
    auth_type PASS # 认证类型为简单密码认证
    auth_pass 123456 # 认证密码,需与 Server1 保持一致
    }
    virtual_ipaddress {
    192.168.65.200/24 dev ens160 # 虚拟 IP 地址
    }

    }

在 Keepalived 的配置文件中,以上部分通常是必填或关键必填的内容:

global_defs 部分

  • router_id:必填。用于在网络中唯一标识本服务器,通常设置为一个有意义的字符串,如服务器主机名等,不同服务器的 router_id 必须不同。

vrrp_instance 部分

  • state:必填。用于指定本服务器在该 VRRP 实例中的角色,如 MASTER 或 BACKUP,必须明确指定。
  • interface:必填。指定绑定的网络接口,如 eth0、ens33 等,需要根据实际服务器的网络接口情况准确填写,否则无法正常收发 VRRP 通告等。
  • virtual_router_id:必填。在同一个虚拟路由器组中,所有服务器的该值必须相同,用于标识虚拟路由器群组,取值范围是 0 到 255。
  • priority:必填。用于在选举主服务器时确定优先级,数值越大优先级越高,MASTER 和 BACKUP 服务器的优先级需要根据角色合理设置,不同服务器的该值通常不同。
  • advert_int:必填。主服务器发送 VRRP 通告的时间间隔,单位为秒,一般根据实际网络环境和需求设置一个合适的值,通常为 1 到 5 秒等。
  • authentication:一般必填。用于设置认证方式和认证密码,确保 VRRP 通告的安全性和合法性,同一组中的服务器认证方式和密码必须一致。
  • virtual_ipaddress:通常必填。定义虚拟 IP 地址及绑定的网络接口,这是对外提供服务的 IP 地址,客户端将通过该 IP 访问服务,需要根据实际需求准确配置。

四、常用命令

  • 启动 Keepalived 服务:systemctl start keepalived
  • 停止 Keepalived 服务:systemctl stop keepalived
  • 查看 Keepalived 服务状态:systemctl status keepalived
  • 查看 Keepalived 日志:tail -f /var/log/messages(日志路径可能因系统而异)
    五、故障排查
  • 检查配置文件:确保配置文件语法正确,没有拼写错误或逻辑错误。可以使用 keepalived -t -f /etc/keepalived/keepalived.conf 命令来检查配置文件的语法。
  • 查看日志信息:通过查看系统日志或 Keepalived 专门的日志文件,获取有关服务启动、运行和故障切换的详细信息,以确定问题所在。
  • 检查网络连接:确保服务器之间的网络连接正常,能够相互通信,特别是用于 VRRP 通告和健康检查的网络接口。
  • 验证健康检查:手动执行健康检查脚本,检查其是否能够正确检测后端服务器的健康状态。

Keepalived 的配置和使用需要根据实际的网络环境和业务需求进行调整和优化,以确保高可用性和负载均衡的效果。

相关推荐
菠菠萝宝1 小时前
【Go学习】-01-5-网络编程
网络·学习·http·golang·go·网络编程·tcp
無法複制1 小时前
gitlab的搭建及使用
运维·服务器·gitlab
lishing61 小时前
Linux驱动开发(17):输入子系统–电阻触摸驱动实验
linux·运维·驱动开发
MInNrz1 小时前
为什么HTTP请求后面有时带一个sign参数(HTTP请求签名校验)
网络·网络协议·http
冷雨夜中漫步1 小时前
领域驱动设计(4)—绑定模型与实现
java·开发语言·笔记·后端·设计模式
世事如云有卷舒2 小时前
《Rust权威指南》学习笔记(三)
笔记·学习·rust
黑客KKKing2 小时前
网络安全:信息安全
网络·安全·web安全·网络安全
世事如云有卷舒2 小时前
《Rust权威指南》学习笔记(四)
笔记·学习·rust
慵懒的猫mi6 小时前
deepin环境下Docker实用指南:核心命令详解
linux·运维·docker·容器·deepin
鼎新安全实验室6 小时前
江遇.BGP路由属性
网络