2

2 つのノードを持つ 1 つのクラスターがあります。

ノードを接続するためのベスト プラクティスを理解しようとしており、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
)

だから私はこのように自分のノードに接続しようとしました:

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を終了しました(または存在しない場合は配置しました)。接続しようとすると、常に次のようになります:

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

その ip1 が存在し、稼働している場合でも。

このように接続しようとしている場合:

es = Elasticsearch([ip1, ip2])

次に、クライアントが ip2 から応答を取得していない場合、クライアントは ip1 に移動し、有効な応答を返すことをログで確認できます。

だから私はここで何かを逃していますか?スニッフィングを使用すると、ノードの1つがダウンしてもクライアントは例外をスローせず、アクティブなノードで作業を続けると思いました(次のスニッフィングまで)

更新: sniff を「True」に設定すると、この動作が発生します:

----> 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)
4

1 に答える 1

3

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
)
于 2016-09-22T13:26:28.333 に答える