コンテンツにスキップ

Huawei Cloud での OpenSearch ディスクタイプ変更

概要

本番環境をデプロイする際、コストを抑えるために、OpenSearch クラスターの使用量が少ない場合、I/O やスループットが低いディスクを選択することがよくあります。しかし、その後データ量が増加するにつれて、パフォーマンスにボトルネックが生じます。そこで、ディスクタイプを変更して I/O やスループットを向上させる方法を検討します。

前提条件

  • Huawei Cloud CCE v1.23
  • Huawei Cloud の StorageClass csi-disk-topology を使用していること
  • 高可用性 OpenSearch クラスターがデプロイされていること

フローチャート

以下の操作手順と併せてご確認ください。

操作手順

手順一:csi-disk-topology のデフォルトディスクタイプを変更する

Huawei Cloud CCE クラスターが標準で提供する StorageClass を使用しているため、これを変更して、デフォルトで作成されるディスクタイプが要件を満たすようにします。

kubectl edit sc -n middleware csi-disk-topology
---
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-disk-topology
parameters:
  csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
  csi.storage.k8s.io/fstype: ext4
  everest.io/disk-volume-type: SSD    ## ディスクタイプを変更
  everest.io/passthrough: "true"
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
  • パラメーター説明
パラメーター 説明
everest.io/disk-volume-type クラウドディスクのタイプ(大文字)。SAS:高I/O、SSD:超高I/O、GPSSD:汎用SSD、ESSD:極速SSD

手順二:シャードの移行、レートの調整

  • ノード名に基づいてノードを除外します。以下の手順で、小さい順にノードを除外します。ノードを除外すると、そのデータノードへのシャードの書き込みが停止します。また、もともとこのノードにあったシャードは、クラスターの自己分散機能により、他のノードに移行します。

注意:この操作を実行する際には、他のノードのストレージが除外されたノードのデータを保持できることを確認してください。

PUT _cluster/settings
{
  "persistent" : {
    "cluster.routing.allocation.exclude._name" : "opensearch-cluster-data-0"
  }
}
  • 分散シャードの最大数を設定します。
  • incoming は書き込み可能なシャードの最大数を表し、通常は除外されたノードから書き込みを受け入れるノードのシャード数を示します。
  • outcoming は出力可能なシャードの最大数を表し、通常は除外されたノードから出力されるシャード数を示します。推奨値は 残りのノード数 × 書き込み可能なシャードの最大数 です。
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.node_concurrent_incoming_recoveries": 2, 
    "cluster.routing.allocation.node_concurrent_outgoing_recoveries": 12
  }
}
  • 分散シャードプロセスの最大転送レートを設定します。
  • 使用状況に応じて、移行プロセスのスループットを制限できます。業務に影響を与えないように、日中は低めに、夜間は高めに設定することをお勧めします。
PUT _cluster/settings
{
  "persistent": {
    "indices.recovery.max_bytes_per_sec": "100mb"
  }
}

注意:実際のディスクスループットに基づいて調整してください。

  • 移行状況を確認する
GET _cluster/health  ## クラスター状態を確認
GET _cat/tasks?v     ## 詳細なシャード情報を確認
GET _cat/indices?v&s=health:desc     ## インデックスのヘルス状態を順に確認

手順三:ディスクの交換

  • 先ほど除外したデータノードに対応する PVC と Pod を削除し、手順一で変更した StorageClass が自動的に使用されるようにします。
  • 削除順序を間違えないように注意してください。
kubectl delete pvc -n middleware opensearch-cluster-data-opensearch-cluster-data-0
kubectl delete pods -n middleware opensearch-cluster-data-0

PVC 削除時に応答がなくなる場合は、Ctrl + C でスキップしてください。

手順四:新しいディスクの拡張

  • Huawei Cloud コンソールで、新しく作成したディスクを必要なサイズに拡張します。

  • 対応するデータノードの PVC のサイズを変更し、他のノードと同じサイズにします。

kubectl edit pvc -n middleware opensearch-cluster-data-opensearch-cluster-data-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2500Gi    ## 他のノードと同じサイズに変更
  storageClassName: csi-disk-topology
  volumeMode: Filesystem
  volumeName: pvc-7025138f-04e0-4d5b-879d-7cf998f54628

注意:ディスクは拡張のみ可能で縮小はできません。サイズ選択は慎重に行ってください。

手順五:ノードの除外を解除する

クラスター全体の移行のため、上記の手順 2~4 では 1 つのデータノードのディスクタイプのみを変更しました。すべてのノードのディスクタイプが変更されるまで手順 2~4 を繰り返し、その後、以下のコマンドを実行して除外ノードを空にします。これにより、クラスターの自己分散機能により、最後の空になったノードに自動的にシャードが分散されます。

PUT _cluster/settings
{
  "persistent" : {
    "cluster.routing.allocation.exclude._name" : ""
  }
}

検証方法

GET _cluster/health

クラスターの状態に問題がなければ、古いディスクを解放して、余分な費用が発生しないようにしてください。

フィードバック

このページは役に立ちましたか?