千家信息网

keepalived知识梳理

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,文章大纲前言VRRP介绍Keepalived详解前言Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。我们都知道,在一个LVS集群中,虽然LVS能够对
千家信息网最后更新 2026年11月01日keepalived知识梳理

文章大纲


  • 前言

  • VRRP介绍

  • Keepalived详解

前言


Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。我们都知道,在一个LVS集群中,虽然LVS能够对客户端的请求基于IP进行调度,但是LVS自身并不能提供高可靠性,即不能进行容错。并且LVS只能将客户端的服务基于某种调度算法调度至后端服务器进行处理,却不能检查后端服务器的状态,所以我们需要一个工具能够实现这些功能,而keepalived刚好能够提供这些功能,在keepalived与LVS配合组成高可用集群中(HAC),至少需要2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP(即LVS中的VIP),主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。

VRRP介绍


1 VRRP概念

VRRP是英文"Virtual Router Redundancy Protocol"的缩写,即虚拟路由冗余协议,他是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。VRRP具有如下优点:

简化网络管理。在具有多播或广播能力的局域网(如以太网)中,借助VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。

适应性强。VRRP 报文封装在 IP 报文中,支持各种上层协议。

网络开销小。VRRP 只定义了一种报文--VRRP 通告报文,并且只有处于Master 状态的路由器可以发送 VRRP 报文。

2 VRRP工作过程

1) 虚拟路由器中的路由器根据优先级选举出 Master。Master 路由器通过发送免费 ARP 报文,将自己的虚拟 MAC 地址通知给与它连接的设备或者主机,从而承担报文转发任务;

2) Master 路由器周期性发送 VRRP 报文,以公布其配置信息(优先级等)和工作状况;

3) 如果 Master 路由器出现故障,虚拟路由器中的 Backup 路由器将根据优先级重新选举新的 Master;

4) 虚拟路由器状态切换时,Master 路由器由一台设备切换为另外一台设备,新的 Master路由器只是简单地发送一个携带虚拟路由器的 MAC 地址和虚拟 IP地址信息的免费 ARP报文,这样就可以更新与它连接的主机或设备中的ARP 相关信息。网络中的主机感知不到Master 路由器已经切换为另外一台设备。

5) Backup 路由器的优先级高于 Master 路由器时,由 Backup 路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举 Master。

终上所述,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:

Master 路由器的选举;

Master 路由器状态的通告;

同时,为了提高安全性,VRRP 还提供了认证功能;

3 MSTER选举方式

VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。优先级越高,则越有可能成为Master路由器。初始创建的路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级:

如果 VRRP 报文中 Master 路由器的优先级高于自己的优先级,则路由器保持在 Backup 状态;

如果 VRRP 报文中 Master 路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占成为 Master 状态,周期性地发送 VRRP 报文,采用非抢占工作方式的路由器仍保持 Backup 状态;

如果在一定时间内没有收到 VRRP 报文,则路由器切换为 Master

VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。当路由器为IP地址拥有者时,其优先级始终为255。因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。

4 VRRP的三种认证方式

无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。

简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送 VRRP 报文的路由器将认证字填入到 VRRP 报文中,而收到 VRRP 报文的路由器会将收到的 VRRP 报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的 VRRP 报文;否则认为接收到的报文是一个非法报文。

MD5 认证:在一个非常不安全的网络中,可以将认证方式设置为 MD5 认证。发送 VRRP 报文的路由器利用认证字和 MD5 算法对 VRRP 报文进行加密,加密后的报文保存在 Authentication Header(认证头)中。收到 VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。

Keepalived


1 keepalived工作原理

Keepalived是基于vrrp的原理开发的可实现高可用的服务软件,并且就有health-check功能,可以使用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能;keepalived在VRRP虚拟路由冗余协议为基础实现高可用,也可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。下面是官方给出的KeepAlived组件图


由上图可以看出,keepalived也是模块化设计,不同模块实现不同的功能,它主要有三个模块,分别是core、check和VRRP,其中:

  • core模块:为keepalived的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;

  • check模块:负责健康检查,包括常见的各种检查方式;

  • VRRP模块:是来实现VRRP协议的。

  • system call:系统调用

  • watch dog:监控check和vrrp进程的管理进程,他是用来对check和vrrp进程实现高可用的。

  • checkers:负责检测器子进程的健康状态,当其检测到master上的服务不可用时则通告vrrp将其转移至backup服务器上。

2 keepalived作用

Keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

3 keepalived配置文件

Keepalived是一个相对轻量级的服务,而且与LVS配合的非常好,它只有一个配置文件,主要包括global_defs、static_ipaddress、static_routes、VRRP_script、VRRP_instance和virtual_server的设置,而这个这些配置又可分为三大类:全局配置,VRRP的配置以及LVS配置。

1)全局配置

global_defs {                    # Block id    notification_email {                 admin@example1.com             # 指明接收keepalived信息的邮箱    ...    }    notification_email_from admin@example.com              # 邮箱名    smtp_server 127.0.0.1            # 收邮件的主机地址    smtp_connect_timeout 30          # integer, seconds    router_id my_hostname            # 一个标记该主机的字符串,可以不是主机名,建议使用主机名    vrrp_mcast_group4 224.0.0.18     # 多播组地址, 默认是 224.0.0.18    vrrp_mcast_group6 ff02::12       # ipv6多播组地址, 默认是 ff02::12    enable_traps                     # 启用SNMP陷阱,可以不启用}

2)VRRP配置

VRRPD配置包括三个类:VRRP同步组(synchroization group)、VRRP实例(VRRP Instance)、VRRP脚本

******VRRP instance(s)*******    # describes  the moveable IP for each instance of a group in vrrp_sync_group.  Here are described two IPs     # (on inside_network and on outside_network), on machine "my_hostname", which belong to the group VG_1 and which     # will  transition  together  on any state change.    vrrp_instance inside_network {        state MASTER                             #         interface eth0                            #         use_vmac  # Use VRRP Virtual MAC.        #         vmac_xmit_base                             # VMAC interface        dont_track_primary                        #         track_interface {            eth0            eth2            ...        }        mcast_src_ip                      # 多播组源ip        unicast_src_ip         unicast_peer {                        ...        }        lvs_sync_daemon_interface eth2        garp_master_delay 10                     # secs, default 5        virtual_router_id 51        priority 100                             # 优先级        advert_int 1        authentication {                         # 认证信息模块            auth_type PASS                                     auth_pass 1234                         # 认证密码,建议使用"openssl rand -hex 4"生成8位随机密码        }        virtual_ipaddress {                     # vrrp实例                / brd  dev  scope  label 

3)LVS配置

如果你没有配置LVS+keepalived,那么无需配置这段区域,如果你用的是nginx来代替LVS,这无需配置这项,这里的LVS配置是专门为keepalived+LVS集成准备的。它是用keepalived的配置文件来代替ipvsadm来配置LVS,并不是利用ipvsadm来配置,这样会方便很多,一个配置文件搞定这些,维护也方便。这里LVS配置也有两个配置:一个是集群的定义,即VIP指定;二是添加真实服务器地址。

************Virtual server(s)***********fwmark      #防火墙标记,如果你是基于防火墙标记的LVS需要设置这一项    virtual_server group string {              # 配置虚拟服务器,可以是virtual_server IP port | virtual_server fwmark int     delay_loop                        # delay timer for service polling    lb_algo rr|wrr|lc|wlc|lblc|sh|dh     # LVS scheduler    ops                                 # Enable One-Packet-Scheduling for UDP (-O in ipvsadm)    lb_kind NAT|DR|TUN                   # LVS forwarding method    persistence_timeout             # LVS persistence timeout, sec    persistence_granularity    # LVS granularity mask (-M in ipvsadm)    protocol TCP                           # Only TCP is implemented    ha_suspend                          # If VS IP address is not set,suspend healthchecker's activity    virtualhost                  # VirtualHost string for HTTP_GET or SSL_GET,eg virtualhost www.firewall.loc    alpha    omega    quorum     hysteresis     quorum_up |    quorum_down |        sorry_server                   # RS to add when all realservers are down    real_server   {        weight                              # relative weight to use, default: 1        notify_up |        notify_down |                HTTP_GET|SSL_GET {                         # 如果是http则选择HTTP_GET,https时选择SSL_GET            url {                                 # 做做健康性检查时访问的url,可以定多个url                                digest                     # A url to test can have multiple entries here                status_code                   # status code returned in the HTTP headereg status_code 200             }            delay_before_retry              # 失败后判断为宕机的延时            connect_ip                 # 连接IP地址            connect_port                     # 连接端口            bindto             bind_port             connect_timeout              # 连接超时时间            fwmark             warmup         }         TCP_CHECK {                             # 基于TCP_CHECK的健康性检测模块定义            connect_ip             connect_port             bindto             bind_port             connect_timeout             fwmark             warmup         }        SMTP_CHECK {                             # 基于邮件服务的健康性检查模块                host {                    connect_ip                     connect_port                     bindto                     bind_port                     connect_timeout                     fwmark                 }                retry                 delay_before_retry                 helo_name |                warmup             }         MISC_CHECK {                         misc_path |            misc_timeout             warmup             misc_dynamic        }            }}


本章小结


上面分析几乎所有keepalived.conf的配置信息,有些地方我直接援引的官方说明,而没有翻译,我感觉英文说的更为准确。当然还有一些选项没有做详细的说明,我会在随后的文章中加以说明,接下来的文章会从实例出发,从实际案例中领悟这些指令的含义,当然了,在实际生产中并不是所有的指令都会使用,我们会选取最主要的进行定义,那时在看就会想得很轻松。




路由 路由器 报文 配置 服务 服务器 认证 优先级 地址 工作 主机 状态 方式 功能 故障 模块 信息 网络 检查 健康 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 博彦科技互联网金融 互联网金融 科技金融 西安互联网科技 鑫亿盛互联网科技 亿账通互联网科技 广州善班互联网科技 四川狮子座互联网科技 无锡溥仪互联网科技有限公司 海南购全球互联网科技 恒生科技互联网指数分析 剑昆互联网络科技有限公司临桂 中国互联网有什么科技含量 来此购互联网科技有限公司 湖北码尼互联网科技有限公司电话 苏州铭阳互联网科技有限公司 允成互联网科技有限公司融资 企晟互联网信息科技有限公司 科技大学互联网 山东亿川互联网科技有限责任公司 互联网科技金融 远拓互联网科技 科技赋能互联网健康 深圳国际航运科技和互联网 互联网教育科技公司vipkid 金融科技与互联网金融相同和不同 武汉健翔互联网络科技有限公司 崇明区互联网教育科技诚信经营 高科技互联网发展前景如何 高科技和互联网的现代国家
0