利用Keepalived进行服务器状态监测和故障隔离

Keepalived是一款用于Linux的高可用解决方案,通过VRRP检测服务器状态,自动故障隔离。它利用VRRPScript进行资源监控,如VIP切换,通过设置preempt_delay实现抢占延迟。

082631f0e306cc110c47e39932b2bd83.png

Keepalived是一个在Linux下的轻量级高可用解决方案。它是一个类似于layer3、4和5交换机制的软件,用于检测服务器的状态。

ddadbe16585cebac71d06aeab9daf0c3.png

Keepalived可以自动完成服务器的状态检测和故障隔离,不需要人工干涉。它通过定期向服务器群中的服务器发送ICMP数据包来检测服务器的IP地址是否激活。

如果发现某台服务器的IP地址没有激活,Keepalived将报告这台服务器失效,并将它从服务器群中剔除。

当服务器工作正常后,Keepalived会自动将服务器加入到服务器群中。这些工作全部自动完成,不需要人工干涉。

keepalived利用VRRP Script 技术 调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能。

568e6d38ff32703c38ba63f3a8504152.png

VRRP Script 配置

定义脚本

vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。

vrrp_script  {
  script | #此脚本返回值为非0时,会触发下面OPTIONS执行
  OPTIONS
}

通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

调用脚本

track_script:调用vrrp_script定义的脚本去监控资源,定义在VRRP实例之内,调用事先定义的vrrp_script

track_script {
  SCRIPT_NAME_1
  SCRIPT_NAME_2
}

定义 VRRP script

vrrp_script  { #定义一个检测脚本,在global_defs 之外配置
  script | #shell命令或脚本路径
  interval  #间隔时间,单位为秒,默认1秒
  timeout  #超时时间
  weight  #默认为0,如果设置此值为负数,当上面脚本返回值为非0时,会将此值与本节点权重相加可以降低本节点权重,即表示fall. 如果是正数,当脚本返回值为0,会将此值与本节点权重相加可以提高本节点权重,即表示 rise.通常使用负值
  fall  #执行脚本连续几次都失败,则转换为失败,建议设为2以上
  rise  #执行脚本连续几次都成功,把服务器从失败标记为成功
  user USERNAME [GROUPNAME] #执行监测脚本的用户或组
  init_fail #设置默认标记为失败状态,监测成功之后再转换为成功状态
}

调用 VRRP script
-254..254>

vrrp_instance VI_1 {
  …
  track_script {
  chk_down
  }
}

fcac38917e8d47a8645ae3aea1538050.png


-254..254>

抢占延迟模式 preempt_delay

抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP

preempt_delay # #指定抢占延迟时间为#s,默认延迟300s
注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict

#ha1主机配置
-254..254>

vrrp_instance VI_1 {
  state BACKUP #都为BACKUP
  interface eth0
  virtual_router_id 66
  priority 100 #优先级高
  advert_int 1
  preempt_delay 60 #抢占延迟模式,默认延迟300s
  }

#ha2主机配置
-254..254>

vrrp_instance VI_1 {
  state BACKUP #都为BACKUP
  interface eth0
  virtual_router_id 66
  priority 80 #优先级低
  advert_int 1
  }


VIP单播配置


默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
-254..254>

#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
unicast_src_ip  #指定发送单播的源IP
unicast_peer {
 #指定接收单播的对方目标主机IP
......
}

Keepalived也实现了虚拟路由冗余协议(VRRP),可以解决静态路由出现的单点故障问题,实现网络不间断稳定运行。它通过VRRP能够在网络发生故障时透明的进行设备切换而不影响主机之间的数据通讯。

总的来说,Keepalived是一个用于实现高可用性解决方案的软件,能够检测服务器的状态并自动完成故障隔离和恢复工作。

✨✨ 欢迎关注 ✨✨

Keepalived是一款用于实现高可用性(HA,High Availability)的开源软件,广泛应用于Linux环境中。它主要用于监控服务状态,并在主服务器出现故障时切换到备用服务器上,以此保障系统的持续运行服务的可靠性。健康状态监测Keepalived的一项重要功能,下面详细介绍相关内容。 ### 1. Keepalived的工作原理 Keepalived基于VRRP协议(Virtual Router Redundancy Protocol),通过虚拟IP地址的方式为网络服务提供冗余性负载均衡能力。它的核心组件包括三个模块: - **Core(核心模块)**: 主要是处理VRRP协议栈及路由管理部分。 - **VRRP(虚拟路由器冗余协议模块)**: 实现高可用的核心模块,负责VIP漂移等功能。 - **Healthchecker(健康检查模块)**: 对实际的服务进行健康状态检查,这是本文的重点所在。 当配置好Keepalived之后,它会定期发送心跳包给其他节点以维持通信连接,并利用健康检查机制确保后端的真实业务服务处于良好状态。 --- ### 2. 健康状态监测概述 健康状态监测是指Keepalived通过对指定的目标服务发起探测请求来判断该服务是否正常工作的一种手段。如果发现目标不可达或者返回结果不符合预期,则认为此服务已经宕机或进入非健康状态,此时Keepalived将会触发相应的动作,比如停止接收流量或将流量转移到备份节点上去。 #### (1)常见的检测方法 - **HTTP_GET / HTTPS_GET** : 向Web服务器发出GET请求并验证响应码; - **TCP_CHECK** : 尝试建立一个完整的TCP三次握手过程; - **MISC_CHECK** : 执行外部脚本来完成复杂的定制化检测任务。 每个方法都有各自的优点局限性,在选择具体的策略时应结合实际情况综合考虑。 --- ### 3. 配置健康状态监测 要在Keepalived中启用健康状态监测功能,需要编辑`keepalived.conf`文件并在适当位置添加相关的health_check规则。这里给出一个简单的例子作为参考: ```bash vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 # 定义优先级 priority 100 advert_int 1 authentication { auth_type PASS auth_pass mypassword } virtual_ipaddress { 192.168.1.100 } track_script { chk_http_port } } # 自定义脚本检查项 vrrp_script chk_http_port { script "/usr/local/bin/check_http.sh" interval 2 # 每隔两秒执行一次 weight -20 # 如果失败则降低权重值 } ``` 上述配置片段展示了如何设置一项名为chk_http_port的任务去周期地检验webserver的状态。如果有错误发生的话(即check_http.sh返回非零),那么当前实例的有效分数就会相应下降(-20);反之亦然。 对于`/usr/local/bin/check_http.sh`这样的shell脚本内容可以像这样编写: ```bash #!/bin/bash curl --silent --connect-timeout 2 http://localhost | grep "OK" > /dev/null if [ $? -ne 0 ];then exit 1 fi exit 0 ``` 以上代码块表示通过curl命令访问本地主机上的http服务,并查找包含字符串“OK”的页面元素存在与否来进行基本的功能测试。如果没有找到期望的内容就退出程序并且报告失败情况(`exit 1`),否则成功结束(`exit 0`)。 --- ### 4. 故障转移与恢复逻辑 一旦某个被监视的服务出现了问题,Keepalived便会按照预设算法重新分配角色——通常是从活动节点迁移到被动待命的那个伙伴身上继续承担起对外提供的服务职责。而一旦原来的主控方恢复正常运作以后,也能够自动加入集群当中再次成为首要责任人或者是辅助支援者之一,具体取决于你的部署偏好设定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值