第1章 クラスターの管理

Heketi を使用すると、管理者は 1 つまたは複数の Red Hat Gluster Storage クラスターを管理してストレージ容量を追加および削除できます。

Heketi は、Red Hat Gluster Storage ボリュームのライフサイクルを管理するために使用できる RESTful 管理インターフェイスを提供します。Heketi を使用すると、OpenStack Manila、Kubernetes および OpenShift などのクラウドサービスは、サポートされる持続性のタイプで Red Hat Gluster Storage ボリュームを動的にプロビジョニングできます。Heketi は、クラスター全体でブリックの場所を自動的に決定し、ブリックとそのレプリカを異なる障害ドメインに配置できるようにします。Heketi は、任意の数の Red Hat Gluster Storage クラスターもサポートしており、クラウドサービスは単一の Red Hat Gluster Storage クラスターに限定されることなくネットワークファイルストレージを提供できます。
Heketi を使用すると、管理者はブリック、ディスク、または信頼済みストレージプールを管理または設定しなくなりました。Heketi サービスは、管理者のすべてのハードウェアを管理し、オンデマンドでストレージを割り当てることができます。Heketi に登録されているディスクは raw 形式で提供する必要があります。これは、提供されたディスク上で LVM を使用して管理されます。

注記

レプリカ 3 および arbiter ボリュームは、Heketi を使用して作成できるサポート対象のボリュームタイプです。

Heketi ボリュームの作成

Heketi volume creation

Heketi へのボリューム作成リクエストにより、2 つのゾーンと 4 つのノードに分散したブリックを選択することになります。Red Hat Gluster Storage でボリュームが作成された後に、Heketi は要求を最初に行ったサービスにボリューム情報を提供します。

1.1. ストレージの容量の増加

以下のいずれかの方法でストレージ容量を増やすことができます。

  • デバイスの追加
  • 新規ノードの追加
  • 完全に新しいクラスターの追加

1.1.1. 新しいデバイスの追加

既存のノードにデバイスを追加して、ストレージ容量を増やすことができます。デバイスを追加する場合は、必ずデバイスをセットとして追加する必要があります。たとえば、レプリカ数がレプリカ 2 の分散レプリケートされたボリュームを拡張する場合は、少なくとも 2 つのノードに 1 つのデバイスを追加する必要があります。レプリカ 3 を使用する場合は、少なくとも 1 つのデバイスを少なくとも 3 つのノードに追加する必要があります。

以下のように CLI を使用してデバイスを追加できます。

指定したデバイスを登録します。以下のコマンド例は、デバイス /dev/sde をノード d6f2c22f2757bf67b1486d868dcb7794 に追加する方法を示しています。

# heketi-cli device add --name=/dev/sde --node=d6f2c22f2757bf67b1486d868dcb7794
OUTPUT:
Device added successfully

1.1.2. 新規ノードの追加

ストレージを Heketi に追加する別の方法は、新しいノードをクラスターに追加することです。デバイスの追加と同様に、CLI を使用して新しいノードを既存のクラスターに追加できます。新規ノードをクラスターに追加したら、新しいデバイスをそのノードに登録する必要があります。

注記

ノードを正常に追加するには、glusterd 通信のポートが開いていることを確認します。ポートの詳細は https://access.redhat.com/documentation/ja-jp/red_hat_gluster_storage/3.5/html/installation_guide/port_information を参照してください。

  1. OCP クラスターを拡張して、新規ノードを追加します。詳細は https://access.redhat.com/documentation/ja-jp/openshift_container_platform/3.11/html-single/configuring_clusters/#adding-cluster-hosts_adding-hosts-to-cluster を参照してください。

    注記
    • 新規ノードがすでに OCP クラスターの一部である場合は、このステップを省略してステップ 2 に進みます。
    • OCP クラスターをスケールアップして、コンピュートノードまたはインフラノードのいずれかとして新規ノードを追加できます。たとえば、インフラの場合は node3.example.com openshift_node_group_name='node-config-infra' で、コンピュートノードの場合は node3.example.com openshift_node_group_name='node-config-compute' になります。
  2. ファイアウォールルールを設定します。

    注記

    ノードを正常に追加するには、glusterd 通信のポートが開いていることを確認します。ポートの詳細は https://access.redhat.com/documentation/ja-jp/red_hat_gluster_storage/3.5/html/installation_guide/port_information を参照してください。

    1. 以下のルールを、新たに追加した glusterfs ノードの /etc/sysconfig/iptables ファイルに追加します。

      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 24007 -j ACCEPT
      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 24008 -j ACCEPT
      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m multiport --dports 49152:49664 -j ACCEPT
      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 24010 -j ACCEPT
      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 3260 -j ACCEPT
      -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
    2. iptables を再読み込み/再起動します。

      # systemctl restart iptables
  3. RHGS コンテナーがデプロイされるノードにラベルを追加するには、以下の手順を実行します。

    1. 以下のコマンドを実行して、Red Hat Openshift Container Storage が既存プロジェクトでデプロイされ、予想通りに機能していることを確認します。

      # oc get ds

      以下に例を示します。

      # oc get ds
      NAME                DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
      glusterfs-storage   3         3         3         3            3           glusterfs=storage-host   1d
    2. 新たに追加される各ノードのラベルを追加します。ここでは、Red Hat Gluster Storage Pod が新規クラスターに追加されます。

      # oc label node <NODE_NAME> glusterfs=<node_label>

      ここで、

      • NODE_NAME: 新規に作成されたノードの名前です。
      • node_label: 既存のデーモンセットで使用される名前です。これは、直前の手順で oc get ds を実行する際に取得した値です。

      以下に例を示します。

      # oc label node 192.168.90.3 glusterfs=storage-host
      node "192.168.90.3" labeled
    3. 以下のコマンドを実行して、Red Hat Gluster Storage Pod が新規に追加されたノードで実行されているかどうかを確認します。

      これらの新規ノードで起動する追加の Gluster Storage Pod を確認します。

      # oc get pods

      以下に例を示します。

      # oc get pods
      NAME              READY     STATUS    RESTARTS   AGE
      glusterfs-356cf   1/1       Running   0          30d
      glusterfs-fh4gm   1/1       Running   0          30d
      glusterfs-hg4tk   1/1       Running   0          30d
      glusterfs-v759z   0/1       Running   0          1m

      追加の Gluster Storage Pod が表示されるはずです。この例では、以前の 3 つではなく 4 つの gluster Pod が表示されるはずです。それらは正常な状態になるまでに 1 - 2 分かかります (例: glusterfs-v759z 0/1 not healthy yet)。

    4. Red Hat Gluster Storage Pod が実行中であることを確認します。

      # oc get pods -o wide -l glusterfs=storage-pod
  4. Heketi CLI を使用して新規ノードをクラスターに追加します。以下では、CLI を使用して、zone 1 の新規ノードを 597fceb5d6c876b899e48f599b988f54 クラスターに追加する方法を示しています。

    # heketi-cli node add --zone=1 --cluster=597fceb5d6c876b899e48f599b988f54 --management-host-name=node4.example.com --storage-host-name=192.168.10.104
    
    OUTPUT:
    Node information:
    Id: 095d5f26b56dc6c64564a9bc17338cbf
    State: online
    Cluster Id: 597fceb5d6c876b899e48f599b988f54
    Zone: 1
    Management Hostname node4.example.com
    Storage Hostname 192.168.10.104
  5. Heketi CLI を使用してデバイスをクラスターに追加します。デバイスの追加に関する詳細は、「新しいデバイスの追加」を参照してください。
  6. heketi を使用して、ノードが gluster の信頼済みストレージプールに追加しても自動的に更新されないため、エンドポイントを手動で更新します。エンドポイントの更新方法に関する詳細は、「新規ノードの追加後のエンドポイントの更新」 を参照してください。

1.1.2.1. 新規ノードの追加後のエンドポイントの更新

手順

  1. 古い IP アドレスが設定されたすべての namespace にエンドポイントを一覧表示します。

    # oc get ep --all-namespaces | grep <OLD_IP>
    <OLD_IP>
    10.0.0.57 などの古い IP アドレスを指定します。

    例1.1 出力例

    NAMESPACE  NAME
          ENDPOINTS                               AGE
    glusterfs  glusterfs-dynamic-3901a1fb-ee2c-11eb-9447-001a4a0005a7
          10.0.0.181:1,10.0.0.57:1,10.0.0.43:1    112d
    glusterfs  glusterfs-dynamic-3bcc23bf-a5c0-11eb-b69a-001a4a0005a7
          10.0.0.181:1,10.0.0.57:1,10.0.0.43:1    205d
    glusterfs  glusterfs-dynamic-a4a000f5-ee28-11eb-9447-001a4a0005a7
          10.0.0.181:1,10.0.0.57:1,10.0.0.43:1    113d
    glusterfs  heketi-db-storage-endpoints
          10.0.0.57:1,10.0.0.181:1,10.74.251.23:1 217d
  2. オプション: 新しいノードの IP アドレス (例: 10.0.0.64) が追加されていることを確認します。

    # oc get ep <heketi-db-endpoint_name>

    例1.2 例

    # oc get ep heketi-db-storage-endpoints

    例1.3 出力例

    NAME                          ENDPOINTS                                       AGE
    heketi-db-storage-endpoints   10.0.0.181:1,10.0.0.57:1,10.0.0.43:1            217d
  3. 任意の gluster ボリュームを選択し、関連する heketi Pod に移動して、次のコマンドを実行します。

    # heketi-cli volume endpoint patch <volume_id>
    <volume_id>

    gluster ファイルベースのボリュームの ID を指定します (例: 253778390e76e7ab803231504dc266d4)

    例1.4 例

    # heketi-cli volume endpoint patch 253778390e76e7ab803231504dc266d4

    例1.5 出力例

    {"subsets": [{"addresses":[{"ip":"10.0.0.181"}],"ports":[{"port":1}]},{"addresses":[{"ip":"10.0.0.57"}],"ports":[{"port":1}]},{"addresses":[{"ip":"10.0.0.43"}],"ports":[{"port":1}]},{"addresses":[{"ip":"10.0.0.64"}],"ports":[{"port":1}]}]}

    この例では、IP アドレス 10.0.0.64 を持つ新しいノードが追加されます。デフォルトでは、heketi は各 gluster ボリュームに新規 IP アドレスを表示します。

  4. oc bastion から以下のコマンドを実行し、新規ノードの IP アドレスを heketi-db-endpoint に追加します。

    # oc patch ep <heketi-db-endpoint_name> -p <patch_json>
    <heketi-db-endpoint_name>
    heketi-db エンドポイントの名前を指定します (例: heketi-db-storage-endpoints)
    <patch_json>
    heketi-cli コマンドが生成する JSON パッチです。

    例1.6 例

    # oc patch ep heketi-db-storage-endpoints -p '{"subsets": [{"addresses":[{"ip":"10.0.0.181"}],"ports":[{"port":1}]},{"addresses":[{"ip":"10.0.0.57"}],"ports":[{"port":1}]},{"addresses":[{"ip":"10.0.0.43"}],"ports":[{"port":1}]},{"addresses":[{"ip":"10.0.0.64"}],"ports":[{"port":1}]}]}'
  5. 古い IP アドレスは、gluster エンドポイント上の新規ノードの IP アドレスに置き換えます。

    # oc get ep --all-namespaces | grep glusterfs-dynamic | tr -s ' ' | while read LINE; do NS=$(echo $LINE|cut -d' ' -f1); EP=$(echo $LINE|cut -d' ' -f2); echo $NS $EP; oc -n $NS get ep $EP -o yaml | sed 's/<old_ip_address>/<new_ip_address>/g' | oc -n $NS replace -f - ; done
    <old_ip_address>
    古い IP アドレスを指定します。
    <new_ip_address>
    新しいノードの IP アドレスを指定します (例: 10.0.0.64)

    このコマンドは、すべての heketi エンドポイント (通常は glusterfs-dynamic という名前で始まる) を編集し、古い IP アドレスを新しい IP アドレスに置き換えます。

  6. 古い IP アドレスは、gluster-block ベースのボリューム上の新規ノードの IP アドレスに置き換えます。詳細は、Red Hat ナレッジベースのソリューション Gluster block PV are not updated with new IPs after gluster node replacement を参照してください。
  7. オプション: ノードがまだ存在する場合は、OpenShift Container Storage からノードを退避して削除する必要があります。

    1. デバイスを削除し、削除します。古いノードからデバイスを削除し、削除する方法は、「デバイスの削除」 を参照してください。

      重要
      • heketi-cli device delete <device_ID> コマンドとともに、--force-forget オプションを使用して、障害が発生したデバイスを削除できます。ただし、このオプションは、device delete コマンドが失敗した場合にのみ使用することが推奨されます。
      • システムコマンドを使って、デバイスが削除されているか、 heketi 以外でシステムがクリーンであることを確認した後にのみ、--force-forget オプションを使用する必要があります。
    2. オプション: ディスクまたはデバイスがまだ存在する場合は、一度に 1 つのデバイスを削除し、自己修復操作が完了するまで待ってから次のデバイスを削除する必要があります。

      注記

      修復操作は、古いノードのすべてのブリックを交換ノードに置き換えるため、完了するまでに時間がかかる場合があります。

    3. ノードを削除します。heketi 設定からノードを削除する方法は、「ノードの削除」 を参照してください。
  8. heketi エンドポイントで古い IP アドレスを新しいノードの IP アドレスに置き換えたときにエンドポイントがすでに更新されている場合は、heketi-cli volume endpoint patch または oc patch ep コマンドを実行する必要はありません。前の手順 2 および 3 を参照してください。
  9. オプション: Persistent Volume (PV)、ブロックボリュームベースの gluster ブロックがある場合は、次の手順 11 ~ 16 に従います。「Block Storage 上のノードの置き換え」 PV 定義と iSCSI ターゲットレイヤーで新しい IP アドレスを更新する必要があるためです。
  10. 古いノードからストレージラベルを削除します。OpenShift Container Platform から古いノードを削除し、アンインストールする方法の詳細は、ノードのアンインストール を参照してください。

1.1.3. 新規クラスターの既存の Red Hat Openshift Container Storage インストールへの追加

ストレージ容量は、Red Hat Gluster Storage の新規クラスターを追加することで増やすことができます。新規クラスターのノードは、OCP ノード (コンバージドモード) または RHGS ノード (インデペンデントモード) として準備する必要があります。新規クラスターを既存の Red Hat Openshift Container Storage インストールに追加するには、以下のコマンドを実行します。

  1. 以下のコマンドを実行して、Red Hat Openshift Container Storage が既存プロジェクトでデプロイされ、予想通りに機能していることを確認します。

    # oc get ds

    以下に例を示します。

    # oc get ds
    NAME                DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    glusterfs-storage   3         3         3         3            3           glusterfs=storage-host   1d
    注記

    「新規ノードの追加」セクションでステップ 1 とステップ 2 を実行して、新しいホストを追加します。追加するすべてのノードで、ステップを繰り返します。

  2. 以下のコマンドを実行して、Red Hat Gluster Storage Pod が実行されているかどうかを確認します。

    # oc get pods
  3. 新たに追加される各ノードのラベルを追加します。ここでは、以下のコマンドを実行して Red Hat Gluster Storage Pod が新規クラスターに追加され、実行されます。

    # oc label node <NODE_NAME> glusterfs=<node_label>

    ここで、

    • NODE_NAME: 新規に作成されたノードの名前です。
    • node_label: 既存のデーモンセットで使用される名前です。

    以下に例を示します。

    # oc label node 192.168.90.3 glusterfs=storage-host
    node "192.168.90.3" labeled

    これらの新規ノードで起動する追加の Gluster Storage Pod を確認します。

    # oc get pods

    以下に例を示します。

    # oc get pods
    NAME              READY     STATUS    RESTARTS   AGE
    glusterfs-356cf   1/1       Running   0          30d
    glusterfs-fh4gm   1/1       Running   0          30d
    glusterfs-hg4tk   1/1       Running   0          30d
    glusterfs-v759z   0/1       Running   0          1m
    glusterfs-rgs3k   0/1       Running   0          1m
    glusterfs-gtq9f   0/1       Running   0          1m

    追加の Gluster Storage Pod が表示されるはずです。この例では、以前の 3 つではなく 6 つの gluster Pod が表示されるはずです。それらは正常な状態になるまでに 1 - 2 分かかります (例: glusterfs-v759z, glusterfs-rgs3k, and glusterfs-gtq9f 0/1 not healthy yet)。

  4. 以下のコマンドを実行して、Red Hat Gluster Storage Pod が実行されているかどうかを確認します。

    # oc get ds

    以下に例を示します。

    # oc get ds
    NAME                DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    glusterfs-storage   6         6         6         6            6           glusterfs=storage-host   2h
  5. 以下のコマンドを使用して、Heketi に新しいクラスターを作成します。

    # heketi-cli cluster create
  6. 新しいデバイスの追加 および 新規ノードの追加 で説明されているように、新たに作成されたクラスターにノードとデバイスを追加します。