• keepalived


    通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为backup。当master出现异常后,backup自动切换为master。当backup成为master后,master恢复正常后会再次抢占成为master,导致不必要的主备切换。因此可以将两台keepalived初始状态均配置为backup,设置不同的优先级,优先级高的设置nopreempt解决异常恢复后再次抢占的问题。

    然而keepalived只能做到对网络故障和keepalived本身的监控,即当出现网络故障或者keepalived本身出现问题时,进行切换。但是这些还不够,我们还需要监控keepalived所在服务器上的其他业务进程,根据业务进程的运行状态决定是否需要进行主备切换。这个时候,我们可以通过编写脚本对业务进程进行检测监控。

    例如编写个简单脚本查看haproxy进程是否存活

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    count = `ps aux | grep -v grep | grep haproxy | wc -l`
    if [ $count > 0 ]; then
        exit 0
    else
        exit 1
    fi

    在keepalived的配置文件中增加相应配置项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    vrrp_script checkhaproxy
    {
        script "/home/check.sh"
        interval 3
        weight -20
    }
     
    vrrp_instance test
    {
        ...
         
        track_script
        {
            checkhaproxy
        }
         
        ...
    }

    keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。

    如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加

    如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少

    其他情况,维持原本配置的优先级,即配置文件中priority对应的值。

    这里需要注意的是:

    1) 优先级不会不断的提高或者降低

    2) 可以编写多个检测脚本并为每个检测脚本设置不同的weight

    3) 不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况

    这样可以做到利用脚本检测业务进程的状态,并动态调整优先级从而实现主备切换。

    但是利用该方式会存在一个问题,例如:A,B两台keepalived

    A的配置大概为:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    vrrp_script checkhaproxy
    {
        script "/etc/check.sh"
        interval 3
        weight -20
     
    }
     
    vrrp_instance test
    {
        ....
         
        state backup
        priority 80
        nopreempt
     
        track_script
        {
            checkhaproxy
        }
     
        ....
    }

    B的配置大概为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    vrrp_script checkhaproxy
    {
        script "/etc/check.sh"
        interval 3
        weight -20
    }
     
    vrrp_instance test
    {
        ....
         
        state backup
        priority 70
     
        track_script
        {
            checkhaproxy
        }
     
        ....
    }

    A,B同时启动后,由于A的优先级较高,因此通过选举会成为master。当A上的业务进程出现问题时,优先级会降低到60。此时B收到优先级比自己低的vrrp广播包时,将切换为master状态。那么当B上的业务出现问题时,优先级降低到50,尽管A的优先级比B的要高,但是由于设置了nopreempt,A不会再抢占成为master状态。

    所以,可以在检测脚本中增加杀掉keepalived进程(或者停用keepalived服务)的方式,做到业务进程出现问题时完成主备切换。

  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/clovn/p/5263268.html
Copyright © 2020-2023  润新知