elasticsearch python客户端 - 与许多节点一起工作 - 如何使用嗅探器

elasticsearch python客户端 - 与许多节点一起工作 - 如何使用嗅探器

问题描述:

我有一个包含2个节点的群集。elasticsearch python客户端 - 与许多节点一起工作 - 如何使用嗅探器

我想了解连接节点的最佳实践,并在一个节点出现停机时检查故障转移。

documentation

es = Elasticsearch(
    ['esnode1', 'esnode2'], 
    # sniff before doing anything 
    sniff_on_start=True, 
    # refresh nodes after a node fails to respond 
    sniff_on_connection_fail=True, 
    # and also every 60 seconds 
    sniffer_timeout=60 
) 

所以我尝试连接到我的节点是这样的:

client = Elasticsearch([ip1, ip2],sniff_on_start=True, sniffer_timeout=10,sniff_on_connection_fail=True) 

其中IP1/IP2是机器IP的(例如10.0.0.1,10.0.0.2)

为了测试它,我终止了ip2(或放不存在if) 现在,当我试图连接时,我总是得到:

TransportError: TransportError(N/A, 'Unable to sniff hosts - no viable hosts found.') 

即使是ip1是存在和向上。

如果我尝试连接这样的:

es = Elasticsearch([ip1, ip2]) 

然后我可以在日志中看到,如果客户端没有得到来自任何IP2响应,它会移动到IP1,并返回有效响应。

所以我在这里想念什么?我认为,与嗅探,客户不会抛出任何异常,如果其中一个节点发生故障,并继续活跃节点的工作(直至下次扫描)

更新: 当过我设置嗅来我得到这个行为“真':

----> 1 client = Elasticsearch([ip1, ip2],sniff_on_start=True) 

/usr/local/lib/python2.7/dist-packages/elasticsearch/client/__init__.pyc in __init__(self, hosts, transport_class, **kwargs) 
    148    :class:`~elasticsearch.Connection` instances. 
    149   """ 
--> 150   self.transport = transport_class(_normalize_hosts(hosts), **kwargs) 
    151 
    152   # namespaced clients for compatibility with API names 

/usr/local/lib/python2.7/dist-packages/elasticsearch/transport.pyc in __init__(self, hosts, connection_class, connection_pool_class, host_info_callback, sniff_on_start, sniffer_timeout, sniff_timeout, sniff_on_connection_fail, serializer, serializers, default_mimetype, max_retries, retry_on_status, retry_on_timeout, send_get_body_as, **kwargs) 
    128 
    129   if sniff_on_start: 
--> 130    self.sniff_hosts(True) 
    131 
    132  def add_connection(self, host): 

/usr/local/lib/python2.7/dist-packages/elasticsearch/transport.pyc in sniff_hosts(self, initial) 
    235   # transport_schema or host_info_callback blocked all - raise error. 
    236   if not hosts: 
--> 237    raise TransportError("N/A", "Unable to sniff hosts - no viable hosts found.") 
    238 
    239   self.set_connections(hosts) 

您需要设置sniff_timeout到比默认值(即0.1如果没有记错),更高的价值。

尝试像这样

es = Elasticsearch(
    ['esnode1', 'esnode2'], 
    # sniff before doing anything 
    sniff_on_start=True, 
    # refresh nodes after a node fails to respond 
    sniff_on_connection_fail=True, 
    # and also every 60 seconds 
    sniffer_timeout=60, 
    # set sniffing request timeout to 10 seconds 
    sniff_timeout=10 
) 
+0

我添加了一个更新我的问题,这是发生当过我设置sniff_on_start = TRUE(或其他嗅探PARAMS) –

+0

你能告诉什么esnode1'的'具体数值和'esnode2'是? – Val

+0

和ips。像10.0.0.1 –