Elasticsearch のインデックスからドキュメントを削除出来ない


(Sgsg) #1

対象は複数ノードからなる分散型の検索システムで、インデックスサイズが2テラ程度、
シャーディングの設定も行っていますが、インデックスから一部のドキュメントだけ削除しようと
以下のコマンドを実行したところ、

コマンド
curl -s -XPOST localhost:9200/_bulk --data-binary @json_file

json_file
{ "delete" : { "_index" : "index", "_type" : "type", "_id" : "1" } }

以下のようなメッセージがあがり、削除できませんでした。
{
"took" : 120008,
"errors" : true,
"items" : [ {
"delete" : {
"_index" : "index",
"_type" : "type",
"_id" : "1",
"status" : 404,
"error" : "RemoteTransportException[[A1][inet[/10.10.10.10:9200]][indices:data/write/bulk[s]]]; nested: EngineClosedException[[index][4] CurrentState[CLOSED] ]; "
}
} ]
}

また、curl -XGETでドキュメントを表示することは出来、全文検索も可能ですが、XDELETEが効きかず削除出来ません。
curl -DELETE http://locahost:9200/index/type/1

削除したいドキュメントサイズは40kバイト程度です。
インデックス内の他のドキュメントは削除可能なものもあり、すべてが削除できないわけではありません。

インデックス内の他のドキュメントは残し、このドキュメントだけを削除したいのですが、削除する方法を教えて頂ければ幸いです。

ちなみに、Elasticsearch バージョン1.7.1 を使用しています。

よろしくお願いいたします。


(Jun Ohtani) #2

実行時間の前後にElasticsearchのログに何かエラーなどは出ていないでしょうか?


(Sgsg) #3

大谷様

お世話になります。
ご多用の中、ご連絡頂き、ありがとうございました。

クラスタを再確認したところ、HDDの残容量がゼロになっていた為、ログへ書き込みが出来ず、ドキュメントを削除出来なかったようです。
不要なログファイルを削除後、ドキュメントを削除出来、問題が解消されました。
確認不足で、申し訳ございませんでした。

今回クラスタを確認して気づいた点として、クラスタ内マシンのHDD残容量にバラつきがあることでした。

構築直後はほぼ均等にシャードが割り当てられていたのですが、運用過程で(ドキュメントを検索、追加、削除したり、停電によるマシン起動・停止等)
マシン毎にシャードが複数載っていたり、まったく載っていなかったりしたり(マシン2)、マシンの残容量も点線以下の通りバラつきがあり、
例えば、マシン2,7は残容量が非常に少ないのに、マシン12は 110G となっています。

設定等により、均等にデータを割り振ることは可能でしょうか?

たとえば、マシン2,7、12をクラスタから外し、この3つで新たにクラスタを作成し、均等に割り振られた段階で、元のクラスタに戻すことなど可能でしょうか。

ご多用のところ、大変恐れ入りますがご教示頂けますと助かります。
よろしくお願い致します。

クラスタの構成(HDD: 300G)、()内シャードの数

各マシンの残容量は以下の通りでした。
マシン1(3個): 18G
マシン2(0個): 0.1G
マシン3(2個): 13G
マシン4(3個): 19G
マシン5(2個): 10G
マシン6(1個): 3G
マシン7(2個): 0.1G
マシン8(3個): 42G
マシン9(2個): 46G
マシン10(3個): 30G
マシン11(2個): 56G
マシン12(2個): 110G
マシン13(2個): 94G
マシン14(1個): 63G

全マシン設定
node.master: true
node.data: true
script.groovy.sandbox.enabled: false
http.max_initial_line_length: 100k


(Jun Ohtani) #4

Disk-based Shard Allocationと言う機能があり、それが作動したために、シャードの偏りが出ているはずです。(ログに何か出ているかと。)

空き容量を作っていただければ、そのうちバランスが取れるはずです。
また、一応、Cluster Rerouteを使えば明示的に自分で動かすことも可能です。


(Sgsg) #5

大谷様

ご教授頂き、ありがとうございました。
勉強になりました。色々試してみたいと思います。
ありがとうございました。


(system) #6