Elasticsearch はシャードをデータノードに均等に割り当て、ハッシュマップを使用してドキュメントをシャードに均等にルーティングします。この場合、一部のノードは他のノードよりも多くのホットデータを格納する可能性があり、これらのノードに高い負荷がかかります。この問題に対処するには、クラスターを再起動するか、シャードを手動で移行してシャードを再割り当てします。このトピックでは、シャードを手動で移行する方法について説明します。
問題の説明
- 負荷の高いノードは、同じ属性を持つ多数のシャードを格納します。たとえば、ノードはプライマリシャードのみを格納します。
- 負荷の高いノードは、他のノードよりもビジネスインデックスのシャードを多く格納します。
注意事項
- 手動でのシャードの移行は、ノードの高負荷に対する一時的な解決策にすぎません。クラスターから一部のノードが短時間不在になり、シャードが再割り当てされると、この問題が再び発生する可能性があります。したがって、シャードを移行する前に、クラスターの負荷の不均衡に記載されている手順に基づいて、シャードの割り当てを最適化することをお勧めします。
- ホットデータを格納するシャードが均等に割り当てられていても、クラスターが高負荷で実行されている場合は、クラスターの構成をアップグレードすることをお勧めします。
解決策
- シャードの割り当てを無効にします。
PUT /_cluster/settings { "transient" : { "cluster.routing.allocation.enable" : "none" } }
重要 上記のコマンドは、シャードの割り当てを一時的に無効にするためにのみ使用されます。シャードの移行後、シャードの割り当てを再度有効にする必要があります。シャードの割り当てを有効にするには、cluster.routing.allocation.enable を all に設定して、PUT /_cluster/settings コマンドを実行します。 - シャードを手動で移行します。この例では、index_parkingorder_v1 インデックスのシャード 3 が、IP アドレスが 192.168.130.77 のノードから、IP アドレスが 192.168.130.78 のノードに移行されます。
POST /_cluster/reroute { "commands" : [ { "move" : { "index" : "index_parkingorder_v1", "shard" : 3, "from_node" : "192.168.130.77", "to_node" : "192.168.130.78" } } ] }
説明- インデックスのシャードをノードに移行する場合は、ノードが同じインデックスに属するシャード、または同じシーケンス番号を持つシャードを格納していないことを確認してください。たとえば、インデックスのレプリカシャード 3 がノード A に存在するとします。この場合、インデックスのプライマリシャード 3 をノード A に移行することはできません。
- シャードを手動で移行する方法の詳細については、cluster-reroute をご参照ください。
- シャードの割り当てステータスを確認します。
GET _cat/shards?v
コマンドが正常に実行されると、次の図に示す結果が返されます。 - シャードの移行後、シャードの割り当てを有効にします。
PUT /_cluster/settings { "transient" : { "cluster.routing.allocation.enable" : "all" } }