KeepAlived(三):vrrp实例故障转移(keepalived+haproxy)

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

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

  1. vrrp实例的心跳检查(lvs,haproxy,mysql...)

    • (1).除了LVS,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中截取的通过脚本进行心跳检查、健康检查时的相关配置选项。

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才进行角色状态切换
       fall <INTEGER>                  # 需要失败多少次,vrrp才进行角色状态切换
       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

回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到网站架构系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


回到数据库系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7586194.html


转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/8566233.html

注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!

原文地址:https://www.cnblogs.com/f-ck-need-u/p/8566233.html

时间: 2024-08-03 00:58:14

KeepAlived(三):vrrp实例故障转移(keepalived+haproxy)的相关文章

MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移

转自 MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移 - KK ——专注数据 - 博客频道 - CSDN.NEThttp://blog.csdn.net/kk185800961/article/details/51115264# 系统信息: mysql主库 192.168.1.152 CentOS 5.6 mysql 5.6.22 mysql从库 192.168.1.153 CentOS 5.6 mysql 5.6.22 VIP 192.168.1.150 my

为什么很多人用keepalived来实现redis故障转移

目前,Redis还没有一个类似于MySQL Proxy或Oracle RAC的官方HA方案.Redis作者有一个名为Redis Sentinel的计划 ,据称将会有监控,报警和自动故障转移三大功能,非常不错.但可惜的是短期内恐怕还不能开发完成.因此,如何在出现故障时自动转移是一个需要解决的问题.通过对网上一些资料的搜索,有建议采用HAProxy或Keepalived来实现的,事实上如果是做Failover而非负载均衡的话,Keepalived的效率肯定是超过HAProxy的,所以我决定采用Kee

在Azure上实现Linux Server故障转移

要充分利用公有云的弹性扩展和高可用, 首先要在应用系统层面支持横向扩展(scale out),这个说起来很容易,或者说对新开发的应用系统而言已经成为标配.但是对已有的.老旧的应用系统来说,这就比较困难了,不是每个应用系统都能实现/支持横向扩展的.从客户的角度来说,基本上很难接受为了把应用系统迁移到公有云上而去额外投入修改应用系统代码.虽然我们都心知肚明,本质上这是在“偿还技术债”,修改应用系统代码也是为了更好地利用公有云的优势... 对于应用系统的横向扩展而言,“状态”是最大的拦路虎,要支持横向

部署SQL Server2008 R2故障转移群集

配置Sql Server故障转移集群 环境:使用VMware 12虚拟机搭建环境 系统 网卡及IP配置 服务 Windows Server 2008 R2 IP:192.168.1.1 GW:192.168.1.1 DNS:192.168.1.1 搭建域控制器为abc.com Windows Server 2008 R2 网卡1: IP:192.168.1.2 GW:192.168.1.1 DNS:192.168.1.1 网卡2: IP:172.16.10.1(心跳网络) 网卡3: IP:192

MariaDB数据库介绍三、MHA(Master HA)实现主节点故障转移

一.MHA MHA是开源的MySQL的高可用程序,它为MySQL的主从复制架构提供了主节点故障自动转移的功能,它会监控master节点故障的时候,会提升其中的拥有最新数据的slave节点称为新的master节点,同时它还提供了master节点的在线切换的功能,按需切换master/slave节点. MHA服务有两种角色,MHA Manager和MHA Node: MHA Manager(管理节点):单独部署在一台独立机器上管理多个master/slave主从复制集群, 每个master/slav

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

keepalived简介 它是由C语言编写的路由热备软件,主要提供简单高效的负载均衡及高可用解决方案.keepalived通过VRRP协议实现高可用架构.lvs实现集群分发,keepalived实现调度器的主备方案,两者结合实现集群系统的高负载高可用. VRRP协议是为了防止单点故障而设计的主从灾备协议,VRRP将两台或者多台路由设备虚拟成一个设备,对外提供一个虚拟路由ip地址,主路由设备处于启用状态时,不断的发送自身信息到备用设备,以表明主路由状态正常,当备用设备收不到主设备的信息时,备用设备

keepalived 负载均衡实例

目的:利用keepalived 实现http的负载均衡  用户访问192.168.1.153,实现对sr1和sr2的负载均衡. 实验环境: sr1: 192.168.1.151  http服务 sr2: 192.168.1.152  http服务 ka1: 192.168.1.150 主keepalived ka2: 192.168.1.149 备keepalived vip: 192.168.1.153  虚拟IP 操作步骤: 一:sr1.sr2 安装 httpd 服务.配置虚拟IP yum

部署AlwaysOn第三步:集群资源组的健康检测和故障转移

资源组是由一个或多个资源组成的组,WSFC的故障转移是以资源组为单位的,资源组中的资源是相互依赖的.一个资源所依赖的其他资源必须和该资源处于同一个资源组,跨资源组的依赖关系是不存在的.在任何时刻,每个资源组都仅属于集群中的一个结点,该结点就是资源组的活跃结点(Active Node),由活跃结点为应用程序提供服务.AlwaysOn建立在WSFC的健康检测和故障转移的特性之上,和故障转移集群有了不可分割的关系,因此,从底层的集群资源来理解可用性组,知其然知,其所以然,有助于更好地维护AlwaysO

MHA mysql主从故障转移

MHA 一.MHA介绍 1 二.部署MHA 2 1.部署MHA Node 2 2.安装MHA Manager 3 3.配置SSH登录无密码验证 3 4.搭建主从复制环境 3 5.配置MHA 4 6.检查SSH配置 8 7.检查SSH配置 8 8.检查MHA Manager状态 8 9.开启MHA Manager监控 8 10.关闭MHA Manager监控 8 11.MHA引入VIP 8 三.自动Failover 17 四.手动Failover(MHA Manager必须没有运行) 19 五.在