1
我有一個包含2個節點的羣集。elasticsearch python客戶端 - 與許多節點一起工作 - 如何使用嗅探器
我想了解連接節點的最佳實踐,並在一個節點出現停機時檢查故障轉移。
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_on_start = TRUE(或其他嗅探PARAMS) –
你能告訴什麼esnode1'的'具體數值和'esnode2'是? – Val
和ips。像10.0.0.1 –