2016-09-22 4 views
1

私は2つのノードを持つ1つのクラスタを持っています。elasticsearch pythonクライアント - 多くのノードで作業する - スニファの操作方法

私は、ノードを接続するためのベストプラクティスを理解しようとしており、1つのノードにダウンタイムがあるとフェイルオーバーをチェックしています。 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 
) 

ので、私はこのように私のノードに接続しようとしました:IP1/IP2(たとえば10.0.0.1ため、10.0.0.2)マシンのIPのある

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

これをテストするために、私は接続しようとしているときに、私はいつも得る:

今、私はip2を終了(または存在しない場合)
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) 

答えて

0

あなたは(メモリが提供する場合0.1である)、デフォルト値よりも高い値にsniff_timeoutを設定する必要があります。

すると私は私の質問への更新を追加しました。この

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

のようにそれを試してみて、これが起こるとき、私はあなたが言うことができる –

+0

sniff_on_start =真(または他のスニフのparams)を設定し、これまでesnode1' 'の具体的などのような値と、 'esnode2'は? – Val

+0

ips。 10.0.0.1 –

関連する問題