千家信息网

keepalived知识梳理

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,文章大纲前言VRRP介绍Keepalived详解前言Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。我们都知道,在一个LVS集群中,虽然LVS能够对
千家信息网最后更新 2025年12月02日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安全错误 数据库的锁怎样保障安全 服务器管理与配置文件实训 网络安全情况通报的范文 中国网络技术最厉害的人 守卫校园网络安全 专科计算机网络技术技能大赛 如何创建一个数据库并维护数据库 服务器安全审计怎么打开 北京恒山系列鲲鹏服务器 力拓网络技术 st101新华互联网科技 网络安全审计有几部组成 gt 7 连不上服务器 服务器建设整合迁移业务 网络技术学习桌布置 数据库update的作用 纸飞机数据库 摩尔庄园忘记服务器 湖南智能软件开发服务 国旗下讲话网络安全为人民 饥荒本地模组在服务器模组内 怎样分辨服务器内存和台式旧内存 mc好玩的服务器跑酷有奖 网络安全运营工程师是干嘛用的 网络安全考研有这个专业嘛 pc加拿大28软件开发定制 中学生网络安全知识竞赛标语 江苏政务软件开发报价 买电脑和 云服务器 哪个好 潍坊手机软件开发 网络安全伴我同行手抄报
0