grpc系列1-K8S集群,VIP,grpc._channel._InactiveRpcError connection reset by peer解决方案 Paddleserving服务化部署

202 篇文章 14 订阅
106 篇文章 1 订阅

报错

grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
	status = StatusCode.UNAVAILABLE
	details = "Connection reset by peer"
	debug_error_string = "{"created":"@1656122568.552913904","description":"Error received from peer ipv4:xxx.xxx.57.213:30083","file":"src/core/lib/surface/call.cc","file_line":1067,"grpc_message":"Connection reset by peer","grpc_status":14}"
 raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
	status = StatusCode.UNAVAILABLE
	details = "connections to all backends failing"
	debug_error_string = "{"created":"@1656122569.146862274","description":"Failed to pick subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":5419,"referenced_errors":[{"created":"@1656122568.553159260","description":"connections to all backends failing","file":"src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc","file_line":335,"grpc_status":14}]}"

问题

k8sVIP,服务端和客户端,超时复位:
https://www.codercto.com/a/45450.html
https://www.jianshu.com/p/ce4d0c866a2c

详细解决方案:

本质上就是让探针及时探测到断开情况并重连,就是保持在发送消息的时候处于连接的状态

解决思路:http://longfan.me/post/devops/2020-07-09
术语解释:https://webhostinggeeks.com/howto/configure-linux-tcp-keepalive-setting/
GRPC官方文档:
https://grpc.io/docs/languages/python/basics/
在这里插入图片描述

理解

详细概念理解:https://www.yixuebiancheng.com/article/88647.html

tcp KeepAlive 并不是 tcp 协议的一部分,但是大多数操作系统都实现了这个机制。KeepAlive 机制可以理解为:
这3个参数与TCP KeepAlive有关.默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle空闲 2个小时后,客户端内核才发起probe.如果probe9次(每次j间隔75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务

Solution
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 30

600 + 9 * 30 = 870 < 900
尝试把net.ipv4.tcp_keepalive_time + net.ipv4.tcp_keepalive_probes * net.ipv4.tcp_keepalive_intvl改成了小于 900 的值以后,经过观察和测试,貌似出现Error: 14 UNAVAILABLE: TCP Write failed错误信息的概率变小了, 问题看起来暂时解决了一部分,准备再观察一段时间看看情况。

docker指令run配置:https://docs.docker.com/engine/reference/commandline/run/

--rm		Automatically remove the container when it exits
--privileged		Give extended privileges to this container

要根据自身的业务来调整这三个参数,有下面三种方式:

第一种方式:
# vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
# sysctl -p
 
第二种方式:
# echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
 
第三种方式:
# sysctl -w net.ipv4.tcp_keepalive_time=600  
# sysctl -w net.ipv4.tcp_keepalive_probes=2
# sysctl -w net.ipv4.tcp_keepalive_intvl=2

术语 HTTP,TCP, socket,RPC 与gRPC都是啥

参考:https://blog.csdn.net/qq_15821487/article/details/125868985?spm=1001.2014.3001.5501
首先回顾下计算机网络的五(七)层协议:物理层、数据链路层、网络层、传输层、(会话层、表示层)和应用层。那么从协议上来讲:

TCP是传输层协议,主要解决数据如何在网络中传输
HTTP 是应用层协议,主要解决如何包装数据(文本信息),是建立在tcp协议之上的应用。TCP协议是以二进制数据流的形式解决传输层的事儿,但对上层的应用开发极不友好,所以面向应用层的开发又产生了HTTP协议。
而socket 是针对TCP或UDP的具体接口实现,提供了在传输层进行网络编程的方法。

在这里插入图片描述

理解:https://network.51cto.com/article/609479.html
理解1:https://www.programminghunter.com/article/87951280996/
理解2:https://blog.csdn.net/u013078871/article/details/118680029
理解3:https://blog.csdn.net/pearl8899/article/details/118640086

RPC 远程过程调用(分布式、微服务间的方法调用)
HTTP 无状态,每次请求都要发送一个request,服务器响应之后就断掉(http header中的keep-alive指的是tcp)
TCP 面向连接,三次握手保证通信可靠
UDP 非面向连接,不可靠,速度快(可以手动对数据收发进行验证,IM系统多采用,QQ)
socket TCP协议的接口实现,面向传输层进行网络编程

RPC原理是什么?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

grpc:grpc是谷歌开源的一个 rpc 框架,面向移动和 http/2 设计。

在这里插入图片描述

1.什么是Socket?

在这里插入图片描述

在这里插入图片描述

为何有http协议之后,还要RPC调用?

在这里插入图片描述

通俗解释:HTTP VS RPC (普通话 VS 方言)

HTTP 与 RPC 的关系就好比普通话与方言的关系。要进行跨企业服务调用时,往往都是通过 HTTP API,也就是普通话,虽然效率不高,但是通用,没有太多沟通的学习成本。但是在企业内部还是 RPC 更加高效,同一个企业公用一套方言进行高效率的交流,要比通用的 HTTP 协议来交流更加节省资源。整个中国有非常多的方言,正如有很多的企业内部服务各有自己的一套交互协议一样。虽然国家一直在提倡使用普通话交流,但是这么多年过去了,你回一趟家乡探个亲什么的就会发现身边的人还是流行说方言。

如果再深入一点说,普通话本质上也是一种方言,只不过它是官方的方言,使用最为广泛的方言,相比而言其它方言都是小语种,小语种之中也会有几个使用比较广泛比较特色的方言占比也会比较大。这就好比开源 RPC 协议中 Protobuf 和 Thrift 一样,它们两应该是 RPC 协议中使用最为广泛的两个。

备注

idle
英 [ˈaɪdl][ˈaɪdl]  
adj.
懈怠的;懒惰的;闲置的;没有工作的;闲散的;漫无目的的;空闲的
v.
混时间;闲荡;无所事事;空转;挂空挡;未熄火;(尤指暂时地)关闭工厂,使(工人)闲着
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值