keepalived:vrrp实例故障转移(keepalived+haproxy)(代码片段)

骏马金龙 骏马金龙     2022-10-24     288

关键词:

keepalived使用脚本进行健康检查时的相关配置项。例如keepalived+haproxy实现haproxy的高可用。

keepalived分为vrrp实例的心跳检查和后端服务的健康检查。如果要配置后端服务,则后端服务只能是LVS。但vrrp能独立于lvs存在,例如keepalive结合haproxy、mysql等服务实现它们的高可用。

  1. vrrp实例的心跳检查(lvs,haproxy,mysql...)
    • (1).除了LVS,vrrp只能通过脚本来实现vrrp的健康检查,并通过vrrp实例脚本结束keepalived进程来中断该实例的心跳通告。此时virtual server部分的配置需省略。
    • (2).对于LVS,无需使用任何脚本,因为所有keepalived节点会同时对后端服务进行健康检查,并同时从LVS规则中剔除下线的服务。如果所有后端服务都不健康,那就没有必要切换keepalived。
  2. 后端RS的健康检查(只能是LVS)
    • (1).一般采用TCP_CHECK、HTTP_GET、SSL_GET进行健康检查。
    • (2).但也能自写脚本进行后端服务的健康检查,这种模式称为MISC_CHECK。

以下是从man keepalived中截取的通过脚本进行心跳检查、健康检查时的相关配置选项。man介绍的比较简单,更详细的配置说明可参考:https://github.com/acassen/keepalived/blob/master/doc/keepalived.conf.SYNOPSIS

VRRP script(s)
    # 定义一个vrrp脚本,后续vrrp组或vrrp实例要执行某脚本时,需要从此处引用
    # 注意,所有vrrp实例都会监控脚本的退出状态码
    vrrp_script <SCRIPT_NAME> 
       script <STRING>|<QUOTED-STRING> # 要执行的命令或脚本路径
       interval <INTEGER>              # 脚本调用时间间隔,默认1秒
       timeout <INTEGER>               # 脚本执行等待超时时长,超过该时长,表示脚本执行失败
       weight <INTEGER:-254..254>      # 根据该权重值调整vrrp实例优先级值,默认值为0
       rise <INTEGER>                  # 需要成功多少次,vrrp才进行角色状态切换(从fault切换为正常)
       fall <INTEGER>                  # 需要失败多少次,vrrp才进行角色状态切换(从正常切换为fault)
       user USERNAME [GROUPNAME]       # 脚本执行身份,group默认同username
       init_fail                       # 假定脚本初始化时就处于失败状态
    

VRRP synchronization group(s)
    # 分别表示切换为主/备/出错(例如监控的eth0坏了)时所执行的脚本。
    # 要为脚本传递参数时,使用引号包围整个脚本和参数
    notify_master /path/to_master.sh [username [groupname]]
    notify_backup /path/to_backup.sh [username [groupname]]
    notify_fault "/path/fault.sh VG_1" [username [groupname]]

    # notify表示只要状态切换都会调用的脚本,且该脚本是在以上三个脚本执行之后再调用的,
    # keepalived会自动传递四个参数,因此不要手动为脚本传递参数。
    # $1 = "GROUP"|"INSTANCE"
    # $2 = vrrp组名称或vrrp实例名
    # $3 = 切换的目标状态(MASTER/BACKUP/FAULT)
    # $4 = 优先级数值(priority value)
    notify /path/notify.sh [username [groupname]]


VRRP instance(s)部分

    # 监控接口,当某接口down掉时,切换为fault状态
    track_interface 
      eth0
      eth1
      eth2 weight <-254..254>
      ...
    

    # 监控脚本,即执行vrrp_script定义的脚本
    track_script 
        <SCRIPT_NAME>
        <SCRIPT_NAME> weight <-254..254>
    

    # notify_master/backup/fault/stop分别表示切换为主、备、出错(例如监控的eth0坏了)、vrrp停止时所执行的脚本
    # 要为脚本传递参数时,使用引号包围整个脚本和参数
    notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
    notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
    notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
    notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]   # executed when stopping vrrp

    # notify表示只要状态切换都会调用的脚本,并且该脚本是在以上三个脚本执行之后再调用的
    notify <STRING>|<QUOTED-STRING> [username [groupname]]



Virtual server(s)部分

    # 投票被选举成功或失败时执行的脚本
    quorum_up <STRING>|<QUOTED-STRING>
    quorum_down <STRING>|<QUOTED-STRING>

    real_server <IPADDR> <PORT>
       
           # 当健康检查的后端rs上线、下线时执行的脚本
           notify_up <STRING>|<QUOTED-STRING>
           notify_down <STRING>|<QUOTED-STRING>

           # MISC健康检查类型,该类型通过自定义脚本来检查后端健康状况
           MISC_CHECK
           
               # 执行哪个脚本来判断后端是否健康
               misc_path <STRING>|<QUOTED-STRING>
               # Script execution timeout
               misc_timeout <INT>

               # 指定一个随机延迟时间,防止同时检查所有后端,指定为0时表示禁止该功能。
               # 默认启动该功能,默认最大间隔为delay_loop的值。
               warmup <INT>

               # 如果指定该选项,则根据健康检查脚本的退出状态码动态调整权重值
               # 退出状态码为:
               # 0:表示检查成功,不做任何权重修改
               # 1:表示检查失败
               # 2-255:表示检查成功,但权重值减2,例如(状态码为255,则设置权重为253)
               misc_dynamic

               # 指定运行后端健康检查脚本的身份,不指定group时将默认使用username
               user USERNAME [GROUPNAME]
           
       
    

例如,在keepalived+haproxy时。

vrrp_script check_haproxy 
        script"/etc/keepalived/chk_haproxy.sh"
        interval 2
        weight 2
    

global_defs 
        router_id haproxy1
    

vrrp_instanceVI_1 
        state MASTER
        interface eth0
        virtual_router_id 150
        priority 50
        advert_int 1
        authentication 
            auth_type PASS
            auth_pass 1111
        

virtual_ipaddress
        192.168.1.201
    
track_script 
        check_haproxy
    

其中check_haproxy的脚本/etc/keepalived/chk_haproxy.sh内容如下:

#!/bin/bash

if ! killall -0 haproxy &>/dev/null;then
    serivce haproxy restart
    sleep 1
    if ! killall -0 haproxy &>/dev/null;then
        service keepalived stop
    fi
fi

另外一种方式,直接在vrrp_script处定义要执行的命令,而不是使用一个额外的脚本来监控对象。例如:


vrrp_script check_haproxy 
        script "killall -0 haproxy"  # 此行改变
        interval 2
        weight 2
    
 
global_defs 
        router_id haproxy1
    
 
vrrp_instanceVI_1 
        state MASTER
        interface eth0
        virtual_router_id 150
        priority 50
        advert_int 1
        authentication 
            auth_type PASS
            auth_pass 1111
        
 
virtual_ipaddress
        192.168.1.201
    
track_script 
        check_haproxy
    

上面的vrrp_script配置中,每两秒检查一次haproxy进程是否存在,连续检查fall <int>次数后都不存在就进入fault状态,由于没有指定fall <int>,所以一次检查失败就进入fault。

其实通过脚本控制比较复杂,因为要考虑脚本的返回值(不是退出状态码)。当然,如果直接像前面示例一样在脚本中直接进行restart、stop等操作也是可以的。

vrrp协议与keepalived基本原理实例演示(代码片段)

VRRP是什么?VRRP(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议)是一种容错协议,保证当主机的下一条路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。VRRP相关术... 查看详情

keepalived高可用(代码片段)

文章目录keepalivedkeepalived是什么?keepalived的重要功能keepalived高可用故障转移的原理keepalived原理keepalived高可用架构图keepalived工作原理描述keepalived默认配置文件keepalived实现apache在LVS均衡负载上的高可用实例配置LVS配置keepalived... 查看详情

keepalived2(代码片段)

目录一、keepalived简单介绍二、VRRP协议与工作原理三、keepalived详细介绍四、单、多实例及LVS-nat/dr模型实现五、总结一、keepalived简单介绍keepalived是由c语言编写的一个路径选择软件,是IPVS的一个扩展性项目,为IPVS提供高可用性(... 查看详情

5-4keepalived与nginx实现高可用故障转移实战(代码片段)

回顾:keepalived:HACluster高可用集群的实现vrrp:虚拟冗余路由协议虚拟路由器:物理路由器VRID:VirtualRouterIDMaster/Backup一主一备货一主多备priority抢占模式/非抢占模式ipvswrapper(checkers);checkers:对各VS的各RS做健康状态检测应用层检测... 查看详情

keepalived工作原理(简单概述)

keepalived这项服务简单来说,就是来防止单点故障的。所谓单点故障,再简单点来说就是老大挂了手下的小弟过来接班,老大复活了,继续当小弟,保证服务的高可用。官方一点来说就是进行故障的切换转移,是通过VRRP虚拟路由... 查看详情

keepalived高可用集群(还没细看)(代码片段)

介绍Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软... 查看详情

keepalived双机热备原理及实例部署lvs+keepalived

keepalived简介它是由C语言编写的路由热备软件,主要提供简单高效的负载均衡及高可用解决方案。keepalived通过VRRP协议实现高可用架构。lvs实现集群分发,keepalived实现调度器的主备方案,两者结合实现集群系统的高负载高可用。V... 查看详情

keepalived是什么及作用?

参考:https://www.cnblogs.com/hqjy/p/7615439.html keepalived介绍keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防... 查看详情

keepalived高可用服务总结分享

一、keepalived介绍keepalived软件起初是为LVS软件设计的,用来监控LVS集群中各个集群的节点状态,后来又加入了vrrp高可用功能,因此keepalived不但可以管理LVS集群节点,还可做其他服务(Nginx、Mysql、Haproxy等)的高可用解决方案二、... 查看详情

keepalived怎么重新加载配置文件

keepalived.conf内容说明如下●全局定义块1、email通知。作用:有故障,发邮件报警。2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。3、花括号“”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运... 查看详情

keepalived工作原理

...无事在写一个吧!写的不好,望大神们多多指教。1)、Keepalived高可用对之间是通过VRRP协议通信的,VRRP全称VirtualRouterRedundancyProtocol,【虚拟路由冗余协议】,VRRP的出现时为了解决静态路由单点故障的问题。2)、VRRP是通过竞选... 查看详情

ha(highavailable)-keepalived高可用性集群(双机热备)单点实验-菜鸟入门级

HA(Highavailable)-Keepalived高可用性集群 Keepalived 是一个基于VRRP虚拟路由冗余协议来实现的WEB服务高可用方案,虚拟路由冗余协议(VirtualRouterRedundancyProtocol,简称VRRP),类似于工作在3,4,5层的交换机软件。利用其来避免单点... 查看详情

keepalived工作原理及裂脑

1.keepalived服务的工作原理(重点)ükeepalived高可用对之间是通过VRRP协议通信的,因此,我们从VRRP协议介绍:üvrrp协议,全称virtual routerredundancyprotocol,中文名名为虚拟路由冗余协议,VRRP的出现时为了解决静态路由的单点故障... 查看详情

小谈keepalivedvip漂移原理与vrrp协议

参考技术Ahttps://www.cnblogs.com/lixuwu/p/8476997.html什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。之所以说keepalived... 查看详情

keepalived

为什么使用keepalived呢?在服务器集群情况下,会用到lvs或者nginx做调度,如果调度器是单台设备就会出现单点故障的问题。也就是说,当单台调度器故障,无法完成调度,造成站点无法提供服务。所以为了避免这样的情况,一般... 查看详情

keepalived

1:HA集群架构与VIIP工作原理:Linux高可用集群:pacemaker、keepalivedkeepalived理论工作原理:keepalived是以VRRP协议为实现基础的,VRRP全称VirtualRouterRedundancyProtocol,即虚拟路由冗余协议。虚拟路由冗余协议是实现路由器高可用的协议,即... 查看详情

keepalived+lvs

keepalived是以VRRP协议为实现基础的,VRRP全称VirtualRouterRedundancyProtocol,即虚拟路由冗余协议。它的作用是通过layer3,4&5交换机制来检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故... 查看详情

lvs+keepalived纯理论

LVS纯理论:VRRP协议与工作原理      在现实的网络环境中,主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障通信就会失效,因此这种通信模式当中,路由器就成了一个单... 查看详情