Keepalived 资源监控


简介:

作为一个高可用集群软件,Keepalived 没有 Heartbeat 、RHCS 等专业的高可用集群软件功能强大,它不能够实现集群资源的托管,也不能实现对集群中运行服务的监控,好在 Keepalived 也考虑到了这一点,它提供了 vrrp_script 、notify_master 、notify_backup 等多个功能模块,通过这些模块也可以实现对集群资源的托管以及集群服务的监控。

## 下面是一个 Keepalived 主备切换的演示过程

shell > curl 192.168.1.35
welcome to Master Nginx

## 客户机访问虚拟 IP 192.168.1.35 ,这时由主服务器提供服务
## 当主服务器宕机或网络出现异常或 Keepalived 本身停止时,主备切换

shell > curl 192.168.1.35
welcome to Slave Nginx

## 当手动停止 Keepalived 服务时,由备机来提供服务,这并没有什么问题

## 第二种测试

shell > curl 192.168.1.35
welcome to Master Nginx

## 现在由主服务器提供服务,当主服务上提供服务的 web 停止时,是否会出现主备切换呢 ?

shell > curl 192.168.1.35
curl: (7) couldn't connect to host

## 很显然,并没有主备切换。
## 主服务器没有移除 VIP ,备服务器也没有绑定 VIP 。
## 这是因为他们之间通过 VRRP 协议来确定对方是否存活,而 web 停止并不妨碍他们之间的通信。
## 所以备机就认为主服务器处于存活状态,从而导致无法正常提供服务。

## 这时就要由 vrrp_script 出马了 !

vrrp_script

此模块专门用于对集群中服务资源进行监控 。与此模块同时使用的还有 track_script 模块,在此模块中可以引入监控脚本、命令组合、shell 语句等 ,以实现对服务、端口等多方面的监控。track_script 模块主要用来调用 vrrp_script 模块使 keepalived执行对集群服务资源的检测。vrrp_script 模块中还可以定义对服务资源检测的时间间隔、权重等参数,通过 vrrp_script 和 track_script 组合,可以实现对集群资源的监控并改变优先级,进而实现 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、检测端口运行状态

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
}

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
}

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

vrrp_script check_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 30
}

track_script {
  check_nginx
}

## 其中 check.nginx.sh 也是本着正常返回 0 ,异常返回 1 的原则来定义

## 这两种方法,个人感觉基本一个意思,简单点的检测就用语句,复杂点的就写脚本里

原文地址:https://www.cnblogs.com/wangxiaoqiangs/p/5630531.html