すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:ノード上のホットデータの偏った分散

最終更新日:Jan 16, 2025

Elasticsearch はシャードをデータノードに均等に割り当て、ハッシュマップを使用してドキュメントをシャードに均等にルーティングします。この場合、一部のノードは他のノードよりも多くのホットデータを格納する可能性があり、これらのノードに高い負荷がかかります。この問題に対処するには、クラスターを再起動するか、シャードを手動で移行してシャードを再割り当てします。このトピックでは、シャードを手動で移行する方法について説明します。

問題の説明

  • 負荷の高いノードは、同じ属性を持つ多数のシャードを格納します。たとえば、ノードはプライマリシャードのみを格納します。
  • 負荷の高いノードは、他のノードよりもビジネスインデックスのシャードを多く格納します。

注意事項

  • 手動でのシャードの移行は、ノードの高負荷に対する一時的な解決策にすぎません。クラスターから一部のノードが短時間不在になり、シャードが再割り当てされると、この問題が再び発生する可能性があります。したがって、シャードを移行する前に、クラスターの負荷の不均衡に記載されている手順に基づいて、シャードの割り当てを最適化することをお勧めします。
  • ホットデータを格納するシャードが均等に割り当てられていても、クラスターが高負荷で実行されている場合は、クラスターの構成をアップグレードすることをお勧めします。

解決策

  1. シャードの割り当てを無効にします。
    PUT /_cluster/settings
    {
      "transient" : {
         "cluster.routing.allocation.enable" : "none"
      }
    }
    重要 上記のコマンドは、シャードの割り当てを一時的に無効にするためにのみ使用されます。シャードの移行後、シャードの割り当てを再度有効にする必要があります。シャードの割り当てを有効にするには、cluster.routing.allocation.enableall に設定して、PUT /_cluster/settings コマンドを実行します。
  2. シャードを手動で移行します。
    この例では、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 をご参照ください。
  3. シャードの割り当てステータスを確認します。
    GET _cat/shards?v
    コマンドが正常に実行されると、次の図に示す結果が返されます。View the shard migration status
  4. シャードの移行後、シャードの割り当てを有効にします。
    PUT /_cluster/settings
    {
     "transient" : {
      "cluster.routing.allocation.enable" : "all"
     }
    }