批量剔除consul无效服务
批量剔除consul无效服务
- 一、剔除consul无效服务
- 1.脚本
- 1.1单节点删除
- 1.2集群删除
- 1.2.1集群删除脚本1
- 1.2.2集群删除优化脚本2
- 1.2.3集群删除优化脚本3
- 2.java服务
一、剔除consul无效服务
正常情况下,若是没有设置服务的健康检查剔除时间,则 consul不会主动的去清除掉失效的服务,所以就需要手动的来清理, 但是往往一个consul上又有多个失效的服务,一个一个剔除效率又太低,那么就需要通过脚本等形式进行批量剔除。
1.脚本
1.1单节点删除
参考删除consul的无效/失效服务
vi clean_consul.sh
加入以下内容:
#!/bin/bash
# tiki 2021-06-22#consul的地址
CONSUL_ADDRESS="192.168.2.4:8500"#判断是否存在logs目录,不存在则创建
test -d logs || mkdir logsecho -e "\n---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------"
echo -e "\n---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------" >> logs/clean-consul-`date +%Y%m%d`.log
# 获取当前consul中状态为critical的serviceID
CONSUL_CRITICAL=`curl -s -XGET http://${CONSUL_ADDRESS}/v1/health/state/critical | python -m json.tool | grep ServiceID | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`
for critical in ${CONSUL_CRITICAL}
doecho "${critical} 已删除"echo "${critical} 已删除" >> logs/clean-consul-`date +%Y%m%d`.log# 使用consul的API删除对应的serviceIDcurl -XPUT http://${CONSUL_ADDRESS}/v1/agent/service/deregister/${critical}
done
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n"
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n" >> logs/clean-consul-`date +%Y%m%d`.log
但上述脚本只能删除注册在该consul节点上的无效服务,就算该节点是consul集群中的一个有效节点,也无法删除其他节点上的无效服务,
所以consul如果是个集群的话,则应该用下方脚本
1.2集群删除
1.2.1集群删除脚本1
将所有consul节点的地址都编入:
#!/bin/bash
# tiki 2021-06-22#consul的地址
CONSUL_ADDRESS="192.168.2.4:8500 192.168.3.3:8500 192.168.3.2:8500 192.168.3.1:8500 192.168.3.6:8500"#判断是否存在logs目录,不存在则创建
test -d logs || mkdir logsecho -e "\n---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------"
echo -e "\n---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------" >> logs/clean-consul-`date +%Y%m%d`.log
for ADDRESS in ${CONSUL_ADDRESS}
doecho "开始删除 ${ADDRESS} 上无效服务"echo "开始删除 ${ADDRESS} 上无效服务" >> logs/clean-consul-`date +%Y%m%d`.log# 获取当前consul中状态为critical的serviceIDCONSUL_CRITICAL=`curl -s -XGET http://${ADDRESS}/v1/health/state/critical | python -m json.tool | grep ServiceID | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`for critical in ${CONSUL_CRITICAL}doecho "${critical} 已删除"echo "${critical} 已删除" >> logs/clean-consul-`date +%Y%m%d`.log# 使用consul的API删除对应的serviceIDcurl -XPUT http://${ADDRESS}/v1/agent/service/deregister/${critical}doneecho -e "${ADDRESS} 删除无效服务结束\n"echo -e "${ADDRESS} 删除无效服务结束\n" >> logs/clean-consul-`date +%Y%m%d`.log
done
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n"
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n" >> logs/clean-consul-`date +%Y%m%d`.log
1.2.2集群删除优化脚本2
优化了输出日志到控制台与文件后的脚本如下,但好像性能有下降,有待验证:
(若是有多个consul的单节点,又不属于同一个集群,则推荐用该脚本,相较于脚本1,脚本2只是优化了日志输出语句)
#!/bin/bash
# tiki 2021-06-22#consul的地址
CONSUL_ADDRESS="192.168.2.4:8500 192.168.3.3:8500 192.168.3.2:8500 192.168.3.1:8500 192.168.3.6:8500"
#日志文件名称
LOG_FILE="clean-consul.log"#判断是否存在logs目录,不存在则创建
test -d logs || mkdir logsecho "---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------" | tee -a logs/${LOG_FILE}
for ADDRESS in ${CONSUL_ADDRESS}
doecho "开始删除 ${ADDRESS} 上无效服务" | tee -a logs/${LOG_FILE}# 获取当前consul中状态为critical的serviceIDCONSUL_CRITICAL=`curl -s -XGET http://${ADDRESS}/v1/health/state/critical | python -m json.tool | grep ServiceID | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`for critical in ${CONSUL_CRITICAL}doecho "${critical} 已删除" | tee -a logs/${LOG_FILE}# 使用consul的API删除对应的serviceIDcurl -XPUT http://${ADDRESS}/v1/agent/service/deregister/${critical}doneecho -e "${ADDRESS} 删除无效服务结束\n" | tee -a logs/${LOG_FILE}
done
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n" | tee -a logs/${LOG_FILE}
参考将终端内容输出到文件中,又显示在终端
1.2.3集群删除优化脚本3
继上述输出优化后,优化consul集群节点查询,不用再手动输入所有consul集群节点,下方脚本可以通过一个节点查询出集群中的所有节点(要求是一个集群内的):
#!/bin/bash
# tiki 2021-06-23#consul的地址,集群中一个节点即可
CONSUL_ADDRESS="192.168.2.4:8500"
#日志文件名称
LOG_FILE="clean-consul.log"#判断是否存在logs目录,不存在则创建
test -d logs || mkdir logsecho "---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------" | tee -a logs/${LOG_FILE}
# 获取当前consul中所有节点的Node
CONSUL_NODE=`curl -s -XGET http://${CONSUL_ADDRESS}/v1/catalog/nodes | python -m json.tool | grep Node | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`
echo -e "consul集群所有节点如下:\n${CONSUL_NODE}\n" | tee -a logs/${LOG_FILE}
for NODE in ${CONSUL_NODE}
do#从node的第8个字符开始截取ADDRESS=${NODE:7}echo "当前节点为:${ADDRESS}" | tee -a logs/${LOG_FILE}echo "开始删除 ${ADDRESS} 上无效服务" | tee -a logs/${LOG_FILE}# 获取当前consul中状态为critical的serviceIDCONSUL_CRITICAL=`curl -s -XGET http://${ADDRESS}/v1/health/state/critical | python -m json.tool | grep ServiceID | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`for critical in ${CONSUL_CRITICAL}doecho "${critical} 已删除" | tee -a logs/${LOG_FILE}# 使用consul的API删除对应的serviceIDcurl -XPUT http://${ADDRESS}/v1/agent/service/deregister/${critical}doneecho -e "${ADDRESS} 节点删除无效服务结束\n" | tee -a logs/${LOG_FILE}
done
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n" | tee -a logs/${LOG_FILE}
其运行如下:
---------start 2021-06-23 11:30:42----------
consul集群所有节点如下:
client-192.168.3.2:8500
client:192.168.2.4:8500
server-192.168.3.3:8500
server-192.168.3.1:8500
server-192.168.3.6:8500当前节点为:192.168.3.2:8500
开始删除 192.168.3.2:8500 上无效服务
smarthome-telecomsync-srv-192-168-71-1 已删除
192.168.3.2:8500 节点删除无效服务结束当前节点为:192.168.2.4:8500
开始删除 192.168.2.4:8500 上无效服务
192.168.2.4:8500 节点删除无效服务结束当前节点为:192.168.3.3:8500
开始删除 192.168.3.3:8500 上无效服务
192.168.3.3:8500 节点删除无效服务结束当前节点为:192.168.3.1:8500
开始删除 192.168.3.1:8500 上无效服务
192.168.3.1:8500 节点删除无效服务结束当前节点为:192.168.3.6:8500
开始删除 192.168.3.6:8500 上无效服务
192.168.3.6:8500 节点删除无效服务结束---------finish 2021-06-23 11:30:43----------
减少循环次数,优化如下(若是一个consul集群内的,则推荐用该脚本):
#!/bin/bash
# tiki 2021-06-23#consul的地址,集群中一个节点即可
CONSUL_ADDRESS="192.168.2.4:8500"
#日志文件名称
LOG_FILE="clean-consul.log"#判断是否存在logs目录,不存在则创建
test -d logs || mkdir logsecho "---------start "$(date "+%Y-%m-%d %H:%M:%S")"----------" | tee -a logs/${LOG_FILE}
# 获取当前consul中所有节点的Node
CONSUL_NODE=`curl -s -XGET http://${CONSUL_ADDRESS}/v1/catalog/nodes | python -m json.tool | grep Node | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`
echo -e "consul集群所有节点如下:\n${CONSUL_NODE}\n" | tee -a logs/${LOG_FILE}
for NODE in ${CONSUL_NODE}
do#从node的第8个字符开始截取ADDRESS=${NODE:7}echo "当前节点为:${ADDRESS}" | tee -a logs/${LOG_FILE}echo "开始删除 ${ADDRESS} 上无效服务" | tee -a logs/${LOG_FILE}# 获取当前consul中状态为critical的serviceIDCONSUL_CRITICAL=`curl -s -XGET http://${ADDRESS}/v1/health/state/critical | python -m json.tool | grep ServiceID | awk '{print $2}' |sed 's/"//g' | sed 's/,//g'`for critical in ${CONSUL_CRITICAL}doecho "${critical} 已删除" | tee -a logs/${LOG_FILE}# 使用consul的API删除对应的serviceIDcurl -XPUT http://${ADDRESS}/v1/agent/service/deregister/${critical}doneecho -e "${ADDRESS} 节点删除无效服务结束\n" | tee -a logs/${LOG_FILE}#判断无效的服务列表是否为空,为空则结束循环if [ -z "${CONSUL_CRITICAL}" ]thenecho -e "所有无效服务都已删除\n" | tee -a logs/${LOG_FILE}breakfi
done
echo -e "---------finish "$(date "+%Y-%m-%d %H:%M:%S")"----------\n" | tee -a logs/${LOG_FILE}
执行后如下:
---------start 2021-06-23 11:49:45----------
consul集群所有节点如下:
client-192.168.3.2:8500
client:192.168.2.4:8500
server-192.168.3.3:8500
server-192.168.3.1:8500
server-192.168.3.6:8500当前节点为:192.168.3.2:8500
开始删除 192.168.3.2:8500 上无效服务
192.168.3.2:8500 节点删除无效服务结束所有无效服务都已删除---------finish 2021-06-23 11:49:45----------
若是有多个consul集群,则稍微改造上面脚本即可
2.java服务
参考consul剔除无效服务
批量剔除consul无效服务相关推荐
- consul删除无效服务
curl http://server_ip:8500/v1/agent/service/deregister/paas-portal-sit-9003 -X PUT 删除无效服务: paas-port ...
- 使用Consul做服务发现的若干姿势
作者:波斯码 来源:http://blog.bossma.cn/consul/consul-service-register-and-discovery-style/?hmsr=toutiao.io& ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
1622219047536 写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下 ...
- 一个故事,一段代码告诉你如何使用不同语言(GolangC#)提供相同的能力基于Consul做服务注册与发现
文章目录 引言 什么是微服务 传统服务 微服务 什么是服务注册与服务发现 为什么要使用不同的语言提供相同的服务能力 服务协调器 服务注册 Golang C#(.NetCore3.1) 服务发现 通过H ...
- .NET Core微服务之基于Consul实现服务治理
一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,比如 Airbnb的SmartStack等相比,Co ...
- .NET Core微服务之基于Consul实现服务治理(续)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 上一篇发布之后,很多人点赞和评论,不胜惶恐,这一篇把上一篇没有弄到的东西补一下,也算是给各位前来询问的朋友的一些回复吧. 一.Consul ...
- Asp.Net Core Ocelot Consul 微服务
做一个简单的微服务架构如下图: 这个图表示的是一个网关代理Consul的两个服务,consul每个服务注册集群 安装 Consul的服务,这里安装单机版的,集群版配置最低要求(3个Consul ser ...
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...
- Node.js + Consul 实现服务注册、健康检查、配置中心
Node.js + Consul 实现服务注册.健康检查.配置中心 在这篇文章中: 初始化 Consul 客户端 服务注册与健康检查 配置Consul管理控制台 服务配置中心实现 在Nodejs中进行 ...
- golang 使用 consul 做服务发现
原文地址:golang 使用 consul 做服务发现 当我们服务越来越多,如果服务配置了弹性伸缩,或者当服务不可用时,我们需要随时动态掌握可以使用的服务数量,并向可提供响应的服务发送请求.这时我们需 ...
最新文章
- Git相关二三事(git reflog 和彩色branch)【转】
- python3.7如何使用enum_我如何用Python表示‘Enum’?
- 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
- 数据中心小母线与列头柜供配电系统的综合比较
- poj 2749 2-SAT问题
- Hacker(22)----解除系统中的密码
- selenium操作cookies实现免密登录,自动发微博
- [CodeJam 2019 Round 3] Rancake Pyramid(笛卡尔树)
- vue动态监听窗口高度 - 全背景banner
- python四种可变类型_Python的可变类型与不可变类型
- 织梦dede所有标签调用方法大全
- opencv 编译安装时出现报错 modules/videoio/src/cap_ffmpeg_impl.hpp:585:34: error: ‘AVStream {aka struct AVStre
- 天堂2单机版如何架设mysql_天堂2单机版 L2J-som-rotm 安装全过程及常用工具 一步到位...
- 方舟生存进化服务器存档位置,方舟生存进化如何转移存档
- mocha java mv_代码覆盖Mocha
- Webtoos 仿Q+云桌面框架
- 52GB!网曝网易邮箱数据又泄露?还是葫芦娃?
- python django + uwsgi+Nginx宝塔centos7的部署方案
- aptio设置图解教程2012中文_u盘装系统bios设置图解|u盘重装系统设置bios教程
- uniapp微信小程序使用vant-weapp详细操作步骤(各种坑)
热门文章
- centos php安装 pecl,pecl是什么?如何在centos下安装pecl?
- Autovue 集成
- arduino IED2.0实现Serial.println打印结果
- 【吐槽】Android 第一步,雀氏纸尿裤
- docker之网络管理
- 启动springboot报错:程序包org.springframework.boot不存在
- HCNA 实验指南(Ensp V350)
- 全国省份、城市关联表 mysql(含城市名拼音)
- oracle to_char 进制转换_〖Oracle 转载〗Oracle的数据类型转换 to_char
- Anaconda基本教程及常用命令(介绍、安装、基本操作、管理环境、管理包、conda和pip以及借助pqi换源)