LVS负载均衡(三) LVS后端服务健康状态检查

上一篇分别配置NAT和DR的应用,下面将利用前面配置好的DR工作方式集群来实现LVS后端服务健康状态检查。

1、为什么需要进行LVS后端服务健康状态检查

像前面配置好了,整个集群开始工作,但如果某些Real Server出现问题,不能正常访问,我们就要使Director的ipvs配置做出相应改变,删除出问题的Real Server;当Real Server又能正常访问时,也要把其添加回ipvs的调度列表,这就需要实时检查各Real Server的健康状态,以此来保证整个集群能够提供稳定可用的服务。

2、怎么实现LVS后端服务健康状态检查

实时检查各Real Server的健康状态,实现的方式很多,如四层TCP健康检测、七层HTTP健康检测,如访问某个端口、请求一个专用的服务接口等,也可用ldirectord、keepalived等高可用组件来实现,这些后面介绍到高可用时再实现;我们这里使用上面配置好的DR方式的WEB集群来测试,所以使用的是比较常见的间隔访问HTTP页面的方式来检测健康状态,类似脚本网上很多,更改一下就可以用,下面是本次测试用的脚本,自己新加入了全部Real Server掉线后,使用Director本机提供错误提示给用户的功能,lvs_health_check.sh脚本如下:

    #!/bin/bash#VIP=192.168.1.100CPORT=80FAIL_BACK=127.0.0.1            #全部RS掉线后,使用DIR本机提供错误提示给用户RS=("192.168.1.102" "192.168.1.103")declare -a RSSTATUSRW=("1" "3")                #调度权重RPORT=80TYPE=gCHKLOOP=3                    #掉线的时候,多检查几次再删除LOG=/var/log/ipvsmonitor.log        #日志declare -i AddRsCount=0            #在线的rs数量            declare -i     FailBackStartFlag=0        #FAIL_BACK启用标志addrs() {            #添加RSipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2[ $? -eq 0 ] && return 0 || return 1}delrs() {            #删除RSipvsadm -d -t $VIP:$CPORT -r $1:$RPORT[ $? -eq 0 ] && return 0 || return 1}checkrs() {            #不断循环访问各RS,根据返回,判断各RS的健康状态local I=1while [ $I -le $CHKLOOP ]; do #掉线的时候,多检查几次再删除if curl --connect-timeout 1 http://$1 &> /dev/null; thenreturn 0filet I++        donereturn 1}initstatus() {                    #初始化各RS的状态local Ilocal COUNT=0;for I in ${RS[*]}; doif ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; thenRSSTATUS[$COUNT]=1let AddRsCount++            #初始在线RS数量elseRSSTATUS[$COUNT]=0filet COUNT++done}initstatuswhile :; dolet COUNT=0for I in ${RS[*]}; doif checkrs $I; then        #不断循环访问各RS,根据返回,判断各RS的健康状态if [ ${RSSTATUS[$COUNT]} -eq 0 ]; thenaddrs $I ${RW[$COUNT]}    #刚上线,添加#[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && let AddRsCount++ && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOGif [ $? -eq 0 ]; thenRSSTATUS[$COUNT]=1let AddRsCount++echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOGfifielseif [ ${RSSTATUS[$COUNT]} -eq 1 ]; thendelrs $I                                #刚掉线,删除#[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && let AddRsCount--    && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOGif [ $? -eq 0 ]; thenRSSTATUS[$COUNT]=0let AddRsCount--echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOGfififilet COUNT++doneif [ $AddRsCount -eq 0 ] && [ $FailBackStartFlag -eq 0 ]; thenaddrs $FAIL_BACK 1        #在线RS数量为0,且FailBack没启用,则启用[ $? -eq 0 ] && FailBackStartFlag=1 && echo "`date +'%F %H:%M:%S'`, $FAIL_BACK is start." >> $LOGfiif [ $AddRsCount -gt 0 ] && [ $FailBackStartFlag -eq 1 ]; thendelrs $FAIL_BACK        #在线RS数量大于为0,且FailBack启用,则停用[ $? -eq 0 ] && FailBackStartFlag=0 && echo "`date +'%F %H:%M:%S'`, $FAIL_BACK is stop." >> $LOGfisleep 5done

3、测试

执行bash -x lvs_health_check.sh,然后手动停止/启用各Real Server的htttpd,可以到看ipvs规则自动做出了相应改变,日志中也记录下了相应变化,测试情况如下:

下一篇将会尝试解决LVS持久连接相关的问题……

LVS均衡负载(三) LVS后端服务健康状态检查相关推荐

  1. 使用ldirectord实现后端RS健康状态监测及LVS调度功能

    Ldirectord功能描述: 如果在高可用服务中直接将ipvsadm定义为一种资源代理,使用ipvsadm来生成ipvs规则,这样生效的lvs不能实现对后端的RealServer实现健康监测的功能, ...

  2. 9 Kong LVS 均衡负载

    图片不清晰可以去看word文档:word文档地址:https://github.com/IceEmblem/LearningDocuments/tree/master/%E5%AD%A6%E4%B9% ...

  3. 集群故障处理之处理思路以及健康状态检查(三十三)

    前言 按照笔者的教程,大家应该都能够比较顺畅的完成k8s集群的部署,不过由于环境.配置以及对Linux.k8s的不了解会导致很多问题.异常和故障,这里笔者分享一些处理技巧和思路,以及部分常见的问题,以 ...

  4. 集群故障处理之处理思路以及健康状态检查(三十二)

    前言 按照笔者的教程,大家应该都能够比较顺畅的完成k8s集群的部署,不过由于环境.配置以及对Linux.k8s的不了解会导致很多问题.异常和故障,这里笔者分享一些处理技巧和思路,以及部分常见的问题,以 ...

  5. docker容器的health健康状态检查

    Docker 原生健康检查能力 自 1.12 版本之后,Docker 引入了原生的健康检查实现.对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活.Docker Daemon会自动监 ...

  6. 【博客473】Docker的health健康状态检查

    Docker的health 健康状态检查 场景: Docker 引入了原生的健康检查实现.对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活.Docker Daemon 会自动监控容 ...

  7. LVS均衡负载(一) LVS详解

    LVS负载均衡(一) LVS详解 1.LVS是什么        LVS(Linux Virtual Server,Linux虚拟服务器)是一个虚拟的服务器集群,与Nginx工作在网络体系第七层不同, ...

  8. 如何利用nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查

    用nginx做前端反向代理,如果后端服务器宕掉的话,nginx是不会把这台realserver踢出upstream的,还会把请求转发到后端的这台realserver上面.所以当某台机器出现问题时,我们 ...

  9. Kubernetes 健康状态检查(九)

    强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精 ...

最新文章

  1. 设计RandomPool结构
  2. DBA(三):MySQL主从同步、复制模式
  3. 基于某网站的信息爬取与保存
  4. UVA 10410——Tree Reconstruction
  5. nginx 不带www到www域名的重定向
  6. 《设计模式详解》创建型模式 - 原型模式
  7. dev gridview 打印列数过多_更适合孩子使用的错题打印机,超小体积什么都能打:喵喵机P3测评...
  8. knowledge_based topic model - AMC
  9. Kubernetes详解(二十五)——Deployment控制器扩容
  10. 用python建云盘_超简单!基于Python搭建个人“云盘”
  11. jwt如何加盐_手把手教你使用JWT实现单点登录
  12. c语言作业百万富翁for循环做,c语言例题(c语言经典例题100道pdf)
  13. 计算机怎么学的快,怎样学电脑打字最快电脑新手如何快速学会打字
  14. MSP430番外——BSL介绍
  15. 自学编程,十年磨一剑
  16. 神级程序员都在用什么工具?【建议收藏】
  17. oracle从入门到跑路
  18. kNN分类算法伪代码最简python代码
  19. 单片机进阶 --------hex文件格式
  20. C/C++编程:异步编程入门

热门文章

  1. spring 配置相关
  2. Win11怎么共享文件夹?Win11创建共享文件夹的方法
  3. 数据库概论学习笔记——关系数据理论
  4. ERP编制物料清单 基础
  5. 如何计算冲突域和广播域-图解分析
  6. 【移动安全高级篇】————3、Android系统ShellCode编写
  7. Jackson JsonParser 和 JsonGenerator
  8. c++常见面试问题总结
  9. 谢少荣到计算机学院,我院获批国家自然科学基金委人工智能代码(F06)首个重大项目...
  10. 算法篇-2-分治思想-棋盘覆盖归并排序Strasssen矩阵乘法循环赛安排