• keepalived 的 vrrp_script


    [root@centos01 keepalived]# cat check_httpd.sh 脚本需要有执行权限 通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为backup。当master出现异常后,backup自动切换为master。当backup成为master后,master恢复正常后会再次抢占成为master,导致不必要的主备切换。因此可以将两台keepalived初始状态均配置为backup,设置不同的优先级,优先级高的设置nopreempt解决异常恢复后再次抢占的问题。
    keepalived只能做到对网络故障和keepalived本身的监控,即当出现网络故障或者keepalived本身出现问题时,进行切换。但是这些还不够,我们还需要监控keepalived所在服务器上的其他业务进程,比如说nginx,keepalived+nginx实现nginx的负载均衡高可用,如果nginx异常,仅仅keepalived保持正常,是无法完成系统的正常工作的,因此需要根据业务进程的运行状态决定是否需要进行主备切换。这个时候,我们可以通过编写脚本对业务进程进行检测监控。

    下面是 vrrp_script 模块常见的几种监控机制

    1、killall 命令探测服务运行状态

    vrrp_script check_nginx {       # check_nginx 为自定义的一个监控名称
      script "killall -0 nginx"     # 采用 killall 信号 0 来对进程运行状态进行监控,0 为正常,1 为异常
      interval 2                    # 检测间隔时间,即两秒检测一次
      weight 30                     # 一个正整数或负整数。权重值,关系到整个集群角色选举,尤为重要( 单独出帖 )
    }
    
    track_script {
      check_nginx                   # 引用上面定义的监控模块
    } 
    

    2、检测端口运行状态

    检测端口的运行状态也是最常见的服务监控方式,在keepalived的vrrp_script模块中可以通过如下方式对本机的端口进行检测:

    vrrp_script check_nginx {
      script "< /dev/tcp/127.0.0.1:80"  # 通过 < /dev/tcp/127.0.0.1:80 这样的方式定义一个对本机端口状态的检测
      interval 2
      fall 2                            # 检测失败的最大次数,超过两次认为节点资源发生故障
      rise 1                            # 请求一次成功认为节点恢复正常
      weight 30
    }
    
    track_script {
      check_nginx
    }
    

    通过 "< /dev/tcp/127.0.0.1/80"这样的方式定义了一个对本机80端口的状态检测,其中,“fail”选项表示检测到失败的最大次数,也就是说,如果请求失败两次,就认为此节点资源发生故障,将进行切换操作;“rise”表示如果请求一次成功,就认为此节点资源恢复正常。

    3、通过 shell 语句进行状态监控

    vrrp_script check_nginx {
      script " if [ -f /usr/local/nginx/logs/nginx.pid ]; then exit 0 ; else exit 1; fi"
      interval 2
      fall 1
      rise 1
      weight 30
    }
    
    track_script {
      check_nginx
    }
    

    通过一个shell判断语句,检测httpd.pid文件是否存在,如果存在,就认为状态正常,否则认为状态异常,这种监测方式对于一些简单的应用监控或者流程监控非常有用。从这里也可以得知,vrrp_script模块支持的监控方式十分灵活。

    4、通过脚本进行服务状态监控

    vrrp_script chk_mysqld {
     script "/etc/keepalived/check_mysqld.sh"
     interval 2
     }
    
     track_script {
       chk_mysqld
      }
    
    

    check_mysqld.sh的内容为:

     #!/bin/bash
    /usr/bin/mysql -e "show status;" > /dev/null 2>&1
    if [ $? -eq 0 ];then
       MYSQL_STATUS=0
     else
        MYSQL_STATUS=1
     fi
    exit $MYSQL_STATUS
    
  • 相关阅读:
    【学习笔记】查看CUDA版本
    如果Visual Studio太大,不妨还是用VSCode开发C#项目吧
    Visual Studio npm配置淘宝镜像
    c++读写锁--读者写者问题
    c++内存对象模型--vs2017下的分析,32位
    android作业
    android连接数据库
    android第十周(增删改查)
    android-购物车
    android计算器
  • 原文地址:https://www.cnblogs.com/fan-gx/p/11979869.html
Copyright © 2020-2023  润新知