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

Elasticsearch:ILM を使用してホットデータとコールドデータを分離する

最終更新日:Jan 11, 2025

このトピックでは、インデックスライフサイクル管理(ILM)機能を使用して、Alibaba Cloud Elasticsearch クラスタ内のホットデータとコールドデータを分離する方法について説明します。この分離により、ホットウォームアーキテクチャが可能になります。このアーキテクチャは、クラスタの読み取り/書き込みパフォーマンスを向上させ、ホットデータとコールドデータのメンテナンスを自動化し、運用コストを削減します。

背景情報

ビッグデータの時代において、データは常に変化し、Elasticsearch クラスタに保存されるデータ量は時間とともに増加します。データ量が特定のレベルに達すると、クラスタのメモリ使用量、CPU 使用率、および I/O スループットも増加します。これは、クラスタの全文検索パフォーマンスに影響します。この問題に対処するために、Elasticsearch V6.6.0 以降では、ILM 機能が提供されています。これは、インデックスのライフサイクルをホット、ウォーム、コールド、削除の 4 つのフェーズに分割します。ホットフェーズのインデックスの場合、システムはインデックスに書き込まれるデータをロールオーバーする場合があります。ウォーム、コールド、または削除フェーズのインデックスの場合、システムはインデックスに対して関連する操作を実行します。次の表に、これらのフェーズについて説明します。
フェーズ説明
ホットインデックスがこのフェーズにある場合、時系列データをリアルタイムでインデックスに書き込むことができ、インデックス内のドキュメント数、インデックスに保存されているデータ量、およびインデックスの期間に基づいてロールオーバーできます。データは、ロールオーバー API を使用してロールオーバーされます。
ウォームインデックスがこのフェーズにある場合、データはインデックスに書き込まれなくなり、インデックスに対してデータクエリのみを実行できます。
コールドインデックスがこのフェーズにある場合、インデックスは更新されなくなり、インデックスに対して実行されるクエリは少なくなり、クエリプロセスが遅くなります。
削除インデックスがこのフェーズにある場合、インデックスは削除されます。
次のいずれかの方法を使用して、ILM ポリシーを 1 つ以上のインデックスに適用できます。
  • ILM ポリシーをインデックステンプレートに適用する: この方法を使用すると、ILM ポリシーは同じエイリアスを持つすべてのインデックスに適用されます。このトピックでは、この方法を使用します。
  • ILM ポリシーを単一のインデックスに適用する: この方法を使用すると、ILM ポリシーは現在のインデックスにのみ適用されます。ロールオーバー中に生成された新しいインデックスは、ILM ポリシーの影響を受けません。
時系列データ、コールドデータ、およびホットデータに対して ILM 機能を使用すると、データストレージコストを大幅に削減できます。このトピックでは、コールドデータとホットデータに ILM 機能を使用する方法の例を示します。次の説明は、ビジネスシナリオを提供します。
  1. Elasticsearch クラスタのインデックスにデータをリアルタイムで書き込みます。インデックス内のデータ量が特定のレベルに達すると、システムは超過データを新しいインデックスにロールオーバーします。
  2. 元のインデックスは 30 分間ホットフェーズに留まり、ウォームフェーズに入ります。
  3. ウォームフェーズでは、システムは元のインデックスを縮小し、インデックス内のセグメントをマージします。ロールオーバーの開始から 1 時間後に、インデックスはコールドフェーズに入ります。
  4. コールドフェーズでは、システムはホットノードからウォームノードにインデックスを移行して、ホットデータとコールドデータを分離します。ロールオーバーの開始から 2 時間後に、インデックスは削除されます。

注意事項

  • ビジネスモデルに基づいて ILM ポリシーを設定する必要があります。たとえば、構造が異なるインデックスには、異なるエイリアスと ILM ポリシーを設定することをお勧めします。これは、インデックス管理を容易にします。
  • ロールオーバー機能を使用する場合、初期インデックスの名前は、-000001 などの自動インクリメントの 6 桁の数字で終わる必要があります。そうでない場合、ILM ポリシーは有効になりません。たとえば、初期インデックスの名前は myindex-000001 です。ロールオーバー中に、myindex-000002 という名前の新しいインデックスが生成されます。インデックスの名前が上記の要件を満たしていない場合は、インデックス内のデータを再インデックスすることをお勧めします。
  • ホットフェーズのインデックスの場合、システムはインデックスにデータを書き込みます。データが時系列で書き込まれるようにするには、ウォームフェーズまたはコールドフェーズのインデックスにデータを書き込まないことをお勧めします。たとえば、ウォームフェーズでは、actionsshrink または read only に設定します。こうすることで、インデックスはウォームフェーズに入った後に読み取り専用になります。

手順

  1. 手順 1: ホットウォームアーキテクチャを使用する Alibaba Cloud Elasticsearch クラスタを作成し、クラスタ内のノードのホットまたはウォーム属性を表示する
    Alibaba Cloud Elasticsearch クラスタを作成し、クラスタ内のデータノードのホットまたはウォーム属性を指定します。
  2. 手順 2: インデックスの ILM ポリシーを設定する
    ILM ポリシーを定義し、そのポリシーをインデックステンプレートに適用します。
  3. 手順 3: データ分散を確認する
    コールドフェーズのインデックスのシャードがウォームノードに分散されているかどうかを確認します。
  4. 手順 4: ILM ポリシーを更新する
    ILM ポリシーを更新します。
  5. 手順 5: ILM ポリシーを切り替える
    ILM ポリシーを切り替えます。

手順 1: ホットウォームアーキテクチャを使用する Alibaba Cloud Elasticsearch クラスタを作成し、クラスタ内のノードのホットまたはウォーム属性を表示する

ホットウォームアーキテクチャを使用する Elasticsearch クラスタには、ホットノードとウォームノードの両方が含まれています。このアーキテクチャは、Elasticsearch クラスタのパフォーマンスと安定性を向上させます。次の表に、ホットノードとウォームノードの違いを示します。
ノードタイプ保存されるデータのタイプ読み取りおよび書き込みパフォーマンス仕様ディスク
ホットノード過去 2 日間のログデータなど、最近のデータ。32 vCPU、64 GiB メモリなど、高標準 SSD を使用することをお勧めします。データ量に基づいてストレージ容量を指定できます。
ウォームノード過去 2 日間より前のログデータなど、履歴データ。8 vCPU、32 GiB メモリなど、低

ウルトラディスクを使用することをお勧めします。データ量に基づいてストレージ容量を指定できます。

  1. ホットウォームアーキテクチャを使用する Elasticsearch クラスタを作成します。Elasticsearch クラスタを購入する際に、ウォームノードを購入して、ホットウォームアーキテクチャを使用する Elasticsearch クラスタを作成できます。詳細については、「Alibaba Cloud Elasticsearch クラスタを作成する」をご参照ください。
    ウォームノードを含むクラスタを作成すると、システムはノードの起動パラメータに -Enode.attr.box_type パラメータを追加します。
    • ホットノード: -Enode.attr.box_type=hot
    • ウォームノード: -Enode.attr.box_type=warm
    説明
    • データノードは、ウォームノードを購入した後にのみホットノードになります。
    • このトピックでは、Alibaba Cloud Elasticsearch V6.7.0 クラスタを使用しています。このトピックで説明されているすべての操作と図は、このバージョンのクラスタにのみ適しています。別のバージョンのクラスタを使用する場合は、Elasticsearch コンソールで必要な操作が優先されます。
  2. クラスタの Kibana コンソールにログオンします。Kibana コンソールの左側のナビゲーションペインで、[dev Tools] をクリックします。
    Kibana コンソールへのログオン方法の詳細については、「Kibana コンソールにログオンする」をご参照ください。
  3. 表示されるページの [console] タブで、次のコマンドを実行して、クラスタ内のノードのホットまたはウォーム属性を表示します。
    GET _cat/nodeattrs?v&h=host,attr,value
    コマンドが正常に実行されると、次の図に示す結果が返されます。この図は、Elasticsearch クラスタに、ホットウォームアーキテクチャをサポートするための 3 つのホットノードと 2 つのウォームノードが含まれていることを示しています。Hot-warm architecture

手順 2: インデックスの ILM ポリシーを設定する

  1. クラスタの Kibana コンソールで、次のコマンドを実行して ILM ポリシーを定義します。
    PUT /_ilm/policy/game-policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "1GB",
                "max_age": "1d",
                "max_docs": 1000
              }
            }
          },
          "warm": {
            "min_age": "30m",
            "actions": {
              "forcemerge": {
                    "max_num_segments":1
                  },
              "shrink": {
                    "number_of_shards":1
                  }
            }
          },
          "cold": {
            "min_age": "1h",
            "actions": {
              "allocate": {
                "require": {
                  "box_type": "warm"
                }
              }
            }
          },
          "delete": {
            "min_age": "2h",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
    パラメータ説明
    hotILM ポリシーが適用されているインデックスが次のいずれかの条件を満たすと、ロールオーバーがトリガーされます。インデックス内のデータ量が 1 GB に達する、インデックスが 1 日以上使用されている、インデックス内のドキュメント数が 1,000 を超える。ロールオーバー中に、システムはインデックスを作成し、新しいインデックスに対して ILM ポリシーを有効にします。元のインデックスは、ロールオーバーの 30 分後にウォームフェーズに入ります。
    重要 rollover 中に max_docs、max_size、または max_age の値に達すると、Elasticsearch はインデックスをアーカイブします。
    warmインデックスがウォームフェーズに入ると、システムはそれを 1 つのプライマリシャードのみを持つインデックスに縮小し、インデックス内のセグメントを 1 つのセグメントにマージします。ロールオーバーの開始から 1 時間後に、インデックスはコールドフェーズに入ります。
    coldインデックスがコールドフェーズに入ると、システムはホットノードからウォームノードにインデックスを移行します。ロールオーバーの開始から 2 時間後に、インデックスは削除フェーズに入ります。
    deleteインデックスが削除フェーズに入ると、削除されます。
    説明
    • ILM ポリシーを作成した後、ポリシー名を変更することはできません。
    • この手順では、max_age パラメータを最小単位の秒で指定できます。Kibana コンソールを使用して ILM ポリシーを作成する場合は、このパラメータを最小単位の時間でのみ指定できます。
  2. インデックステンプレートを作成します。
    settings 設定で、hot 属性を指定します。こうすることで、データは書き込まれた後にホットノードに保存されます。
    PUT _template/gamestabes_template
    {
      "index_patterns" : ["gamestabes-*"],
      "settings": {
        "index.number_of_shards": 5,
        "index.number_of_replicas": 1,
        "index.routing.allocation.require.box_type":"hot",
        "index.lifecycle.name": "game-policy", 
        "index.lifecycle.rollover_alias": "gamestabes"
      }
    }
    パラメータ説明
    index.routing.allocation.require.box_typeロールオーバー中に生成されたインデックスが割り当てられるノードのタイプ。
    index.lifecycle.nameILM ポリシーの名前。
    index.lifecycle.rollover_aliasロールオーバー中に生成されたインデックスのエイリアス。
  3. 自動インクリメント番号に基づいてインデックスを作成します。
    PUT gamestabes-000001
    {
    "aliases": {
        "gamestabes":{
           "is_write_index": true
            }
          }
    }

    時間に基づいてインデックスを作成することもできます。詳細については、「日付演算の使用」をご参照ください。

  4. インデックスエイリアスに基づいてインデックスにデータを書き込みます。
    システムは、インデックスが ILM ポリシーと一致するかどうかを定期的にチェックします。システムがインデックスが ILM ポリシーと一致することを検出すると、システムはデータを新しいインデックスにロールオーバーします。
    PUT gamestabes/_doc/1
    {
        "EU_Sales" : 3.58,
        "Genre" : "Platform",
        "Global_Sales" : 40.24,
        "JP_Sales" : 6.81,
        "Name" : "Super Mario Bros.",
        "Other_Sales" : 0.77,
        "Platform" : "NES",
        "Publisher" : "Nintendo",
        "Year_of_Release" : "1985",
        "na_Sales" : 29.08
    }
    説明 デフォルトでは、システムは 10 分間隔で ILM ポリシーと一致するインデックスをチェックします。indices.lifecycle.poll_interval パラメータを設定して、チェック間隔を変更できます。インデックスのデータがロールオーバーされると、インデックスは次のフェーズに入ります。
  5. ライフサイクルフェーズに基づいてインデックスをフィルタリングし、詳細なインデックス設定を表示します。
    1. 左側のナビゲーションペインで、[management] をクリックします。
    2. [elasticsearch] セクションで、[index Management] をクリックします。
    3. [index Management] セクションで、ライフサイクルフェーズ[lifecycle Status] の横にある をクリックして、フェーズを選択します。
      Filter indexes based on lifecycle phases
    4. インデックス名をクリックして、インデックスの詳細を表示します。
      View index details

手順 3: データ分散を確認する

  1. コールドフェーズのインデックスをクエリし、インデックスの設定を表示します。
    Query indexes in the cold phase
  2. コールドフェーズのインデックスのシャードの分散をクエリします。
    GET _cat/shards?shrink-gamestables-000012
    コマンドが正常に実行されると、次の図に示す結果が返されます。この図は、コールドフェーズのインデックスのシャードがウォームノードに分散されていることを示しています。Command output

手順 4: ILM ポリシーを更新する

  1. 実行中の ILM ポリシーを更新します。
    Update the ILM policy
  2. 更新されたポリシーのバージョンを表示します。
    1. 左側のナビゲーションペインで、[management] をクリックします。
    2. [elasticsearch] セクションで、[index Lifecycle Policies] をクリックします。
    3. [index Lifecycle Policies] セクションで、更新されたポリシーのバージョンを表示します。
      更新されたポリシーのバージョン番号は、元のポリシーのバージョン番号よりも 1 つ大きくなります。更新されたポリシーは、次のロールオーバーから有効になります。View the version of the updated policy

手順 5: ILM ポリシーを切り替える

  1. 別の ILM ポリシーを作成します。
    PUT /_ilm/policy/game-new
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "3GB",
                "max_age": "1d",
                "max_docs": 1000
              }
            }
          },
          "warm": {
            "min_age": "30m",
            "actions": {
              "forcemerge": {
                    "max_num_segments":1
                  },
              "shrink": {
                    "number_of_shards":1
                  }
            }
          },
          "cold": {
            "min_age": "1h",
            "actions": {
              "allocate": {
                "require": {
                  "box_type": "warm"
                }
              }
            }
          },
          "delete": {
            "min_age": "2h",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
  2. 新しい ILM ポリシーをインデックステンプレートに適用します。
    PUT _template/gamestabes_template
    {
      "index_patterns" : ["gamestabes-*"],
      "settings": {
        "index.number_of_shards": 5,
        "index.number_of_replicas": 1,
        "index.routing.allocation.require.box_type":"hot",
        "index.lifecycle.name": "game-new", 
        "index.lifecycle.rollover_alias": "gamestabes"
      }
    }
    重要
    • 新しいポリシーは、次のロールオーバーから有効になります。
    • 元のポリシーに基づいて作成されたインデックスに新しいポリシーを適用する場合は、PUT gamestabes-*/_settings コマンドを実行できます。詳細については、「インデックスのポリシーの切り替え」をご参照ください。

FAQ

Q: ILM ポリシーのチェック間隔をどのように設定しますか?

A: システムは、ILM ポリシーと一致するインデックスを定期的にチェックします。デフォルトの間隔は 10 分です。一致するインデックスが検出されると、システムはインデックスのデータをロールオーバーします。たとえば、最大ドキュメント数ILM ポリシーを作成するときに indices.lifecycle.poll_interval
重要 このパラメーターを適切な値に設定します。小さい値を設定すると、ノードが過負荷になる可能性があります。この例では、このパラメーターは 1m に設定されています。
PUT _cluster/settings
{
  "transient": {
    // ポール間隔を 1 分に設定します。
    "indices.lifecycle.poll_interval":"1m"
  }
}
を 1000 に設定します。この場合、チェック中にインデックス内のドキュメント数が 1,000 に達したことをシステムが検出すると、システムはインデックスのロールオーバーをトリガーします。 パラメータを設定して、チェック間隔を変更できます。これにより、インデックスのデータがタイムリーにロールオーバーされます。