app软件设计公司,seo推广如何做,中国建设银行货币基金网站,网站内部优化是什么通过本文能学习什么#xff1f;初步了解zookeeper监控如何运用tcpdump Wireshark抓包分析Dubbo在zookeeper上节点设计如何查看zookeeper节点快照背景zookeeper作为dubbo的注册中心#xff0c;承载着服务的基础信息(方法名#xff0c;分组#xff0c;版本等)#xff0c;服…通过本文能学习什么初步了解zookeeper监控如何运用tcpdump Wireshark抓包分析Dubbo在zookeeper上节点设计如何查看zookeeper节点快照背景zookeeper作为dubbo的注册中心承载着服务的基础信息(方法名分组版本等)服务关系等信息。随着业务增多服务数增加注册中心的网络IO已逐步成为瓶颈。介绍zookeeper监控zookeeper3.4.6后提供四字命令可以查看zookeeper集群状态信息。例如echo conf | nc localhost 2181查看集群配置信息端口最大连接数等echo cons | nc localhost 2181查看客户端链接的详情接受/发送包数session id等echo crst | nc localhost 2181重置所有客户端的统计信息echo dump | nc localhost 2181列出未经处理的会话和临时节点echo envi | nc localhost 2181查看服务器的环境信息java.homeos.name等echo ruok | nc localhost 2181测试集群是否正常运行echo srst | nc localhost 2181重置服务器的统计信息echo srvr | nc localhost 2181查看服务器的详细信息。zk版本、接收/发送的包数量、连接数、运行模式、节点总数等echo stat | nc localhost 2181查看客户端列表接收/发送包数量、连接数、运行模式、节点总数、延迟等echo wchs | nc localhost 2181查看watches相关信息echo mntr | nc localhost 2181列出集群的健康状态。接受/发送的包数量、操作延迟、运行模式、节点总数、watch总数、临时节点总数等我们使用Grafana和Prometheus去收集zookeeper集群信息和展示底层也是通过四字命令获取信息。线上案例我们线上zookeeper监控偶尔会收到堆积请求数告警经查看发现是网络IO过大造成了请求堆积不过很快又恢复了可能某个应用那一刻爬去了大量zookeeper节点。排查过程如何找到调用方由于突发流量是不定时的没法通过实时流量分析只能通过侧面突破。zookeeper上存储的都是服务的基本信息。服务的摘挂流量重启等操作都会导致zookeeper节点变动并通知上游。这样就可以通过发布系统找下那一段时间谁在发布看看是否有突破口。通过查看发布系统找到了A服务的网络IO与zookeeper的网络IO图形契合并且出入口流量也能对上至此我们找到了谁在大量拉取zookeeper.zookeeper哪些节点被频繁拉取初步怀疑是A服务使用dubbo方式不对最后查看A服务源码并未找到问题。由于A服务每次重启都会导致zookeeper流量增高说明是可复现的可以进行抓包分析抓包工具主流的就是tcpdump Wireshark。tcpdump是linux下的网络截取工具是服务端抓包的首选。它支持针对网络层、协议、主机、网络或端口的过滤并提供and、or、not等逻辑语句来过滤信息。通过以下命令获取我们需要的数据包。tcpdump host (10.10.xx.xx or 10.10.xx.xx or 10.10.xx.xx) and tcp port 4181 -s 0 -w zk.pcaphost指定多个IPport指定端口-s 0抓取完整包而不是默认的68字节-w保存文件还有很多其他参数大家可以通过man tcpdump查看。我们用Wireshark打开zk.pcap抓包文件。Wireshark十分强大可以分析TCP等各种协议并且提供丰富的语法来过滤信息分析TCP三次握手就能通过Wireshark查看大家有兴趣可以下来研究。我们可以根据length排序后再跟踪一个TCP流查看包内容红色为请求蓝色为返回我们发现请求了非常多的/dubbo/com.missfresh.algo.common.api.service.IRecoRecallService/configurators节点。节点作用是什么简单介绍下dubbo在zookeeper注册节点作用。routes节点路由规则相关永久节点。configurators节点dubbo配置相关永久节点。providers节点服务提供者信息临时节点生产者注册到该节点消费者会监听该节点。consumers节点消费者信息临时节点消费者注册到该节点。configurators节点记录了服务的IP分组和版本信息。如果有N个IPM个分组K个版本那个该节点个数为N * M * K个。如何查看zookeeper上该节点个数可以通过zkClient连上集群查看。今天我们通过另一种方式分析zookeeper快照日志查看。zookeeper有事务日志(log.*)和快照日志(snapshot.*)可以通过zookeeper自带工具把snapshot日志转成文本。java -classpath :./slf4j-api-1.7.25.jar:../zookeeper-3.4.12.jar org.apache.zookeeper.server.SnapshotFormatter ~/Documents/snapshot.b3c8cb285 ~/Documents/zk-snapshot-20200325.log通过本地文件分析发现该节点接近4000个。总结总结原因1、由于dubbo服务的上下线调节权重等操作都会生成configurators永久节点导致该节点一直积累每次服务启动都会去拉取该服务的所有配置导致zookeeper出口流量增加。2、为什么会有这么多节点业务方在使用时存在问题每次迭代都升级服务版本号正确做法是尽量兼容低版本的服务只有在完全无法兼容情况再考虑升级服务版本号。并且给每个上游一个service group但并没有通过service group隔离环境/机器导致节点数是服务版本号与service group的乘积。解决方案1、拿到废弃节点后通过zkClient删除废弃节点。2、业务调整服务调用方式把service group去掉改用多个方法对外暴露。未来规划随着业务逐渐往docker迁移我们基础组件也迎来新的挑战频繁的扩容缩容IP变换也会导致注册中心越来越臃肿需要一个注册中心治理服务给他瘦身。