PyArango与pod保持持久连接,即使在节点死亡(Kubernetes)之后



我有一个Kubernetes多节点系统,设置了3个节点。我正在使用PyArango创建节点2上的一个pod到Arango部署之间的连接,Arango部署有两个协调器pod,一个在节点2上,一个在节点3上。

我正在测试系统的弹性,我注意到一个问题。似乎如果我正在更新Arango上的集合,并且我的程序(在Node 2上运行)连接到Node 3上的Arango Coordinator pod,并且我关闭了Node 3,连接不会超时,它只会停留长达20分钟。

如果连接空闲或30秒后没有响应,我希望连接超时。

我用PyArango的方法尝试了一些不同的东西,没有运气。如何让python或PyArango在陈旧连接上超时?

目前,这是我的连接设置代码片段:

retry_policy = Retry(total=0, connect=0, read=0 ,
other=0, backoff_factor=0)
while conn == None:
try:
conn = Connection(arango_url, username, password,
max_retries=retry_policy)
conn.session.session.headers['Retry-After'] = '10'
conn.session.session.headers['Keep-Alive'] = 'timeout=5'
else:
conn = Connection(arangoURL=arango_url, max_retries=retry_policy)
conn.session.session.headers['Retry-After'] = '10'
conn.session.session.headers['Keep-Alive'] = 'timeout=5'

任何帮助将是伟大的!

你总是可以添加连接字符串到你的连接字符串:连接超时= 180;

此连接超时用于解析到数据库的初始连接所需的时间。您可以在SQL连接超时属性文档

中引用它。否则引用此SO。可以通过为Arango使用自定义HTTP客户端来增加HTTP客户端的超时。默认设置为60秒。

在我进行conn = Connection(......)调用的同一文件中。我需要添加一个猴子补丁来修补PyArango用来创建原始HTTP连接的AikidoSession类。

我在文件的开头添加了以下内容,现在我的连接超时了,并且很长时间没有挂起。

from pyArango.connection import AikidoSession
AikidoSession.Holder._base_call = AikidoSession.Holder.__call__
def _monkey_patch_call(self, *args, **kwargs):
kwargs["timeout"] = 10
return self._base_call(*args, **kwargs)
AikidoSession.Holder.__call__ = _monkey_patch_call

我认为在我的问题中,我添加了超时,我只是修改了本地连接对象,但连接已经建立,因此更改从未应用于连接。

最新更新