consul 服务健康检查
文章目录
- 简介
- check方法
- Script check(Script+ Interval)
- 基于HTTP请求
- 基于tcp请求
- 基于grpc请求
- Docker
简介
服务注册 - 服务进程在注册中心注册自己的位置。它通常注册自己的主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的详细资料。
服务发现 - 客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表。
服务定义的格式类似如下:
/ # cat /consul/config/prometheus.json
{ "service":{ "id": "promtheus", "name": "prometheus", "address": "192.168.1.120", "port": 9090, "tags": ["dev"], "checks": [ { "http": "http://192.168.1.120:9090", "interval": "5s" } ] }
}
重新载入配置
consul reload
界面查看,服务载入成功
其中,check是用来做服务的健康检查的,可以有多个,也可以没有,支持多种方式的检查。check定义在配置文件中,或运行时通过HTTP接口添加。Check是通过HTTP与节点保持一致
check方法
有五种check方法:
check必须是script或者TTL类型的,如果是script类型,则script和interval变量必须被提供,如果是TTL类型,则ttl变量必须被提供
script是consul主动去检查服务的健康状况,ttl是服务主动向consul报告自己的健康状况。
以下是几种配置方式
Check必须是Script、HTTP、TCP、TTL
四种类型中的一种。Script类型需要提供Script脚本和interval变量。HTTP类型必须提供http和Interval字段。TCP类型需要提供tcp和Interval字段,TTL类型秩序提供ttl。
Check的name字段是自动通过service:生成,如果有多个service,则由service::生成。
Script check(Script+ Interval)
通过执行外部应用进行健康检查:这种外部程序具有退出代码,并可能产生一些输出;脚本按照指预置时间间隔来调用(比如,每30秒调用一次),类似于Nagios插件系统,脚本输出限制在4K以内,输出大于4K将截断。默认情况下,脚本超时时间为30秒——可通过timeout来配置。
示例1
{"service": {"name": "web","tags": ["rails"],"port": 80,"checks": [{"id": "mem-util", // 检查项id"name": "Memory utilization", // 检查项名字"args": ["/usr/local/bin/check_mem.py", "-limit", "256MB"], // 这里是我们要执行的命令,第一个参数是命令或者脚本名,后面跟着任意个参数"interval": "10s", // 每10秒执行一次命令"timeout": "1s" // 命令执行超时时间}]}
}
示例2:
{"service": {"name": "web","tags": ["rails"],"port": 80,"checks": [{"args": ["curl", "localhost"], // 执行curl命令,数组第2到第N个元素,代表命令参数"interval": "10s" // 每10秒执行一次命令}]}
}
为了安全考虑,如果健康检查使用执行命令方式,在启动consul的时候支持下面两种参数:
- -enable-script-checks 允许通过配置文件和http api注册的服务,执行命令检查健康状态
- -enable-local-script-checks 禁止通过http api注册的服务,执行命令检查健康状态,只允许通过配置文件注册的服务,执行命令。
建议生产环境使用-enable-local-script-checks
参数启动consul agent。
例子:
consul agent -dev -enable-local-script-checks -config-dir=/etc/consul.d
本地测试,增加-dev参数,代表开发模式,生产环境,去掉-dev参数。
因为只有consul的client才会执行健康检查任务,可以在client设置这个参数就可以。
基于HTTP请求
定时以GET请求方式,请求指定url,http请求返回状态码200表示正常,其他状态代表异常。这种检查将按照预设的时间间隔创建一个HTTP “get”请求。HTTP响应代码来标示服务所处状态:任何2xx代码视为正常,429表示警告——有很多请求;其他值表示失败。
这种类型的检查应使用curl或外部程序来处理HTTP操作。默认情况下,HTTP Checks中,请求超时时间等于调用请求的间隔时间,最大10秒。有可能使用客制的HTTP check,可以自由配置timeout时间,输出限制在4K以内,输出大于4K将截断
{"service": {"name": "web","tags": ["rails"],"port": 80,"checks": [{"id": "api", // 健康检查项的id,唯一"name": "HTTP API on port 5000", // 检查项的名字"http": "https://localhost:5000/health", // 定期访问的Url,通过这个url请求结果确定服务是否正常"tls_skip_verify": false, // 关闭tls验证"method": "POST", // 设置http请求方式,默认是GET"header": { // 可以自定义请求头,可以不配置"x-foo": ["bar", "baz"]},"interval": "10s", // 定期检查的时间间隔,这里是10秒"timeout": "1s" // 请求超时时间,1秒}]}
}
基于tcp请求
基于tcp请求方式,就是定时,向指定的地址,建立tcp连接,连接成功就代表服务正常,否则代表异常。
将按照预设的时间间隔与指定的IP/Hostname和端口创建一个TCP连接。服务的状态依赖于TCP连接是否成功——如果连接成功,则状态是“success”;否则状态是“critical”。如果一个Hostname解析为一个IPv4和一个IPv6,将尝试连接这两个地址,第一次连接成功则服务状态是“success”。
如果希望通过这种方式利用外部脚本执行健康检查,那么脚本应该采用“netcat”或者简单的socket操作。
默认情况下,TCP checks中,请求超时时间等于调用请求的间隔时间,最大10秒。也是可以自由配置的。
{"service": {"name": "web","tags": ["rails"],"port": 80,"checks": [{"id": "ssh", // 检查项目id"name": "SSH TCP on port 22", // 检查项名字"tcp": "localhost:22", // tcp连接地址,ip+port"interval": "10s", // 定义建立连接的时间间隔是10秒"timeout": "1s" // 超时时间是1秒}]}
}
基于grpc请求
如果微服务是基于grpc协议,可以使用grpc协议检测服务是否正常。
{"service": {"name": "web","tags": ["rails"],"port": 80,"checks": [{"id": "mem-util", // 检查项目id"name": "Service health status", // 检查项名字"grpc": "127.0.0.1:12345", // grpc地址,ip+port"grpc_use_tls": true,"interval": "10s" // 10秒检测一次}]}
}
Docker
这种检查依赖于调用封装在docker容器内的外部程序。运行的docker通过docker Exec API来触发外部应用。
我们期望,consul Agent用户访问Docker HTTP API或UNIX套接字。Consul使用$DOCKER_HOST来确定Docker API端点。应用程序将运行,并对在容器内运行的服务执行健康检查,并返回适当的退出代码。Check按照指定的时间间隔调用。
如果在同一个host主机上有多重shell,那么同样需要配置shell参数。
输出限制在4K以内,输出大于4K将截断。
{"check": {"id": "mem-util","name": "Memoryutilization","docker_container_id": "f972c95ebf0e","shell": "/bin/bash","script": "/usr/local/bin/check_mem.py","interval": "10s"}
}
每一种check都必须包含name,id和notes两个是可选的。如果没有提供id,那么id会被设置为name。在一个节点中,check的ID都必须是唯一的。如果名字是冲突的,那么ID就应该设置。
字段Notes主要是增强checks的可读性。Script check中,notes字段可以由脚本生成。同样,适用HTTP接口更新TTL check的外部程序一样可以设置notes字段。
参考:
https://www.cnblogs.com/duanxz/p/9662862.html
https://www.tizi365.com/archives/514.html
consul 服务健康检查相关推荐
- Tengine 服务健康检查
简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很 ...
- consul:健康检查
官方文档:https://www.consul.io/docs/agent/checks.html consul提供的健康检查有以下几种: 1.script+interval 2.http+inter ...
- nacos的cp和ap原则,服务健康检查
CP和AP CAP原则:cap理论是针对分布式数据库而言的,它是指在一个分布式系统中,一致性(Consistency,C).可用性(Availability,A).分区容错性(Partition To ...
- SpringCloud Nacos 心跳机制和服务健康检查源码解析
1 客户端心跳机制 1.1 客户端注册源码流程 https://blog.csdn.net/qq_34125999/article/details/117566523 1.2 NacosNamingS ...
- mysql健康检查脚本_MySQL服务健康检查脚本
#!/bin/sh #date:2015-12-07 #filename:check_mysql.sh #作者:linuxzkq #Email:1729294227@qq.com #version:v ...
- mysql 健康检查_MySQL服务健康检查脚本
#!/bin/sh #date:2015-12-07 #filename:check_mysql.sh #作者:linuxzkq #Email:1729294227@qq.com #version:v ...
- consul服务注册与健康检查
consul服务注册与健康检查(centos7) consul简介 consul的服务注册 服务的健康检查 服务查询发现 服务过滤 consul简介 用于实现分布式系统的服务发现与配置.Consul ...
- Consul服务注册发现与健康检查
一.Consul概述 consul是一个开源的使用go语言开发的服务发现.配置管理中心服务.内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,不再需要依 ...
- Nacos系列【23】Nacos2.x服务发现模块之注册中心健康检查机制
有道无术,术尚可求,有术无道,止于术. 资料整理来自Nacos架构与原理电子书,下载地址:https://developer.aliyun.com/ebook/36?spm=a2c6h.2034510 ...
最新文章
- Extjs之window异步拦截关闭事件beforeClose的实现
- iOS架构-自动打包并上传到App Store(python)(21)
- OpenSSL生成自签名的sha256泛域名证书
- ABAP Development Tool后台处理前台请求的入口
- cannot use a string pattern on a bytes-like object(bytes与str互转)
- 遵化计算机培训,遵化人力资源培训
- 如何证明CPU缓存行cacheline的存在?
- Spark 原理 —— 从 akka 到 spark 集群的启动
- mybatis中resultMap的几种用法
- C语言-顺序栈的基本操作
- Java开源框架 iBase4J 搭建笔记
- 缅怀:腾讯游戏毛星云(浅墨)突然离世
- H264中一些很有用的解释
- 微型计算机原理(第六版)姚向华编著(转载请注明出处---https://www.cnblogs.com/qingl)...
- js鼠标点击位置 弹出层由中心向四周缓慢扩大
- C#调用大华相机SDK获取图片,转换成VisionPro的Icogimage格式
- 为什么一个盘里的文件夹都不见了,里面一片空白,但那些文件所占的内存却还在的,但好像没被删除
- 世界主要港口中英文对照表
- [转帖]探秘华为(二):华为和H3C(华三)的分道扬镳
- 机器学习-吃瓜教程(西瓜书+南瓜书)-神经网络