深度剖析Keepalived:一个不可或缺的网络健康检查与故障转移神器

keepalived简介

keepalived是一个基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议来实现其高可用性(High Availbility,HA)的轻量级软件,其主要应用于Linux操作系统,特别是一些需要高可用服务的场景,如负载均衡器、Web服务器集群、数据库服务器等。

keepalived的功能

  • 基于VRRP协议完成地址流动
  • 为VIP地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • 为ipvs集群的各RS做健康状态监测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

VRRP

虚拟路由冗余协议,用于确保在局域网环境中网络的可靠性。当多台路由器(或具有路由功能的设备)连接到同一网络时,VRRP允许这些路由器之间共享一个或多个虚拟IP地址,即VIP,以便在网络中呈现为一个单一的虚拟路由器。

VRRP的主要作用是提高网络的可靠性和容错。它通过选举一个路由器作为主路由器(master),负责转发数据包,而其它的路由器则作为备份路由器(backup)。如果主路由器出现故障,VRRP会迅速选举一个新的主路由器来接替工作,从而实现网络的无缝转换,避免单点故障导致的服务中断。

VRRP的专业术语

  • 虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIP:Virtual IP
  • VMAC:Virtual MAC
  • 物理路由器:
    • master:主设备
    • backup:备用设备
    • priority:优先级

VRRP的相关技术

通告:心跳、优先级、周期性等

工作方式:抢占模式、非抢占模式

安全认证方式:

  • 无认证
  • 简单的字符认证:共享密钥
  • MD5

工作模式:

  • 主/备:单虚拟路由器
  • 主/主:一台虚拟路由器为主/备,另一台虚拟路由器为备/主

高可用

高可用是一个系统属性,指的是在系统或组件在面对故障、维护操作或其它意外事件时,能够持续提供服务的能力。高可用性的目标是最小化系统停机时间,来确保服务的连续性和可靠性。

高可用的关键要素

  • 冗余:
    • 硬件冗余:使用额外的硬件组件(如冗余电源、RAID磁盘阵列、双网卡等)来防止单点故障
    • 软件冗余:通过部署多个实例(如主备模式、集群模式)的软件服务来确保在一个实例失败时,其他实例能够接管服务。
    • 数据冗余:通过数据复制、备份和恢复策略来确保数据的安全性和可用性。
  • 故障转移:
    • 当系统检测到某个组件或服务出现故障时,能够自动或手动地将服务从故障组件转移到正常组件上,来确保服务的不间断性。
  • 负载均衡:
    • 在多个服务器或者服务实例之间分配工作负载,以提高资源利用率和响应速度,同时增强系统的容错能力。
  • 监控和告警:
    • 实时监控系统运行状态,及时发现潜在问题,并通过告警机制通知管理员,以便快速响应和处理。
  • 自动化恢复:
    • 通过自动化脚本或者工具来简化故障处理流程,减少人为错误和停机时间。

keepalived的部署

keepalived的架构

  • 用户空间核心组件:
    • vrrp stack:VIP消息通告
    • checkers:检测realserver
    • system call:实现VRRP协议状态转换时调用脚本的功能
    • SMTP:邮件组件
    • IPVS wrapper:生成IPVS规则
    • Netlink Reflector:网络接口
    • WatchDog:监控进程
  • 控件组件:提供keepalived.conf的解析器,完成keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配、重新分配、发布等)提供访问权限

keepalived实验环境

KA1        172.25.254.10

KA2        172.25.254.20

realserver1        172.25.254.110

realserver2        172.25.254.120

实验前的基础准备

  • 各节点的时间必须同步
  • 关闭防火墙以及SELinux
  • 配置解析文件,使得各节点之间可以用过主机名进行相互通信
  • 各节点之间可以通过ssh服务进行免密钥认证

keepalived的软件安装及相关文件

#安装keepalived
[root@ka1 ~]# yum install keepalived -y

#keepalived的相关文件
/etc/keepalived/keepalived.conf    #主配置文件
/etc/sysconfig/keepalived    #Unit File的环境配置文件
/usr/lib/systemd/system/keepalived.service    #Unit File
/usr/sbin/keepalived    #主程序文件
/usr/share/doc/keepalived-1.3.5/    #配置文件示例

#keepalived的服务启动
[root@ka1 ~]# systemctl start keepalived.service

keepalived的配置

配置文件的组成部分

配置文件:/etc/keepalived/keepalived.conf

配置文件的组成:

  • global_defs
    • 定义邮件配置、route_id,vrrp配置,多播地址等
  • vrrp_instance VI_0
    • 定义每个vrrp虚拟路由器
  • virtual_server
    • LVS集群的VS和RS

配置文件说明

全局配置
global_defs {
   notification_email {
        XXXXXXXX@qq.com    #keepalived发生故障切换时邮件发送的目标邮箱,可以按行区分写多个邮箱
   }
   notification_email_from keepalived@ka1.super.org    #发邮件的地址
   smtp_server 127.0.0.1                  #邮件服务器地址
   smtp_connect_timeout 30                #邮件服务器的连接timeout
   router_id ka1.super.org                #每个keepalived主机的唯一标识,建议使用当前主机名,但多节点重名不受影响
   vrrp_skip_check_adv_addr               #对所有通告报文都进行检查,会比较消耗性能
                                          #启动此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查默认值为全检查
   vrrp_strict                            #严格遵循vrrp协议,启用此配置后以下状况将无法启动服务
                                          #1、无VIP地址
                                          #2、配置了单播邻居
                                          #3、在vrrp版本2中有IPV6地址

   vrrp_garp_interval 0                   #报文发送延迟,0表示不延迟
   vrrp_gna_interval 0                    #消息发送延迟
   vrrp_mcast_group4 224.0.0.18           #指定组播IP地址范围
}
虚拟路由器配置
vrrp_instance VI_0 {
    state MASTER
    interface ens33    #绑定为当前虚拟路由器使用的物理接口,可以不和VIP在同一张网卡上
    virtual_router_id 100    #每个虚拟路由器的唯一标识,范围为0-255,每个虚拟路由器此值必须唯一,否则服务无法正常启动。同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
    priority 100    #当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同
    advert_int 1    #vrrp通告时间间隔,默认为1s
    authentication {        #认证机制
        auth_type PASS      #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
        auth_pass 1111      #用于认证的密码,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
    }
    virtual_ipaddress {    #虚拟IP,生产环境可能指定上百个IP地址
        172.25.254.100/24 dev ens33 label ens33:1    #指定VIP、网卡及网卡标签,不指定网卡,默认为eth0
    }
}
启用keepalived日志功能
[root@ka1 ~]# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# vim /etc/rsyslog.conf
local6.*                        /var/log/keepalived.log

#重启rsyslog日志服务和keepalived服务
[root@ka1 ~]# systemctl restart rsyslog.service
[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# tail /var/log/keepalived.log
Aug 16 21:49:45 ka1 Keepalived_healthcheckers[17500]: Removing service [192.168.200.5]:1358 from VS [10.10.10.3]:1358
Aug 16 21:49:45 ka1 Keepalived_healthcheckers[17500]: Lost quorum 1-0=1 > 0 for VS [10.10.10.3]:1358
Aug 16 21:49:45 ka1 Keepalived_healthcheckers[17500]: Remote SMTP server [127.0.0.1]:25 connected.
Aug 16 21:49:45 ka1 Keepalived_healthcheckers[17500]: SMTP alert successfully sent.
Aug 16 21:49:47 ka1 Keepalived_healthcheckers[17500]: Timeout connecting server [192.168.201.100]:443.
Aug 16 21:49:47 ka1 Keepalived_healthcheckers[17500]: Check on service [192.168.201.100]:443 failed after 3 retry.
Aug 16 21:49:47 ka1 Keepalived_healthcheckers[17500]: Removing service [192.168.201.100]:443 from VS [192.168.200.100]:443
Aug 16 21:49:47 ka1 Keepalived_healthcheckers[17500]: Lost quorum 1-0=1 > 0 for VS [192.168.200.100]:443
Aug 16 21:49:47 ka1 Keepalived_healthcheckers[17500]: Remote SMTP server [127.0.0.1]:25 connected.
Aug 16 21:49:47 ka1 Keepalived_healthcheckers[17500]: SMTP alert successfully sent.

实现独立子配置文件

当生产环境较为复杂时,keepalived的主配置文件/etc/keepalived/keepalived.conf中的内容会很多,不方便进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUPER COW

云原生探索,您的支持,动力无限

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值