インデックス割り当てフィルターをノードロールに移行する

現在、カスタムノード属性と属性ベースの割り当てフィルターを使用して、データティアを介してインデックスを移動させている場合、ホット-ウォーム-コールドアーキテクチャにおいて、組み込みのノードロールと自動データティア割り当てを使用することをお勧めします。ノードロールを使用すると、ILMが自動的にインデックスをデータティア間で移動できます。

ホット-ウォーム-コールドアーキテクチャでデータを管理するために自動データティア割り当てに依存することをお勧めしますが、他の目的のためにシャード割り当てを制御するために属性ベースの割り当てフィルターを使用することもできます。

Elasticsearch ServiceおよびElastic Cloud Enterpriseは、移行を自動的に実行できます。自己管理型デプロイメントの場合は、ノードロールに切り替えるために構成、ILMポリシー、およびインデックスを手動で更新する必要があります。

Elasticsearch ServiceまたはElastic Cloud Enterpriseでノードロールに自動移行する

Elasticsearch ServiceまたはElastic Cloud Enterpriseのデフォルトデプロイメントテンプレートからノード属性を使用している場合、次の操作を行うとノードロールに切り替えるように促されます:

これらのアクションは、クラスター構成とILMポリシーをノードロールを使用するように自動的に更新します。さらに、バージョン7.14以上にアップグレードすると、デプロイメントに対して構成変更が適用されるたびにILMポリシーが自動的に更新されます。

カスタムインデックステンプレートを使用している場合は、自動移行が完了した後にそれらを確認し、使用していた属性ベースの割り当てフィルターを削除してください。

自動移行後に追加のアクションを取る必要はありません。自動移行を許可しない場合や自己管理型デプロイメントがある場合のみ、以下の手動ステップが必要です。

自己管理型デプロイメントでノードロールに移行する

ノードロールを使用するように切り替えるには:

データノードをデータティアに割り当てる

各データノードに適切なロールを設定して、1つ以上のデータティアに割り当てます:data_hotdata_contentdata_warmdata_cold、またはdata_frozen。ノードは他のロールを持つこともできます。デフォルトでは、新しいノードはすべてのロールで構成されます。

Elasticsearch Serviceデプロイメントにデータティアを追加すると、1つ以上のノードが自動的に対応するロールで構成されます。Elasticsearch Serviceデプロイメントでノードのロールを明示的に変更するには、デプロイメント更新APIを使用します。ノードのnode_type構成を適切なnode_rolesに置き換えます。たとえば、次の構成は、ノードをホットおよびコンテンツティアに追加し、インジェストノード、リモートノード、および変換ノードとして機能できるようにします。

Yaml

  1. "node_roles": [
  2. "data_hot",
  3. "data_content",
  4. "ingest",
  5. "remote_cluster_client",
  6. "transform"
  7. ],

自分のクラスターを直接管理している場合は、elasticsearch.ymlの各ノードに適切なロールを設定します。たとえば、次の設定は、ノードをホットおよびコンテンツティアのデータ専用ノードとして構成します。

Yaml

  1. node.roles [ data_hot, data_content ]

既存のILMポリシーからカスタム割り当て設定を削除する

各ライフサイクルフェーズのallocateアクションを更新して、属性ベースの割り当て設定を削除します。ILMは、各フェーズにmigrateアクションを注入して、インデックスをデータティア間で自動的に移行します。

allocateアクションがレプリカの数を設定しない場合は、allocateアクションを完全に削除します。(空のallocateアクションは無効です。)

ポリシーは、アーキテクチャ内の各データティアに対応するフェーズを指定する必要があります。ILMがインデックスをデータティア間で移動させるためにmigrateアクションを注入できるようにするために、各フェーズは存在する必要があります。他のアクションを実行する必要がない場合、フェーズは空にすることができます。たとえば、デプロイメントに対してウォームおよびコールドデータティアを有効にする場合、ポリシーにはホット、ウォーム、およびコールドフェーズが含まれている必要があります。

新しいインデックスに対してカスタムホット属性の設定を停止する

データストリームを作成すると、その最初のバックアップインデックスは自動的にdata_hotノードに割り当てられます。同様に、インデックスを直接作成すると、自動的にdata_contentノードに割り当てられます。

Elasticsearch Serviceデプロイメントでは、すべてのインデックスにホットシャード割り当て属性を設定したcloud-hot-warm-allocation-0インデックステンプレートを削除します。

Python

  1. resp = client.indices.delete_template(
  2. name=".cloud-hot-warm-allocation-0",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.delete_template(
  2. name: '.cloud-hot-warm-allocation-0'
  3. )
  4. puts response

Js

  1. const response = await client.indices.deleteTemplate({
  2. name: ".cloud-hot-warm-allocation-0",
  3. });
  4. console.log(response);

Console

  1. DELETE _template/.cloud-hot-warm-allocation-0

カスタムインデックステンプレートを使用している場合は、新しいインデックスをホットティアに割り当てるために使用した属性ベースの割り当てフィルターを削除するように更新します。

ティアの優先度とカスタム属性ルーティング設定を混在させることによって発生する問題を完全に回避するために、すべてのレガシー、コンポーザブル、およびコンポーネントテンプレートを更新して、設定されている属性ベースの割り当てフィルターを削除することをお勧めします。

既存のインデックスに対してティアの優先度を設定する

ILMは、管理されたインデックスを利用可能なデータティア間で自動的に移行させるために、各フェーズにmigrate actionを自動的に注入します。

ILMが既存の管理インデックスをデータティア間で移動できるようにするには、インデックス設定を更新して:

  • 1. カスタム割り当てフィルターをnullに設定して削除します。
  • 2. ティアの優先度を設定します。

たとえば、古いテンプレートがdata属性をhotに設定してホットティアにシャードを割り当てている場合、data属性をnullに設定し、_tier_preferencedata_hotに設定します。

Python

  1. resp = client.indices.put_settings(
  2. index="my-index",
  3. settings={
  4. "index.routing.allocation.require.data": None,
  5. "index.routing.allocation.include._tier_preference": "data_hot"
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index',
  3. body: {
  4. 'index.routing.allocation.require.data' => nil,
  5. 'index.routing.allocation.include._tier_preference' => 'data_hot'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index",
  3. settings: {
  4. "index.routing.allocation.require.data": null,
  5. "index.routing.allocation.include._tier_preference": "data_hot",
  6. },
  7. });
  8. console.log(response);

Console

  1. PUT my-index/_settings
  2. {
  3. "index.routing.allocation.require.data": null,
  4. "index.routing.allocation.include._tier_preference": "data_hot"
  5. }

ホットフェーズからすでに移行されたインデックスに対して、ティアの優先度には、優先ティアが利用できない場合にインデックスシャードが割り当てられるように、適切なフォールバックティアを含める必要があります。たとえば、ウォームフェーズにすでにあるインデックスのフォールバックとしてホットティアを指定します。

Python

  1. resp = client.indices.put_settings(
  2. index="my-index",
  3. settings={
  4. "index.routing.allocation.require.data": None,
  5. "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index',
  3. body: {
  4. 'index.routing.allocation.require.data' => nil,
  5. 'index.routing.allocation.include._tier_preference' => 'data_warm,data_hot'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index",
  3. settings: {
  4. "index.routing.allocation.require.data": null,
  5. "index.routing.allocation.include._tier_preference": "data_warm,data_hot",
  6. },
  7. });
  8. console.log(response);

Console

  1. PUT my-index/_settings
  2. {
  3. "index.routing.allocation.require.data": null,
  4. "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
  5. }

インデックスがすでにコールドフェーズにある場合、コールド、ウォーム、ホットティアを含めます。

  1. eg. 次のルーティング構成を持つインデックスの場合:
  2. #### JSON
  3. ``````JSON
  4. {
  5. "index.routing.allocation.require.data": "warm",
  6. "index.routing.allocation.include._tier_preference": "data_hot"
  7. }
  8. `

ルーティング構成は次のように修正する必要があります:

Python

  1. resp = client.indices.put_settings(
  2. index="my-index",
  3. settings={
  4. "index.routing.allocation.require.data": None,
  5. "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-index',
  3. body: {
  4. 'index.routing.allocation.require.data' => nil,
  5. 'index.routing.allocation.include._tier_preference' => 'data_warm,data_hot'
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-index",
  3. settings: {
  4. "index.routing.allocation.require.data": null,
  5. "index.routing.allocation.include._tier_preference": "data_warm,data_hot",
  6. },
  7. });
  8. console.log(response);

Console

  1. PUT my-index/_settings
  2. {
  3. "index.routing.allocation.require.data": null,
  4. "index.routing.allocation.include._tier_preference": "data_warm,data_hot"
  5. }

この状況は、ノード属性を使用するILMポリシーが復元され、管理されたインデックスがホットフェーズからウォームフェーズに移行する場合に、デフォルトでデータティアを使用するシステムで発生する可能性があります。この場合、ノード属性構成は、インデックスが割り当てられるべき正しいティアを示します。