web-dev-qa-db-ja.com

Elasticsearchでタイムアウトした読み取りを修正する方法

Elasticsearch-1.1.0を使用してツイートのインデックスを作成しました。インデックス作成プロセスは大丈夫です。その後、バージョンをアップグレードしました。次に、Elasticsearch-1.3.2を使用し、このメッセージをランダムに取得します。

Exception happened: Error raised when there was an exception while talking to ES.
ConnectionError(HTTPConnectionPool(Host='127.0.0.1', port=8001): Read timed out. (read timeout=10)) caused by: ReadTimeoutError(HTTPConnectionPool(Host='127.0.0.1', port=8001): Read timed out. (read timeout=10)).

ランダム性のスナップショット:

Happened --33s-- Happened --27s-- Happened --22s-- Happened --10s-- Happened --39s-- Happened --25s-- Happened --36s-- Happened --38s-- Happened --19s-- Happened --09s-- Happened --33s-- Happened --16s-- Happened 

--XXs-- = after XX seconds

誰かがRead timed out問題の修正方法を指摘できますか?

どうもありがとうございました。

27
Hendra Bunyamin

あなたの見ているエラーはあなたが使用しているクライアントに関連している可能性があるため、直接的な答えを出すのは困難です。ただし、解決策は次のいずれかです。

1.タイムアウトパラメータを渡してESクライアントを作成するときに、デフォルトのタイムアウトをグローバルに増やします。 Pythonの例

es = Elasticsearch(timeout=30)

2.クライアントによって行われたリクエストごとにタイムアウトを設定します。 Elasticsearch Python以下のドキュメントから取得。

# only wait for 1 second, regardless of the client's default
es.cluster.health(wait_for_status='yellow', request_timeout=1)

上記により、クラスタに応答するための余分な時間が与えられます

25
Skillachie

これを試して:

es = Elasticsearch(timeout=30, max_retries=10, retry_on_timeout=True)

ReadTimeoutErrorを完全に回避することはできないかもしれませんが、それらを最小化します。

20
Aminah Nuraini

価値があるのは、これが壊れたインデックスの状態に関連しているようだということです。

この問題を確実に再現することは非常に困難ですが、私は何度かそれを見てきました。 ESが定期的にハングしているように見える特定の操作を除き、操作は通常どおり実行されます(具体的には、インデックスが更新されているようです)。

インデックスの削除(curl -XDELETE http://localhost:9200/foo)ゼロからインデックスを再作成すると、これが修正されました。

この動作が見られる場合は、定期的にクリアしてインデックスを再作成することをお勧めします。

2
Doug

読み取りタイムアウトは、クエリサイズが大きい場合にも発生する可能性があります。たとえば、ESインデックスサイズが非常に大きい(> 3Mドキュメント)私の場合、30語でクエリを検索すると約2秒かかり、400語でクエリを検索すると18秒以上かかりました。したがって、十分に大きなクエリの場合はtimeout=30はあなたを救いません。簡単な解決策は、タイムアウト以下で回答できるサイズにクエリをトリミングすることです。

1
vlyubin

また、弾性ですべてが正常かどうかを確認する必要があります。一部のシャードは利用できない場合があります。利用できないシャードの考えられる理由に関するニースのドキュメントがあります https://www.datadoghq.com/blog/elasticsearch-unassigned-shards/

さまざまなタイムアウトオプションを増やすと、すぐに問題が解決する場合がありますが、根本的な原因には対処しません。

ElasticSearchサービスが利用可能で、インデックスが正常であれば、Java最小および最大ヒープサイズを増やしてみてください: https://www.elastic.co/guide/en /elasticsearch/reference/current/jvm-options.html .

TL; DR編集/etc/elasticsearch/jvm.options -Xms1gおよび-Xmx1g

0
Clever Guy