健康检查是Consul提供的一项主要功能,其配置格式如下:

{
 "check": {
   "id": "redis",
   "name": "redis valid",
   "script": "/usr/local/bin/check_redis.py",
   "interval": "3s",
   "timeout": "1s"
  }
}

如上语义为,每个3s调用外部程序执行redis有效性检查。

Consul规定了外部脚本退出码代表的语义:

Ø 退出代码0 – 正常passing

Ø 退出代码1 – 告警warning

Ø 其他值 - 失败critical

换句话说,健康检查程序返回的状态最多有3种,consul agent会将每次检查的结果上报的consul集群。

在实践过程中出现了一个问题。

实践方案为:5节点Consul集群,每个节点均注册redis服务,并执行redis健康检查,leader节点搜集所有节点的redis状态数据,然后进行异常状态处理。

问题:当某个节点返回passing后,节点直接掉电,Consul存储中的该节点的redis状态数据会一直是passing状态,与实际不符。

基于实践结果,推测,健康检查的状态数据会存放到数据库,由于故障节点掉电导致无法更新数据,导致状态数据一直未passing。

解决办法为:基于session机制

{
  "LockDelay":"10s",
  "Name":"nodex-redis",
  "Node":"nodex",
  "Checks":["redis"],
  "Behavior":"release",
  "TTL":"0s"
}

在外部执行程序中增加与redis服务相关session,当监测是redis有效时就renew,否则destroy;leader节点监测session的存在性,若不存在则相应节点redis服务失效。

另外一种方案,基于服务查询机制,

[tag.]<service>.service[.datacenter].<domain>

leader监测节点的数据中心的注册的服务是否发生变化,但是有如下缺陷,其结果并不一定准确。

DNS查询系统利用健康检查以防止不良节点路由信息。当服务查询时,如果服务健康检查失败或者系统检查失败,服务信息将会从查询结果中删除。为了实现简单的负载平衡,返回的节点集合每次都是随机的。这种机制使得利用DNS接口基于应用级重试实现面向auto-healing服务体现架构变得更加容易。

【Consul】关于健康检查的一点思考的更多相关文章

  1. consul:健康检查

    官方文档:https://www.consul.io/docs/agent/checks.html consul提供的健康检查有以下几种: 1.script+interval 2.http+inter ...

  2. .NetCore快速上手Consul,留给自己一点思考的空间

    互联网热潮下,"微服务"技术架构成为了一种高大上的技术,其顾名思义就是将传统的大的业务服务拆分成独立的小服务,当拆分的服务慢慢多起来的时候,我们会发现服务地址很难管理,传统的方式一 ...

  3. .Net Core微服务——自动收缩、健康检查:Consul(三)

    继续上一篇的话题,顺便放上一篇的传送门:点这里. 健康检查 经过之前的操作,我的consul已经支持自动扩展,并且调用也很靠谱.但是这里有个问题,一旦服务列表里的某个服务挂了,consul并不知道,还 ...

  4. Springboot监控之一:SpringBoot四大神器之Actuator之2--覆盖修改spring cloud的默认的consul健康检查规则

    微服务网关是socket长连接与支付公司对接,该网关需要提供http接口给内部系统调用,当socket没有建立连接时(网关服务的高可用是haProxy搭建的,有些服务的socket可能未连上支付公司) ...

  5. consul集群搭建,配合nginx完成服务动态发现和健康检查

    1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...

  6. ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇

    题外话 笔者有个习惯,就是在接触新的东西时,一定要先搞清楚新事物的基本概念和背景,对之有个相对全面的了解之后再开始进入实际的编码,这样做最主要的原因是尽量避免由于对新事物的认知误区导致更大的缺陷,Bu ...

  7. ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇

    背景 笔者所在的公司正在进行微服务改造,这其中服务治理组件是必不可少的组件之一,在一番讨论之后,最终决定放弃 Zookeeper 而采用 Consul 作为服务治理框架基础组件.主要原因是 Consu ...

  8. 关于java异常的一点思考

    关于异常的一点思考 异常生命周期 异常的来源 所有的异常都是抛出来的 有底层api抛出的 有自定义抛出的 异常的处理 1, 运行时异常 不做任何处理仍可编译通过 不建议捕获(不建议用异常来做流程控制, ...

  9. 对dump脱壳的一点思考

    对dump脱壳的一点思考 偶然翻了一下手机日历,原来今天是夏至啊,时间过的真快.ISCC的比赛已经持续了2个多月了,我也跟着比赛的那些题目学了2个月.......虽然过程很辛苦,但感觉还是很幸运的,能 ...

随机推荐

  1. Xpath定位_1:子找父以及contains的用法

    先上xml代码,如下图,在写自动化脚本时,需要定位到数字为10334的td元素.td元素的父元素.父的父元素以及属性值都一样:只有同胞元素的元素值不同.以此可以通过先定位到同胞元素,在找到父元素下的期 ...

  2. 关于自学C语言这件事

    说在前面 为什么会写下这篇文章?本人也并不是什么大神,但是也自学了很久,从一个小白开始自学,期间走过很多弯路,掉过许多坑.一路跌跌撞撞下来,算是有了点收获,有了点感想,将它们记录下来,希望能帮助新入坑 ...

  3. BZOJ4066:简单题(K-D Tree)

    Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:   命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 ...

  4. 设置IE浏览器的默认主页

    实现效果: 知识运用: RegistryKey类的GetValue方法 public Object GetValue (string name , Object defaultValue) name ...

  5. 【luogu P2065 [TJOI2011]卡片】 假题解

    题目链接:https://www.luogu.org/problemnew/show/P2065 辣鸡匈牙利,没有优化贼鸡儿慢 // luogu-judger-enable-o2 #include & ...

  6. Android学习笔记_6_保存文件到SDCard

    一.加入访问sdcard的权限 Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态 ...

  7. Win7下运行VC程序UAC权限问题 VC2010设置UAC权限方法

    https://msdn.microsoft.com/en-us/library/bb756929.aspx 我使用的是VS2010,设为连接器清单文件的uac执行级别 直接项目右键---属性---配 ...

  8. putty 启动 linux 下的oracle

    没搞过linux ,仅作记录: 1 打开putty.exe 程序 ,选择 连接 2 输入linux 的用户名和密码后,按下图操作: 3  启动监听 4 命令总结: 1.  sudo su - orac ...

  9. 64 位系统(win7/win8) 下使用C# 程序问题

    1  C# 程序是控制台类,使用的组件如果是32位,建议在编译的时候,platform (X86,AnyCPU,X64)选择X86 .使用X86 模式编译,才能调用32位程序的API. 2  ASP. ...

  10. mysql慢查询开启及分析方法

    最近服务维护的公司的DB服务器,总是会出现问题,感觉需要优化一下了,登陆上去,发现慢查询日志都没有开,真是惭愧, 故果断加上慢查询日志, 经过分析sql记录,发现问题很多,开发人员很多没有对sql优化 ...