2017-03-17 13 views
1

Elasticsearch 1.4.4を実行している古いクラスタがあります。 私のクラスタには約110億のドキュメントが含まれ、すべてのプライマリのサイズは約4TBです。エラスティックサーチインデックスのサイズは、1.xより5.xで40%大きくなります。

私は現在、Elasticsearch 5.2.2にアップグレードしています。これはもちろん、データの再インデックス化を意味します。私はこれが現時点で起こっている別のクラスターを持っています。 _all_sourceが元のインデックスで無効になっているため、ソースデータベースからインデックスを再作成しています。

私は現在、約7億5千万のドキュメントを再インデックスし、新しいインデックスサイズがすでに350GBであることに気付きました。私はいくつかの数学を行い、完全にインデックスされたときにインデックスが約5.5TBに成長するように見えます。それは1.5TBよりインデックスよりもです。私はこれを期待していませんでした。それどころか、私はいくつかの属性を削除したので、サイズの減少を期待していました。これは普通のことですか、何か間違ったことをしましたか?この成長に貢献できる異なるデフォルト設定は5.2.2ですか?

1.4.4インデックスの設定:

{ 
    "index": { 
    "refresh_interval": "30s", 
    "number_of_shards": "20", 
    "creation_date": "1426251049131", 
    "analysis": { 
     "analyzer": { 
     "default": { 
      "filter": [ 
      "icu_folding", 
      "icu_normalizer" 
      ], 
      "type": "custom", 
      "tokenizer": "icu_tokenizer" 
     } 
     } 
    }, 
    "uuid": "WdgnCLyITgmpb4DROegV3Q", 
    "version": { 
     "created": "1040499" 
    }, 
    "number_of_replicas": "1" 
    } 
} 

1.4.4インデックスマッピング:

{ 
    "article": { 
    "_source": { 
     "enabled": false 
    }, 
    "_all": { 
     "enabled": false 
    }, 
    "properties": { 
     "date": { 
     "format": "dateOptionalTime", 
     "type": "date", 
     "doc_values": true 
     }, 
     "has_enclosures": { 
     "type": "boolean" 
     }, 
     "feed_subscribers": { 
     "type": "integer", 
     "doc_values": true 
     }, 
     "feed_language": { 
     "index": "not_analyzed", 
     "type": "string" 
     }, 
     "author": { 
     "norms": { 
      "enabled": false 
     }, 
     "analyzer": "keyword", 
     "type": "string" 
     }, 
     "has_pictures": { 
     "type": "boolean" 
     }, 
     "title": { 
     "norms": { 
      "enabled": false 
     }, 
     "type": "string" 
     }, 
     "content": { 
     "norms": { 
      "enabled": false 
     }, 
     "type": "string" 
     }, 
     "has_video": { 
     "type": "boolean" 
     }, 
     "url": { 
     "index": "not_analyzed", 
     "type": "string" 
     }, 
     "feed_canonical": { 
     "type": "boolean" 
     }, 
     "feed_id": { 
     "type": "integer", 
     "doc_values": true 
     } 
    } 
    } 
} 

5.2.2インデックスの設定:

{ 
    "articles": { 
    "settings": { 
     "index": { 
     "refresh_interval": "-1", 
     "number_of_shards": "40", 
     "provided_name": "articles", 
     "creation_date": "1489604158595", 
     "analysis": { 
      "analyzer": { 
      "default": { 
       "filter": [ 
       "icu_folding", 
       "icu_normalizer" 
       ], 
       "type": "custom", 
       "tokenizer": "icu_tokenizer" 
      } 
      } 
     }, 
     "number_of_replicas": "0", 
     "uuid": "LOeOcZb_TMCX6E_86uMyXQ", 
     "version": { 
      "created": "5020299" 
     } 
     } 
    } 
    } 
} 

5.2.2インデックスマッピング:

{ 
    "articles": { 
    "mappings": { 
     "article": { 
     "_all": { 
      "enabled": false 
     }, 
     "_source": { 
      "enabled": false 
     }, 
     "properties": { 
      "author": { 
      "type": "text", 
      "norms": false, 
      "analyzer": "keyword" 
      }, 
      "content": { 
      "type": "text", 
      "norms": false 
      }, 
      "date": { 
      "type": "date" 
      }, 
      "feed_canonical": { 
      "type": "boolean" 
      }, 
      "feed_id": { 
      "type": "integer" 
      }, 
      "feed_subscribers": { 
      "type": "integer" 
      }, 
      "title": { 
      "type": "text", 
      "norms": false 
      }, 
      "url": { 
      "type": "keyword" 
      } 
     } 
     } 
    } 
    } 
} 

このクラスタ上の完全なインデックスの再作成は、約30日かかりますので、すべてのヘルプははるかに高く評価されます...ありがとう!

私はあなたが回転するディスクを使用している場合、あなたはインデックススピードを上げるためにelasticsearch.ymlに追加することができ、リフレッシュ間隔を変更し、0でレプリカの数を入れている参照

答えて

0

index.merge.scheduler.max_thread_count: 1 

あなたドン場合あなたのES5クラスターでは次のことも助けてくれます:

PUT /_cluster/settings 
{ 
    "transient" : { 
     "indices.store.throttle.type" : "none" 
    } 
} 

スワップが無効になっていることを確認してください。どのくらいのメモリがES5クラスタのノードに割り当てられていますか? (Elasticsearchのメモリアドレッシング制限のために、32 GBの上限を持つノードの使用可能なメモリの半分を使用する必要があります)。

このサイズの増加は、Elasticsearchがセグメントを頻繁にマージせず、マージするのに穏やかな時間を待ってディスクのサイズを小さくするためです。再インデックスが終わっていない限り、新しいインデックスの全体的なサイズを判断するのはちょっと早いです。その下の

いくつかの記事は助けることができる:

+0

ありがとうございます。インデックス作成の速度は私の懸念事項ではありません。それはかなりうまくいっています。サーバーは非常に強力でESに最適化されています。セグメントのマージについて言えば納得のいくものですが、実際には変動に気付いていますが、インデックスはまだまだ大きくなっています。私はそれがセグメントのマージだけで終わりにはそんなに縮小するのではないかと疑う。 – Jacket

+0

私は30日はあなたが持っているサイズのための数日間の地獄ですが(私はあなたのクラスターのサイズも知らないけれども)ディスクスペースについて、この記事は面白い経験を共有しています:https:// blog.discordapp.com/how-discord-indexes-billions-of-messages-e3d5e9be866f#.6zzwqchb6 – Adonis

+0

クラスタは、64G RAM、4x900GB SSDを搭載した3台のサーバ(現在は4台目)でうまく動作しています。ソースデータは11TB相当のMySQLデータベースであり、忙しいサービスを実行するプロダクションDBなので、明らかに私はそれらを限界まで押し込むことはできません。ボトルネックはESではありません。私の唯一の関心事は、最後に全体的なインデックスのサイズです。 – Jacket

1

私の推測ではdoc_valuesだろう。 elastic 2.0のため、doc_valuesはデフォルトで有効になっています。つまり、5.2マッピングでは1.4マッピングよりも多くのフィールドのdoc_valuesが作成され、ディスク領域を消費します。

+0

それは私の最初の考えだったようですが、それは普通のケースです。しかし、1.4.4のインデックスが表示されている場合は、新しいインデックスに保持しているフィールドと同じフィールドにdoc_valuesを明示的に有効にしました。以前のインデックスにはdoc_valuesがないブール値フィールドが1つしかありませんが、このオーバーヘッドがそれに由来することは間違いありません。もしそうなら、私は再索引作成プロセスを再開しますが、私はすでに3日間です。確かな方法は? – Jacket

+0

私は、1.4で評価されなかった2つのフィールドをカウントし、5: url、feed_canonicalにあります。 4つのブール値の属性を削除しても、サイズの増加を説明することができます(おそらく圧縮率が高く、余分なスペースを必要としません)。 これ以外にも、クラスタ内のノードの数、インデックスの数、断片のサイズ、ドキュメントルーティングの有無などを知っておくと便利です。 – Roman

+0

可能であれば、2番目の取り込みプロセスを最初のものと並行して開始し、修正済みの5マッピングを使用して、十分な量のドキュメント(100〜200 mil)を作成してから、再度新しいサイズを見積もる – Roman

関連する問題