目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise High Availabilityのドキュメント / 管理ガイド / ストレージとデータレプリケーション / Cluster Logical Volume Manager (Cluster LVM)
適用項目 SUSE Linux Enterprise High Availability 15 SP6

24 Cluster Logical Volume Manager (Cluster LVM)

クラスタ上の共有ストレージを管理する場合、ストレージサブシステムへの変更を各ノードに伝える必要があります。論理ボリューム管理(LVM)は、クラスタ全体にわたってボリュームグループのトランスペアレントな管理をサポートします。複数のホスト間で共有されるボリュームグループは、ローカルストレージと同じコマンドを使用して管理できます。

24.1 概念の概要

Cluster LVMは、さまざまなツールと連携します。

Distributed Lock Manager (DLM)

クラスタ全体のロックにより、複数のホスト間の共有リソースへのアクセスを調整します。

LVM (Logical Volume Manager)

LVMはディスクスペースの仮想プールを提供し、1つの論理ボリュームを複数のディスクにわたって柔軟に分散できます。

Cluster Logical Volume Manager (Cluster LVM)

Cluster LVMという用語は、LVMがクラスタ環境で使用されていることを示しています。このため、共有ストレージ上のLVMメタデータを保護するには、ある程度の設定調整が必要になります。SUSE Linux Enterprise 15以降、クラスタ拡張では、clvmdの代わりに、lvmlockdを使用します。の詳細については、lvmlockdコマンドのマニュアルページ(man 8 lvmlockd lvmlockd)を参照してください。

ボリュームグループと論理ボリューム

ボリュームグループ(VG)と論理ボリューム(LV)は、LVMの基本的な概念です。ボリュームグループは、複数の物理ディスクのストレージプールです。論理ボリュームはボリュームグループに属し、ファイルシステムを作成できるエラスティックボリュームとみなすことができます。クラスタ環境には、共有VGという概念があります。共有VGは共有ストレージで構成され、複数のホストで同時に使用することができます。

24.2 クラスタLVMの設定

以下の要件が満たされていることを確認します。

  • 共有ストレージデバイス(Fibre Channel、FCoE、SCSI、iSCSI SAN、DRBD*などで提供されているデバイス)が使用できること

  • パッケージlvm2lvm2-lockdがインストールされていること。

  • SUSE Linux Enterprise 15以降、クラスタ拡張では、clvmdの代わりに、lvmlockdを使用します。clvmdデーモンが実行されていないことを確認します。実行されていると、lvmlockdの起動に失敗します。

24.2.1 クラスタリソースの作成

クラスタ内で共有VGを設定するには、1つのノードで次の基本手順を実行します。

手順 24.1: DLMリソースの作成
  1. シェルを起動して、rootとしてログインします。

  2. クラスタリソースの現在の設定を確認します。

    # crm configure show
  3. すでにDLMリソース(および対応するベースグループおよびベースクローン)を設定済みである場合、手順24.2「lvmlockdリソースの作成」で継続します。

    そうでない場合は、手順20.1「DLMのベースグループの設定」で説明されているように、DLMリソース、および対応するベースグループとベースクローンを設定します。

手順 24.2: lvmlockdリソースの作成
  1. シェルを起動して、rootとしてログインします。

  2. 次のコマンドを実行して、このリソースの使用状況を確認します。

    # crm configure ra info lvmlockd
  3. lvmlockdリソースを次のように設定します。

    # crm configure primitive lvmlockd lvmlockd \
            op start timeout="90" \
            op stop timeout="100" \
            op monitor interval="30" timeout="90"
  4. lvmlockdリソースがすべてのノードで起動されるようにするには、手順24.1「DLMリソースの作成」で作成したストレージ用の基本グループにプリミティブリソースを追加します。

    # crm configure modgroup g-storage add lvmlockd
  5. 変更内容をレビューします。

    # crm configure show
  6. リソースが正常に実行されているかどうかを確認します。

    # crm status full
手順 24.3: 共有VGおよびLVの作成
  1. シェルを起動して、rootとしてログインします。

  2. すでに2つの共有ディスクがあると仮定し、それらに対して共有VGを作成します。

    # vgcreate --shared vg1 /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2
  3. LVを作成します。最初は有効にしないでください。

    # lvcreate -an -L10G -n lv1 vg1
手順 24.4: LVM-activateリソースの作成
  1. シェルを起動して、rootとしてログインします。

  2. 次のコマンドを実行して、このリソースの使用状況を確認します。

    # crm configure ra info LVM-activate

    このリソースは、VGのアクティブ化を管理します。共有VGおけるLVアクティブ化には、排他モードと共有モードという2つの異なるモードがあります。デフォルト設定は排他モードです。このモードは通常、ext4などのローカルファイルシステムでLVを使用するときに使用します。共有モードは、OCFS2などのクラスタファイルシステムでのみ使用します。

  3. VGのアクティブ化を管理するようにリソースを設定します。使用しているシナリオに応じて、次のいずれかのオプションを選択します。

    • ローカルファイルシステムの使用に対して排他アクティブ化モードを使用します。

      # crm configure primitive vg1 LVM-activate \
         params vgname=vg1 vg_access_mode=lvmlockd \
         op start timeout=90s interval=0 \
         op stop timeout=90s interval=0 \
         op monitor interval=30s timeout=90s
    • OCFS2に対して共有アクティブ化モードを使用し、クローニングされたg-storageグループに追加します。

      # crm configure primitive vg1 LVM-activate \
         params vgname=vg1 vg_access_mode=lvmlockd activation_mode=shared \
         op start timeout=90s interval=0 \
         op stop timeout=90s interval=0 \
         op monitor interval=30s timeout=90s
      # crm configure modgroup g-storage add vg1
  4. リソースが正常に実行されているかどうかを確認します。

    # crm status full

24.2.2 シナリオ: SAN上でiSCSIを使用するCluster LVM

次のシナリオでは、iSCSIターゲットをいくつかのクライアントにエクスポートする2つのSANボックスを使用します。一般的なアイデアが、図24.1「Cluster LVMを使用した共有ディスクのセットアップ」で説明されています。

Cluster LVMを使用した共有ディスクのセットアップ
図 24.1: Cluster LVMを使用した共有ディスクのセットアップ
警告
警告: データ損失

以降の手順を実行すると、ディスク上のデータはすべて破壊されます。

まず、1つのSANボックスだけ設定します。各SANボックスは、そのiSCSIターゲットをエクスポートする必要があります。以下に手順を示します。

手順 24.5: iSCSIターゲット(SAN上)を設定する
  1. YaSTを実行し、ネットワークサービス › iSCSI LIO Target (iSCSI LIOターゲット)の順にクリックしてiSCSIサーバモジュールを起動します。

  2. コンピュータがブートするたびにiSCSIターゲットを起動したい場合は、ブート時を選択し、そうでない場合は、手動を選択します。

  3. ファイアウォールが実行中の場合は、ファイアウォールでポートを開くを有効にします。

  4. グローバルタブに切り替えます。認証が必要な場合は、受信または送信(あるいはその両方の)認証を有効にします。この例では、認証なしを選択します。

  5. 新しいiSCSIターゲットを追加します。

    1. ターゲットタブに切り替えます。

    2. Add (追加)をクリックします。

    3. ターゲットの名前を入力します。名前は、次のようにフォーマットされます。

      iqn.DATE.DOMAIN

      フォーマットに関する詳細については、https://www.ietf.org/rfc/rfc3720.txtにあるSection 3.2.6.3.1. Type "iqn." (iSCSI Qualified Name) を参照してください。

    4. より説明的な名前にしたい場合は、さまざまなターゲットで一意であれば、識別子を変更できます。

    5. Add (追加)をクリックします。

    6. パスにデバイス名を入力し、Scsiidを使用します。

    7. 次へを2回クリックします。

  6. 警告ボックスではいを選択して確認します。

  7. 設定ファイル/etc/iscsi/iscsid.confを開き、パラメータnode.startupautomaticに変更します。

次の手順に従って、iSCSIイニシエータを設定します。

手順 24.6: iSCSIイニシエータの環境設定
  1. YaSTを実行し、ネットワークサービス › iSCSIイニシエータの順にクリックします。

  2. コンピュータがブートするたびに、iSCSIイニシエータを起動したい場合は、ブート時を選択し、そうでない場合は、手動を選択します。

  3. 検出タブに切り替え、検出ボタンをクリックします。

  4. IPアドレスとiSCSIターゲットのポートを追加します(手順24.5「iSCSIターゲット(SAN上)を設定する」参照)。通常は、ポートを既定のままにし、デフォルト値を使用できます。

  5. 認証を使用する場合は、受信および送信用のユーザ名およびパスワードを挿入します。そうでない場合は、認証なしを選択します。

  6. 次へを選択します。検出された接続が一覧されます。

  7. 完了をクリックして続行します。

  8. シェルを開いて、rootとしてログインします。

  9. iSCSIイニシエータが正常に起動しているかどうかテストします。

    # iscsiadm -m discovery -t st -p 192.168.3.100
    192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
  10. セッションを確立します。

    # iscsiadm -m node -l -p 192.168.3.100 -T iqn.2010-03.de.jupiter:san1
    Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]
    Login to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]: successful

    lsscsiでデバイス名を表示します。

    ...
    [4:0:0:2]    disk    IET      ...     0     /dev/sdd
    [5:0:0:1]    disk    IET      ...     0     /dev/sde

    3番目の列にIETを含むエントリを捜します。この場合、デバイスは/dev/sddおよび/dev/sdeです。

手順 24.7: 共有ボリュームグループの作成
  1. 手順24.6「iSCSIイニシエータの環境設定」のiSCSIイニシエータを実行したノードの1つで、rootシェルを開きます。

  2. 共有ボリュームグループをディスク/dev/sddおよび/dev/sdeに作成します。その際、これらの固定デバイス名を使用します(例: /dev/disk/by-id/)。

    # vgcreate --shared testvg /dev/disk/by-id/DEVICE_ID /dev/disk/by-id/DEVICE_ID
  3. 必要に応じて、論理ボリュームを作成します。

    # lvcreate --name lv1 --size 500M testvg
  4. ボリュームグループをvgdisplayで確認します。

      --- Volume group ---
          VG Name               testvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          MAX LV                0
          Cur LV                0
          Open LV               0
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               1016,00 MB
          PE Size               4,00 MB
          Total PE              254
          Alloc PE / Size       0 / 0
          Free  PE / Size       254 / 1016,00 MB
          VG UUID               UCyWw8-2jqV-enuT-KH4d-NXQI-JhH3-J24anD
  5. コマンドvgsを使用してボリュームグループの共有状態を確認します。

    # vgs
      VG       #PV #LV #SN Attr   VSize     VFree
      vgshared   1   1   0 wz--ns 1016.00m  1016.00m

    Attr列には、ボリューム属性が表示されます。この例では、ボリュームグループは、書き込み可能(w)、サイズ変更可能(z)、割り当てポリシーは通常(n)で共有リソース(s)です。詳細については、vgsのマニュアルページを参照してください。

ボリュームを作成してリソースを起動したら、/dev/testvgの下に、新しいデバイス名(/dev/testvg/lv1など)を作成する必要があります。これは、LVがアクティブ化され使用できることを示します。

24.2.3 シナリオ: DRBDを使用したCluster LVM

市、国、または大陸の各所にデータセンターが分散している場合は、次のシナリオを使用できます。

手順 24.8: DRBDでクラスタ対応ボリュームグループを作成する
  1. プライマリ/プライマリDRBDリソースを作成する

    1. まず、手順23.1「DRBDの手動設定」の説明に従って、DRBDデバイスをプライマリ/セカンダリとしてセットアップします。ディスクの状態が両方のノードでup-to-dateであることを確認します。drbdadm statusを使用してこれをチェックします。

    2. 次のオプションを環境設定ファイル(通常は、/etc/drbd.d/r0.res)に追加します。

      resource r0 {
        net {
           allow-two-primaries;
        }
        ...
      }
    3. 変更した設定ファイルをもう一方のノードにコピーします。たとえば、次のように指定します。

      # scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
    4. 両方のノードで、次のコマンドを実行します。

      # drbdadm disconnect r0
      # drbdadm connect r0
      # drbdadm primary r0
    5. ノードのステータスをチェックします。

      # drbdadm status r0
  2. lvmlockdリソースをペースメーカーの環境設定でクローンとして保存し、DLMクローンリソースに依存させます。詳細については、手順24.1「DLMリソースの作成」を参照してください。次に進む前に、クラスタでこれらのリソースが正しく機動していることを確認してください。crm statusまたはWebインタフェースを使用して、実行中のサービスを確認します。

  3. pvcreateコマンドで、LVM用に物理ボリュームを準備します。たとえば、/dev/drbd_r0デバイスでは、コマンドは次のようになります。

    # pvcreate /dev/drbd_r0
  4. 共有ボリュームグループを作成します。

    # vgcreate --shared testvg /dev/drbd_r0
  5. 必要に応じて、論理ボリュームを作成します。たとえば、次のコマンドで、4GBの論理ボリュームを作成します。

    # lvcreate --name lv1 -L 4G testvg
  6. VG内の論理ボリュームは、raw用のファイルシステムのマウントとして使用できるようになりました。論理ボリュームを使用しているサービスにコロケーションのための正しい依存性があることを確認し、VGをアクティブ化したら論理ボリュームの順序付けを行います。

このような設定手順を終了すると、LVM設定は他のスタンドアロンワークステーション上と同様に行えます。

24.3 有効なLVMデバイスの明示的な設定

複数のデバイスが同じ物理ボリュームの署名を共有していると思われる場合(マルチパスデバイスやDRBDなどのように)、LVMがPVを走査するデバイスを明示的に設定しておくことをお勧めします。

たとえば、コマンドvgcreateで、ミラーリングされたブロックデバイスを使用する代わりに物理デバイスを使用すると、DRBDで混乱が生じます。これにより、DRBDがスプリットブレイン状態になる可能性があります。

LVM用の単一のデバイスを非アクティブ化するには、次の手順に従います。

  1. ファイル/etc/lvm/lvm.confを編集し、filterで始まる行を探します。

  2. そこに記載されているパターンは正規表現として処理されます。冒頭のaは走査にデバイスパターンを受け入れることを、冒頭のrはそのデバイスパターンのデバイスを拒否することを意味します。

  3. /dev/sdb1という名前のデバイスを削除するには、次の表現をフィルタルールに追加します。

    "r|^/dev/sdb1$|"

    完全なフィルタ行は次のようになります。

    filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]

    DRBDとMPIOデバイスは受け入れ、その他のすべてのデバイスは拒否するフィルタ行は次のようになります。

    filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
  4. 環境設定ファイルを書き込み、すべてのクラスタノードにコピーします。

24.4 Mirror LVからCluster MDへのオンラインマイグレーション

SUSE Linux Enterprise High Availability 15以降、Cluster LVMでのcmirrordの使用は非推奨になりました。クラスタ内のミラー論理ボリュームはCluster MDに移行することを強く推奨します。Cluster MDはクラスタマルチデバイスの略称で、クラスタ用のソフトウェアベースのRAIDストレージソリューションです。

24.4.1 マイグレーション前のサンプルセットアップ

次のサンプルセットアップが存在するとします。

  • aliceおよびbobというノードから成る2ノードクラスタ

  • test-lvというボリュームグループから作成された、cluster-vg2という名前のミラー論理ボリューム

  • ボリュームグループcluster-vg2がディスク/dev/vdb/dev/vdcから構成されている。

# lsblk
NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda                                   253:0    0   40G  0 disk
├─vda1                                253:1    0    4G  0 part [SWAP]
└─vda2                                253:2    0   36G  0 part /
vdb                                   253:16   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_0 254:0    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_0      254:3    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
vdc                                   253:32   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_1 254:1    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_1      254:4    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
重要
重要: マイグレーションにおける障害の発生を避ける

マイグレーション手順を実施する前に、論理ボリュームおよび物理ボリュームで使用可能な容量と、どの程度使用されているかを確認してください。論理ボリュームの容量がすべて使い果たされている場合、マイグレーションは失敗し、ターゲットボリュームに関するinsufficient free spaceエラーが発生します。こうしたマイグレーション障害に対応するための回避策は、ミラーログのオプションに応じて異なります。

  • ミラーログ自体が(mirroredオプションを使用して)ミラーリングされ、ミラーログと同じデバイスに割り当てられている場合.  (たとえば、 Administration Guide for those versionsの説明に従って、SUSE Linux Enterprise High Availability 11または12で、cmirrordを設定した論理ボリュームを作成したケース)。

    デフォルトでは、mdadmが実行されることにより、デバイスとアレイデータのマイグレーションがそれぞれ開始される前に、ある程度の空き領域が確保されます。マイグレーション中には、この未使用のパディング領域をチェックして、その容量を削除することも可能です。その際には、ステップ 1.dと次の段落で説明するdata-offsetオプションを利用できます。

    data-offsetの実行時には、Cluster MDがそのメタデータを書き込めるよう、デバイス上に十分な余裕を持たせる必要があります。ただし、オフセット自体の容量は抑える必要があります。デバイスの残りの領域で、移行する物理ボリュームのエクステントをすべて格納しなければならないからです。使用可能なボリューム領域は、ボリューム全体からミラーログを差し引いた残りの領域なので、オフセットのサイズはミラーログよりも小さくする必要があります。

    data-offsetを128kBに設定することを推奨します。オフセット値を指定しない場合、デフォルト値の1kB (1024バイト)が使用されます。

  • ミラーログが(diskオプションを使用して)別のデバイスに記録されている場合、あるいは(coreオプションを使用して)メモリ上に格納されている場合: マイグレーションを始める前に、物理ボリュームの容量を増やすか、(物理ボリュームの空き領域を確保するために)論理ボリュームのサイズを減らします。

24.4.2 Mirror LVをCluster MDにマイグレートする

以下の手順は、24.4.1項 「マイグレーション前のサンプルセットアップ」に基づいています。セットアップ環境に応じて手順を変更し、LV、VG、ディスク、Cluster MDデバイスの名前はご使用のリソースに置き換えてください。

このマイグレーションではダウンタイムは発生しません。そのため、マイグレーション中でもファイルシステムをマウントすることができます。

  1. aliceノードで、次の手順を実行します。

    1. ミラー論理ボリュームtest-lvをリニア論理ボリュームに変換します。

      # lvconvert -m0 cluster-vg2/test-lv /dev/vdc
    2. 物理ボリューム/dev/vdcをボリュームグループcluster-vg2から削除します。

      # vgreduce cluster-vg2 /dev/vdc
    3. この物理ボリュームをLVMから削除します。

      # pvremove /dev/vdc

      lsblkを実行すると、次のように出力されます。

      NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                     253:0    0   40G  0 disk
      ├─vda1                  253:1    0    4G  0 part [SWAP]
      └─vda2                  253:2    0   36G  0 part /
      vdb                     253:16   0   20G  0 disk
      └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
      vdc                     253:32   0   20G  0 disk
    4. ディスク/dev/md0を持つCluster MDデバイス/dev/vdcを作成します。

      # mdadm --create /dev/md0 --bitmap=clustered \
           --metadata=1.2 --raid-devices=1 --force --level=mirror \
           /dev/vdc --data-offset=128

      data-offsetオプションを使用する理由については、重要: マイグレーションにおける障害の発生を避けるを参照してください。

  2. bobノードで、次のMDデバイスをアセンブルします。

    # mdadm --assemble md0 /dev/vdc

    2ノードより多いクラスタでは、クラスタ内の残りのノードについても、この手順を実行してください。

  3. aliceノードに戻って、次の手順を実行します。

    1. LVM用の物理ボリュームとして、MDデバイス/dev/md0を初期化します。

      # pvcreate /dev/md0
    2. MDデバイス/dev/md0をボリュームグループcluster-vg2に追加します。

      # vgextend cluster-vg2 /dev/md0
    3. ディスク/dev/vdbのデータをデバイス/dev/md0に移動します。

      # pvmove /dev/vdb /dev/md0
    4. 物理ボリューム/dev/vdbをボリュームgroup cluster-vg2から削除します。

      # vgreduce cluster-vg2 /dev/vdb
    5. LVMがデバイスを物理ボリュームとして認識しなくなるように、このデバイスのラベルを削除します。

      # pvremove /dev/vdb
    6. /dev/vdbをMDデバイス/dev/md0に追加します。

      # mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb

24.4.3 マイグレーション後のサンプルセットアップ

lsblkを実行すると、次のように出力されます。

NAME                      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
vda                       253:0    0   40G  0 disk
├─vda1                    253:1    0    4G  0 part  [SWAP]
└─vda2                    253:2    0   36G  0 part  /
vdb                       253:16   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
vdc                       253:32   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm