2017-10-07 10 views
1

私は大きなESクラスタを持っています。ディスクアラートポリシーが90%に設定されているので、私は一般的にディスクアラートを受け取る[私のESの高いウォーターマークが87%に設定されている]。シャードの割り当てを見ると、ノードが高いディスク使用率ノードからランダムなノードに移動することがわかります。これはディスクの問題をすばやく解決しますが、ディスク使用率が最も低いノードにそのシャードを移動させません。最高のウォーターマークに達したときにランダムなノードに移動するのではなく、ディスク使用率が最も低いノードにelasticsearch move shardを強制することは可能ですか?elasticsearchはどのようにしてシャードの移動先のノードを選択しますか?

答えて

1

実際にESは、アカウントa lot of factorsにそれが取るランダムな意思決定を使用していません:

  • MaxRetryAllocationDecider - 破片の割り当てが 成功
  • NodeVersionAllocationDeciderずにN回再試行された場合 任意のノードに割り当てられることから破片を防ぎます - バージョンと互換性がない可能性のあるノードからの再配置または割り当てを防止します。
  • SameShardAllocationDecider - 同じシャードの複数のインスタンスが同じノードに割り当てられないようにします。
  • DiskThresholdDecider - シャードに潜在的に割り当てられているノードが十分なディスク容量を持っていることを確認します。
  • ShardsLimitAllocationDecider - インデックスまたはノード単位でノードごとのシャード数を制限します。
  • AwarenessAllocationDecider - ノード構成で定義された認識キーと値のペアに基づいてシャード割り当てを制御します。

ご覧のとおり、多くの要因があり、ディスク容量の少ないチェッカーはありません。だから唯一の解決策は、あなたの決定者を提供するorg.elasticsearch.plugins.ClusterPluginを拡張するyour own pluginと書くことです。しかし、私はそれがES配分決定部パターンの主な設計/考え方と矛盾するので、これは良いアイデアではないと思う:

  • 以前のすべてのdeciders
  • 任意の正の解の決定を拒否することができます任意のサイダーは、後続に影響を与えません決定
  • decidersのほとんどが使用し、ローカル・ノードのデータ

この戦略は、あなたが禁止することを可能にし、クラスタ内で選択する自由を最大化するように設計されています。そういうわけで、外からは無作為に動いているように見えます。これは、大規模で長寿命のクラスタにとって最適な戦略です。

いずれの種類のバイアスを導入しても、製造上の致命的な問題につながる可能性があります。ディスクスペースベースのデシデイがあるとしましょう.1台のサーバーには非常に大きなHDDがあります。しばらくすると、すべてのシャードがこのマシンに割り当てられます。この問題を解決するには、CPU、メモリー、ネットワーク、破損金額などの重要なリソースを考慮する必要があります。さらに、各要因のメトリックと重みを算出する必要があります。

関連する問題