ISM を使用して Amazon OpenSearch Service での容量不足に対処する方法を教えてください。
Amazon OpenSearch Service クラスターのストレージ容量が不足しています。Index State Management (ISM) を使用してストレージ容量を管理したいと考えています。
簡単な説明
容量不足を解決するには、ISM を使用してカスタム管理ポリシーを定義し、ロールオーバー操作を実行します (たとえば、古いインデックスの自動削除)。ロールオーバー操作は、既存のインデックスが指定の条件を満たした際、ターゲットを新しいインデックスにロールオーバーします。ISM は、各ステータスでのインデックス作成日時を評価し、関連するアクションの開始タイミングを判断します。
ポリシーをインデックスにアタッチすると、インデックスは初期化を開始し、ロールオーバー操作が完了するまで別の状態に移行します。ロールオーバー操作の詳細については、Open Distro のウェブサイトで「ロールオーバー」を参照してください。
解決策
ロールオーバーのインデックスを設定する
OpenSearch Dashboards でインデックスパターンを作成するには、次の手順を実行します。
- OpenSearch Service コンソールを開きます。
- OpenSearch ダッシュボードにアクセスします。
注: OpenSearch Dashboards へのリンクは、OpenSearch Service コンソールのドメイン概要に表示されています。 - [管理] を選択します。
- [インデックスパターン] を選択し、[インデックスパターンの作成] を選択します。
- インデックスパターン ^.*-\d+$ と一致するインデックス形式でインデックスおよびエイリアスを作成します。
重要: エラーを防ぐために、ロールオーバーのエイリアスが正しく構成されていることを確認してください。
詳細については、OpenSearch のウェブサイトで「インデックスパターン」を参照してください。
ISM ポリシーにロールオーバー操作を含める際、ロールオーバーのエイリアスも含める必要があります。詳細については、「OpenSearch Service において、ISM ポリシーのロールオーバーインデックスアクションが継続的に失敗する原因を教えてください」を参照してください。
次の例では、test-index-000001 を作成し、複数のドキュメントを登録します。この例では、ターゲットがロールオーバーした新しいインデックスを使用しているため、インデックス形式はインデックスのパターンと一致する必要があります。
PUT test-index-000001/_doc/1 { "user": "testuser", "post_date": "2020-05-08T14:12:12", "message": "ISM testing" }
次の例では、新しいインデックスを指す test-index というエイリアスを作成します。
POST /_aliases{ "actions": [ { "add": { "index": "test-index-000001", "alias": "test-index" } } ] }
ISM ポリシーを作成する
OpenSearch Dashboards でロールオーバー操作に対する ISM ポリシーを作成します。
ポリシーの例
warm 状態にロールオーバーします。
{ "policy": { "policy_id": "Roll_over_policy", "description": "A test policy. DO NOT USE FOR PRODUCTION!", "schema_version": 1, "error_notification": null, "default_state": "hot", "states": [ { "name": "hot", "actions": [ { "rollover": { "min_size": "10mb" } } ], "transitions": [ { "state_name": "warm" } ] }, { "name": "warm", "actions": [ { "replica_count": { "number_of_replicas": 2 } } ], "transitions": [] } ] } }
上記の ISM ポリシーは、hot および warm 状態を定義します。デフォルトでは、インデックスは hot 状態です。インデックスのサイズが 10 MB に達し、ISM が新しいインデックスにロールオーバーすると、インデックスは warm 状態に移行します。warm 状態の場合は、インデックスに複数のアクションを実行できます (例: レプリカを 2 に変更する、force_merge 操作を実行する)。
数日経過後、ロールオーバーしてインデックスを削除します。
{ "policy": { "policy_id": "Roll_over_policy", "description": "A test policy. DO NOT USE FOR PRODUCTION!", "schema_version": 1, "error_notification": null, "default_state": "hot", "states": [ { "name": "hot", "actions": [ { "rollover": { "min_size": "10mb" } } ], "transitions": [ { "state_name": "delete", "conditions": { "min_index_age": "30d" } } ] }, { "name": "delete", "actions": [ { "delete": {} } ], "transitions": [] } ] } }
上記の ISM ポリシーは、hot および delete 状態を定義します。デフォルトでは、インデックスは hot 状態です。インデックスが 10 MB に達すると、ISM は新しいインデックスにロールオーバーします。30 日経過後、インデックスは delete 状態に移行し、ISM はそのインデックスを削除します。
ポリシー例の詳細については、「サンプルポリシー」を参照してください。
ポリシーをインデックスにアタッチします。
次の手順を実行します。
- OpenSearch Service コンソールを開きます。
- OpenSearch Service コンソールのドメイン概要に表示されるリンク経由で OpenSearch Dashboards にアクセスします。
- [インデックス管理] タブを選択します。
- ISM ポリシーをアタッチする対象のインデックス (例: test-index-000001) を選択します。
注: インデックスは、[ポリシーマネージドインデックス] に表示されています。 - [ポリシーを適用] を選択します。
- (オプション) エイリアスを必要とするアクションがポリシーで指定されている場合は、そのエイリアスを指定し、**[適用]**を選択します。
次の API を使用して ISM ポリシーをアタッチすることもできます。
POST _plugins/_ism/add/index_name { "policy_id": "policy_name"}
注: index_name をインデックス名に、policy_name をポリシー名に置き換えてください。
詳細については、OpenSearch のウェブサイトで「ポリシーの追加」を参照してください。
既存のインデックスのポリシーを更新する
OpenSearch の ISM ポリシーは、バージョニングを使用します。ポリシーを更新すると、新しく作成されたインデックスは自動的にポリシーの最新バージョンを参照します。ただし、更新前に作成したインデックスは引き続き以前のバージョンを参照します。更新したポリシーを既存のインデックスに適用するには、まず古いポリシーをインデックスから削除してから、更新したポリシーを再度適用する必要があります。
既存のインデックスに ISM ポリシーを再度適用するには、次の手順を実行します。
- OpenSearch Service コンソールを開きます。
- OpenSearch Service コンソールのドメイン概要に表示されるリンク経由で OpenSearch Dashboards にアクセスします。
- [インデックス管理] タブを選択します。
- [ポリシーマネージドインデックス] セクションで **[ポリシーを変更]**を選択します。
- 変更を適用するインデックスを選択します (例: test-index-000001)。
- インデックスの現在の状態を選択します。
- [新規ポリシーの選択] セクションで **[ポリシー名を更新]**を選択します。
- (オプション) ポリシーの更新後にインデックスを他の状態に変更する場合は、[Switch indices to the following state after the policy takes effect] (ポリシーの反映後、インデックスを次の状態に移行) を選択します。次に、ドロップダウンリストで状態を選択します。
次の API を使用して ISM ポリシーを更新することもできます。
POST _plugins/_ism/change_policy/indexname { "policy_id": "policy_1"}
注: index_name をインデックス名に、policy_1 をポリシー名に置き換えてください。
詳細については、OpenSearch のウェブサイトで「マネージドインデックスポリシーの更新」を参照してください。
テンプレートを追加してポリシーを複数のインデックスにアタッチする
インデックスパターンに一致する複数のインデックスにポリシーをアタッチするには、ISM テンプレートを作成して使用します。
次の API コールを使用してポリシーを作成します。
PUT _plugins/_ism/policies/test_policy
ポリシーの例:
{ "policy": { "description": "A test policy. DO NOT USE FOR PRODUCTION!", "last_updated_time": 1642027350875, "schema_version": 1, "error_notification": null, "default_state": "hot", "states": [ { "name": "hot", "actions": [ { "rollover":{ "min_size": "10mb" } } ], "transitions":[ { "state_name": "warm" } ] }, { "name": "warm", "actions": [ { "replica_count":{ "number_of_replicas": 2 } } ], "transitions": [] } ], "ism_template":{ "index_patterns":[ "test*" ], "priority": 100 } } }
test_policy が新しく作成されたインデックスにアタッチされていることを確認するには、次の API コール例を使用します。
GET _plugins/_ism/explain/test-index-000002
想定される出力:
{ "test-index-000002": { "index.plugins.index_state_management.policy_id": "test_policy", "index.opendistro.index_state_management.policy_id": "test_policy", "index": "test-index-000002", "index_uuid": "CZrQ-RzRS8SmiWIuyqFmVg", "policy_id": "test_policy", "enabled": true }, "total_managed_indices": 1 }
詳細については、OpenSearch のウェブサイトで「インデックスの詳細表示」を参照してください。
注: このインデックスは、OpenSearch Dashboards の [インデックス管理] タブ内の [マネージドインデックス] セクションにも表示されます。
ISM ポリシーの状態を確認する
ロールオーバー操作では、インデックスがロールオーバーし、warm 状態に移行し、レプリカ数が更新された後、インデックス処理は完了します。
ISM ポリシーを使用してもインデックスが正しく移行されない場合は、ISM の状態を確認します。
インデックスの移行ステータスを確認するには、次の API を使用します。
GET _ultrawarm/migration/index_name/_status
注: index_name をステータス確認対象のインデックス名に置き換えてください。
すべてのインデックスの移行ステータスを取得するには、次の API を使用します。
GET _ultrawarm/migration/_status?
注: ホットストレージからウォームストレージまたはコールドストレージにデータを移動する場合は、ISM ポリシーを構成する前に、ドメインでウォームストレージとコールドストレージを有効にします。また、ISM ポリシーには、ストレージ階層間でインデックスを移行するための移行アクションを明示的に含める必要があります。移行アクションを含めない場合、ポリシーの状態名のみが変更され、インデックスは引き続きホットストレージに配置されます。
warm 移行アクションを構成します。
{ "name": "warm", "actions": [{ "warm_migration": {}, "retry": { "count": 5, "delay": "1h" }
cold 移行アクションを構成します。
{ "name": "cold", "actions": [{ "cold_migration": { "timestamp_field": "<your timestamp field>" } }
関連するコンテンツ
質問済み 10ヶ月前
質問済み 2年前
