首页 > 其他分享 >eureka重启后py_eureka_client库心跳包往eureka slave节点复制失败问题排查

eureka重启后py_eureka_client库心跳包往eureka slave节点复制失败问题排查

时间:2024-07-17 21:52:26浏览次数:13  
标签:slave 07 17 exec -- py 12000 eureka http

问题描述

peer1节点(python程序往这个节点注册数据)日志:

12763988:07-17 18:39:45.268 WARN  [] -- [TaskBatchingWorker-target_10.29.46.118-8] c.n.e.c.ReplicationTask:35: The replication of task LBS-PROXY/10.30.37.85:lbx-proxy:8089:[email protected] failed with response code 404

peer2节点日志:

07-17 18:39:51.131 WARN  [] -- [http-nio-12000-exec-8] c.n.e.r.InstanceResource:166: Instance not found: LBS-PROXY/10.30.37.85:lbs-proxy:8095

python程序注册到peer1,往peer2复制时出错了。
此时,如果网关从peer2节点读取注册信息,就会出现读不到进而导致无可用实例的问题。

经过总结,发现每次重启eureka节点后,python客户端都会出现这样的问题。

另外,每次py_eureka_client客户端出现问题时,通过spring boot eureka客户端注册的app,都是正常的。

关键问题:为啥只有python程序会有这个问题呢?

因为python注册时,使用的api和java service不一样。

python程序心跳log:

07-17 20:44:54.095 WARN  [] -- [http-nio-12000-exec-7] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:7000
07-17 20:45:24.155 WARN  [] -- [http-nio-12000-exec-3] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:7000
07-17 20:45:54.189 WARN  [] -- [http-nio-12000-exec-4] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:7000
07-17 20:46:24.234 WARN  [] -- [http-nio-12000-exec-1] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:7000
07-17 20:46:54.277 WARN  [] -- [http-nio-12000-exec-3] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:7000
07-17 20:47:24.320 WARN  [] -- [http-nio-12000-exec-7] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:7000
07-17 20:47:54.367 WARN  [] -- [http-nio-12000-exec-5] c.n.e.r.InstanceResource:166: Instance not found: AIMARKEDSPOI/10.30.37.85:aimarkedspoi:700

Java 心跳log:

07-17 20:49:13.184 DEBUG [] -- [http-nio-12000-exec-10] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false
07-17 20:49:43.187 DEBUG [] -- [http-nio-12000-exec-3] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false
07-17 20:50:13.190 DEBUG [] -- [http-nio-12000-exec-4] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false
07-17 20:50:43.193 DEBUG [] -- [http-nio-12000-exec-10] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false
07-17 20:51:13.196 DEBUG [] -- [http-nio-12000-exec-8] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false
07-17 20:51:43.200 DEBUG [] -- [http-nio-12000-exec-5] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false
07-17 20:52:13.203 DEBUG [] -- [http-nio-12000-exec-6] o.s.c.n.e.s.InstanceRegistry:144: renew ACCOUNT serverId tidedb-ranger5:account:10007, isReplication {}false

分析master节点重启后,python程序注册过程

07-17 18:41:21.089 WARN  [] -- [http-nio-12000-exec-1] c.n.e.r.InstanceResource:166: Instance not found: LBS-PROXY/10.30.37.85:lbs-proxy:8095
07-17 18:41:21.108 WARN  [] -- [http-nio-12000-exec-9] c.n.e.r.InstanceResource:166: Instance not found: LBS-PROXY/10.30.37.85:lbs-proxy:8095
07-17 18:41:21.118 DEBUG [] -- [http-nio-12000-exec-10] o.s.c.n.e.s.InstanceRegistry:144: register LBS-PROXY, vip lbs-proxy, leaseDuration 90, isReplication false
07-17 18:41:21.118 INFO  [] -- [http-nio-12000-exec-10] c.n.e.r.AbstractInstanceRegistry:267: Registered instance LBS-PROXY/10.30.37.85:lbs-proxy:8095 with status UP (replication=false)
此时,会把注册信息推送给slave节点。slave节点log如下:
07-17 18:41:21.149 DEBUG [] -- [http-nio-12000-exec-8] o.s.c.n.e.s.InstanceRegistry:144: register LBS-PROXY, vip lbs-proxy, leaseDuration 90, isReplication true
07-17 18:41:21.149 INFO  [] -- [http-nio-12000-exec-8] c.n.e.r.AbstractInstanceRegistry:267: Registered instance LBS-PROXY/10.30.37.85:lbs-proxy:8095 with status UP (replication=true)

作为对比,java程序心跳包:

07-17 18:41:20.982 DEBUG [] -- [http-nio-12000-exec-7] o.s.c.n.e.s.InstanceRegistry:144: renew TIMER-REPORT-JOBS serverId iZuf65ifav846rhkdgpzthZ:timer-report-jobs:10012, isReplication {}false
07-17 18:41:20.983 WARN  [] -- [http-nio-12000-exec-7] c.n.e.r.AbstractInstanceRegistry:354: DS: Registry: lease doesn't exist, registering resource: TIMER-REPORT-JOBS - iZuf65ifav846rhkdgpzthZ:timer-report-jobs:10012
07-17 18:41:20.983 WARN  [] -- [http-nio-12000-exec-7] c.n.e.r.InstanceResource:116: Not Found (Renew): TIMER-REPORT-JOBS - iZuf65ifav846rhkdgpzthZ:timer-report-jobs:10012
07-17 18:41:20.987 DEBUG [] -- [http-nio-12000-exec-8] o.s.c.n.e.s.InstanceRegistry:144: register TIMER-REPORT-JOBS, vip timer-report-jobs, leaseDuration 90, isReplication false
07-17 18:41:20.988 INFO  [] -- [http-nio-12000-exec-8] c.n.e.r.AbstractInstanceRegistry:267: Registered instance TIMER-REPORT-JOBS/iZuf65ifav846rhkdgpzthZ:timer-report-jobs:10012 with status UP (replication=false)

slave节点重启后,python程序注册过程

模拟slave节点杀死后启动过程,看日志:

07-17 21:21:16.957 WARN  [] -- [http-nio-12000-exec-1] c.n.e.r.InstanceResource:166: Instance not found: LBS-PROXY/10.30.37.85:lbs-proxy:8095

有这条消息的前提是,python程序LBS-PROXY在往master发送心跳,然后master同步到slave。 master对应的日志:

07-17 21:21:04.454 INFO  [] -- [http-nio-12000-exec-7] c.n.e.r.InstanceResource:174: Status updated: LBS-PROXY - 10.30.37.85:lbs-proxy:8095 - UP
07-17 21:21:17.353 WARN  [] -- [TaskBatchingWorker-target_10.29.46.118-5] c.n.e.c.ReplicationTask:35: The replication of task LBS-PROXY/10.30.37.85:lbs-proxy:8095:[email protected] failed with response code 404

作为对比java程序的日志:

07-17 21:21:16.956 DEBUG [] -- [http-nio-12000-exec-1] o.s.c.n.e.s.InstanceRegistry:144: renew DEVICE-DATA-WRITER-10CYCLE serverId tidedb-ranger5:device-data-tidedb-writer-10cycle:12022, isReplication {}true
07-17 21:21:16.957 WARN  [] -- [http-nio-12000-exec-1] c.n.e.r.AbstractInstanceRegistry:354: DS: Registry: lease doesn't exist, registering resource: DEVICE-DATA-WRITER-10CYCLE - tidedb-ranger5:device-data-tidedb-writer-10cycle:12022
07-17 21:21:16.957 WARN  [] -- [http-nio-12000-exec-1] c.n.e.r.InstanceResource:116: Not Found (Renew): DEVICE-DATA-WRITER-10CYCLE - tidedb-ranger5:device-data-tidedb-writer-10cycle:12022

它对应的“java程序device-data-tidedb-writer往master发送的心跳包”和上面是一样的。

区别看出来吧:

  • python的心跳包(Status updated: LBS-PROXY - 10.30.37.85:lbs-proxy:8095 - UP) 复制到slave节点(首次启动)时发现没这个app到信息,然后就一直提示“Instance not found”,它不会自动去做insert的逻辑。
  • 而java的心跳包(renew)复制到slave节点后,它会自动注册app(Registry: lease doesn't exist, registering resource)。

通过这里的分析我们就明白为啥python的eureka客户端(py_eureka_client)在slave节点重启后会有掉线的问题了。

如何避免python程序注册异常呢?

1、避免复制失败的问题。

  • 从节点一定要在master节点之后重启,就不会有问题。
  • 如果发现从节点出现问题,再重启一下master节点就可以了。

2、网关也从master节点(peer1)读取数据,尽量不让slave节点参与(除非master挂了)。

eureka相关源码

renew(心跳包)代码:
org.springframework.cloud.netflix.eureka.server.InstanceRegistry#renew

public boolean renew(final String appName, final String serverId,
			boolean isReplication) {
		log("renew " + appName + " serverId " + serverId + ", isReplication {}"
				+ isReplication);
		List<Application> applications = getSortedApplications();
		for (Application input : applications) {
			if (input.getName().equals(appName)) {
				InstanceInfo instance = null;
				for (InstanceInfo info : input.getInstances()) {
					if (info.getId().equals(serverId)) {
						instance = info;
						break;
					}
				}
				publishEvent(new EurekaInstanceRenewedEvent(this, appName, serverId,
						instance, isReplication));
				break;
			}
		}
		return super.renew(appName, serverId, isReplication);
	}

标签:slave,07,17,exec,--,py,12000,eureka,http
From: https://www.cnblogs.com/xushengbin/p/18308356

相关文章

  • ROS服务通信机制实操Python
    ROS服务通信机制实操Python步骤流程vscode配置服务端客户端编辑配置文件编译并执行优化实现参数的动态提交优化先启动客户端后启动服务端ROS服务通信的理论查阅:ROS服务通信流程理论ROS服务通信的自定义srv数据的准备可以查阅:ROS服务通信自定义srv在模型实现中,ROSm......
  • Python实现基于http通信的protobuf数据传输的案例,包括请求者和接收者
    个人名片......
  • 【发现】_我不喜欢_strlcpy
    https://nrk.neocities.org/articles/not-a-fan-of-strlcpy作者讨论了strcpy的变体strlcpy,并认为这个变体没有使用的意义。他们都是把字符串拷贝到另一个位置的函数,strcpy因为不限制目标位置的长度,容易产生缓冲区溢出,因此被很多人认为是不安全的。strlcpy则改进了这种行为......
  • Python回归、聚类、相关分析上海公租房租金满意度影响因素数据可视化
    全文链接:https://tecdat.cn/?p=37013原文出处:拓端数据部落公众号随着城市化进程的加速,住房问题日益成为城市居民关注的焦点。公租房作为政府为解决中低收入家庭住房困难而推出的一种重要住房保障形式,其租金水平、居住条件及租住体验直接关系到广大租户的切身利益和生活质量......
  • Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析|附代码数据
    全文下载链接:http://tecdat.cn/?p=17748最近我们被客户要求撰写关于销售量时间序列建模的研究报告,包括一些图形和统计输出。在本文中,在数据科学学习之旅中,我经常处理日常工作中的时间序列数据集,并据此做出预测我将通过以下步骤:探索性数据分析(EDA)问题定义(我们要解决什么)变量......
  • python环境配置及基础学习
    python环境配置及基础学习Miniconda安装及使用创建环境condacreate-nnamepython=3.10进入环境condaactivatename退出环境condadeactivateVSCode安装安装成功后,在左边“extensions”搜索Chinese语音包点击install,按照提示重启VSCode在左边“拓展”搜索python,安装......
  • 企业级环境部署:在 Linux 服务器上如何搭建和部署 Python 环境?
     在大部分企业里,自动化测试框架落地都肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。所以,我们如果要在Linux上的Jenkins服......
  • Python函数基础编写定义
    目录1、函数目的2、函数定义3、函数声明4、函数调用5、函数形参6、函数实参7、函数返回值8、函数的参数类型9、匿名函数1、函数目的函数又叫方法,能减少重复代码的编写,提升代码的复用。函数封装了一定的功能,方便不断使用,可以达到简化代码、重复调用的效果,比如系......
  • python 模拟电力系统
    要模拟一个电力系统,你需要使用Python编写一个程序来建立系统的模型,包括发电机、变压器、输电线路、负载等组件,并模拟它们之间的相互作用。这是一个复杂的任务,通常需要使用数学建模和模拟技术,以便分析电力系统的运行情况。以下是一个简单的示例,展示了如何使用Python模拟电力系......
  • Python电力系统PyPsa
    PyPsa是一款电力系统分析包,其可以进行稳态潮流计算(使用非线性/线性网络方程);线性最优潮流计算(线性网络约束下,计算电厂和储能分布的最小成本,使用线性网络方程);安全约束下线性最优潮流计算全电力/能源系统最小投资成本优化(使用线性网络方程,对发电、储能分布、投资优化)等操作。本文主......