Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 SUSE Linux Enterprise High Availability Extension 12 SP5

21 Cluster Logical Volume Manager(cLVM)

概要

クラスタ上の共有ストレージを管理する場合、ストレージサブシステムに行った変更を各ノードに伝える必要があります。Logical Volume Manager 2 (LVM2)はローカルストレージの管理に多用されており、クラスタ全体のボリュームグループのトランスペアレントな管理をサポートするために拡張されています。クラスタ化されたボリュームグループを、ローカルストレージと同じコマンドで管理できます。

21.1 概念の概要

クラスタLVM2は、さまざまなツールと連携します。

分散ロックマネージャ(DLM:Distributed Lock Manager)

ロックを通じてcLVMのディスクアクセスとメタデータへのアクセスを調整します。

論理ボリュームマネージャ2(LVM2: Logical Volume Manager2)

1つのファイルシステムをいくつかのディスクに柔軟に分散することができます。LVM2は、ディスクスペースの仮想プールを提供します。

クラスタ化論理ボリュームマネージャ(cLVM: Clustered Logical Volume Manager)

すべてのノードが変更を知ることができるように、LVMメタデータへのアクセスを調整します。cLVMは、共有データ自体へのアクセスは調整しません。これをcLVMができるようにするには、OCFS2などのクラスタ対応アプリケーションをcLVMの管理対象ストレージの上に設定する必要があります。

21.2 cLVMの環境設定

ご使用のシナリオによっては、次のレイヤを使用して、cLVMでRAID 1デバイスを作成することができます。

次の前提条件を満たしていることを確認してください。

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

  • DRBDの場合は、両方のノードがプライマリであること(以降の手順で説明)。

  • LVM2のロックタイプがクラスタを認識するかどうか確認すること。/etc/lvm/lvm.conf内のキーワードlocking_typeに値3が含まれている必要があります(デフォルトは1です)。必要な場合は、この設定をすべてのノード にコピーします。

  • cLVMで使用できないため、lvmetadデーモンが無効になっているかどうかを確認します。/etc/lvm/lvm.confで、キーワードuse_lvmetad0に設定される必要があります(デフォルトは1です)。必要な場合は、この設定をすべてのノード にコピーします。

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

cLVMを使用するためのクラスタ準備には次の基本的な手順が含まれます。

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

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

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

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

  4. crmライブ設定をexitで終了します。

21.2.2 シナリオ: Cmirrordの設定

クラスタのミラーログ情報を追跡するには、cmirrordデーモンを使用します。このデーモンが実行されていないと、クラスタはミラーリングできません。

/dev/sda/dev/sdbは、DRBD、iSCSI、その他と同様の共有ストレージデバイスであると想定します。必要な場合は、これらを独自のデバイス名に置き換えます。次の手順に従います。

手順 21.2: DLM、CLVM、およびSTONITHの設定
  1. 2つ以上のノードを持つクラスタの作成方法については、『インストールおよびセットアップクイックスタート』を参照してください。

  2. dlmclvmd、およびSTONITHを実行するために、クラスタを構成します。

    root # crm configure
    crm(live)configure# primitive clvmd ocf:heartbeat:clvm \
            params with_cmirrord=1 \
            op stop interval=0 timeout=100 \
    	       op start interval=0 timeout=90 \
    	       op monitor interval=20 timeout=20
    crm(live)configure# primitive dlm ocf:pacemaker:controld \
            op start timeout="90" \
            op stop timeout="100" \
            op monitor interval="60" timeout="60"
    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
            params pcmk_delay_max=30
    crm(live)configure# group g-storage dlm clvmd
    crm(live)configure# clone cl-storage g-storage \
            meta interleave="true" ordered=true
  3. exitでcrmshを終了し、変更内容をコミットします。

手順 21.3を使用してディスクの構成を続行します。

手順 21.3: cLVM用のディスクの構成
  1. クラスタ化されたボリュームグループ (VG) を作成します。

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate -cy vg1 /dev/sda /dev/sdb
  2. ミラーログの論理ボリューム (LV) をクラスタ内に作成します。

    root # lvcreate -n lv1 -m1 -l10%VG vg1 --mirrorlog mirrored
  3. lvsを使用して進捗状況を表示します。パーセンテージの数値が100%に到達したら、ミラーディスクは正しく同期化されたということです。

  4. クラスタ化されたボリューム/dev/vg/lv1をテストするには、次の手順に従います。

    1. /dev/vg/lv1を読み込むか、ここに書き込みます。

    2. lvchange -anでLVを非アクティブ化します。

    3. lvchange -ayでLVをアクティブ化します。

    4. lvconvertを使用してミラーログをディスクログに変換します。

  5. 別のクラスタVGにミラーログのLVを作成します。これは前のものとは別のボリュームグループです。

現在のcLVMは、ミラーサイドごとに1つの物理ボリューム (PV) しか処理できません。1つのミラーが実際には、連結またはストライプ化の必要がある複数のPVで構成されている場合、lvcreateはこのことを理解できません。このため、lvcreateおよびcmirrordメタデータは、複数のPVを1つのサイドにグループ化することを理解する必要があり、事実上RAID10をサポートすることになります。

cmirrordに対してRAID10をサポートするには、次の手順を使用します(/dev/sda/dev/sdb/dev/sdc、および/dev/sddは共有ストレージデバイスだとします)。

  1. ボリュームグループ (VG) を作成します。

    root # pvcreate /dev/sda /dev/sdb /dev/sdc /dev/sdd
      Physical volume "/dev/sda" successfully created
      Physical volume "/dev/sdb" successfully created
      Physical volume "/dev/sdc" successfully created
      Physical volume "/dev/sdd" successfully created
    root # vgcreate vgtest /dev/sda /dev/sdb /dev/sdc /dev/sdd
      Clustered volume group "vgtest" successfully created
  2. ファイル/etc/lvm/lvm.confを開き、allocationセクションに移動します。次の行を設定して、ファイルを保存します。

    mirror_logs_require_separate_pvs = 1
  3. PVにタグを追加します。

    root # pvchange --addtag @a /dev/sda /dev/sdb
    root # pvchange --addtag @b /dev/sdc /dev/sdd

    タグは、ストレージオブジェクトのメタデータに割り当てられる順序付けのないキーワードまたは用語です。タグを使用すると、順序付けのないタグのリストをLVM2ストレージオブジェクトのメタデータに添付することによって、それらのオブジェクトのコレクションを有用になるように分類できます。

  4. タグを一覧します。

    root # pvs -o pv_name,vg_name,pv_tags /dev/sd{a,b,c,d}

    次の出力を受信します。

    PV        VG   PV Tags
    /dev/sda  vgtest   a
    /dev/sdb  vgtest   a
    /dev/sdc  vgtest   b
    /dev/sdd  vgtest   b

LVM2に関する詳細情報が必要な場合は、『SUSE Linux Enterprise Server 12 SP5 ストレージ管理ガイド』(https://documentation.suse.com/sles-12/html/SLES-all/cha-lvm.html)を参照してください。

21.2.3 シナリオ - SAN上でiSCSIを使用するcLVM

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

cLVMによるiSCSIのセットアップ
図 21.1: cLVMによるiSCSIのセットアップ
警告
警告: データ損失

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

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

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

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

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

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

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

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

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

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

      iqn.DATE.DOMAIN

      フォーマットに関する詳細は、セクション3.2.6.3.1のタイプ「iqn」(iSCSI修飾名)(http://www.ietf.org/rfc/rfc3720.txt)を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    root # 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です。

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

  2. ディスク/dev/sddおよび/dev/sdeでコマンドpvcreateを使用して、LVM2用に物理ボリュームを準備します。

    root # pvcreate /dev/sdd
    root # pvcreate /dev/sde
  3. 両方のディスク上でクラスタ対応のボリュームグループを作成します。

    root # vgcreate --clustered y clustervg /dev/sdd /dev/sde
  4. 必要に応じて、論理ボリュームを作成します。

    root # lvcreate -m1 --name clusterlv --size 500M clustervg
  5. 物理ボリュームをpvdisplayで確認します。

      --- Physical volume ---
          PV Name               /dev/sdd
          VG Name               clustervg
          PV Size               509,88 MB / not usable 1,88 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               52okH4-nv3z-2AUL-GhAN-8DAZ-GMtU-Xrn9Kh
    
          --- Physical volume ---
          PV Name               /dev/sde
          VG Name               clustervg
          PV Size               509,84 MB / not usable 1,84 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               Ouj3Xm-AI58-lxB1-mWm2-xn51-agM2-0UuHFC
  6. ボリュームグループをvgdisplayで確認します。

      --- Volume group ---
          VG Name               clustervg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          Clustered             yes
          Shared                no
          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

ボリュームを作成してリソースを起動すると、/dev/dm-*という名前で新しいデバイスが作成されています。LVM2リソースの上でクラスタ化されたファイルシステム(たとえば、OCFS)を使用することをお勧めします。詳細については、「第18章 「OCFS2」を参照してください。

21.2.4 シナリオ - DRBDを使用するcLVM

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

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

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

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

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

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

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

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

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

    root # pvcreate /dev/drbd_r0
  4. クラスタ対応のボリュームグループを作成します。

    root # vgcreate --clustered y myclusterfs /dev/drbd_r0
  5. 必要に応じて、論理ボリュームを作成します。論理ボリュームのサイズは変更できます。たとえば、次のコマンドで、4GBの論理ボリュームを作成します。

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

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

21.3 有効なLVM2デバイスの明示的な設定

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

たとえばコマンドvgcreateがミラーブロックデバイスの代わりに物理デバイスを使用すると、DRBDは混乱してしまい、DRBDのスプリットブレイン状態が発生する場合があります。

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

  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. 環境設定ファイルを書き込み、すべてのクラスタノードにコピーします。

21.4 詳細

詳細な情報は、http://www.clusterlabs.org/wiki/Help:ContentsにあるPacemakerメーリングリストから取得できます。

cLVMのFAQのオフィシャルサイトはhttp://sources.redhat.com/cluster/wiki/FAQ/CLVMです。

このページを印刷