クラスタ上の共有ストレージを管理する場合、ストレージサブシステムに行った変更を各ノードに伝える必要があります。Logical Volume Manager 2 (LVM2)はローカルストレージの管理に多用されており、クラスタ全体のボリュームグループのトランスペアレントな管理をサポートするために拡張されています。クラスタ化されたボリュームグループを、ローカルストレージと同じコマンドで管理できます。
クラスタLVM2は、さまざまなツールと連携します。
ロックを通じてcLVMのディスクアクセスとメタデータへのアクセスを調整します。
1つのファイルシステムをいくつかのディスクに柔軟に分散することができます。LVM2は、ディスクスペースの仮想プールを提供します。
すべてのノードが変更を知ることができるように、LVMメタデータへのアクセスを調整します。cLVMは、共有データ自体へのアクセスは調整しません。これをcLVMができるようにするには、OCFS2などのクラスタ対応アプリケーションをcLVMの管理対象ストレージの上に設定する必要があります。
ご使用のシナリオによっては、次のレイヤを使用して、cLVMでRAID 1デバイスを作成することができます。
LVM2: ファイルシステムのサイズを増減したり、物理ストレージを追加したり、ファイルシステムのスナップショットを作成する場合に、高い柔軟性を提供するソリューションです。この方法については、21.2.3項 「シナリオ - SAN上でiSCSIを使用するcLVM」に説明があります。
DRBD: RAID 0 (ストライピング)とRAID 1 (ミラーリング)のみを提供します。最後の方式については、21.2.4項 「シナリオ - DRBDを使用するcLVM」に説明があります。
次の前提条件を満たしていることを確認してください。
共有ストレージデバイス(Fibre Channel、FCoE、SCSI、iSCSI SAN、DRBD*で提供されているデバイスなど)が使用できること
DRBDの場合は、両方のノードがプライマリであること(以降の手順で説明)。
LVM2のロックタイプがクラスタを認識するかどうか確認すること。/etc/lvm/lvm.conf内のキーワードlocking_typeに値3が含まれている必要があります(デフォルトは1です)。必要な場合は、この設定をすべてのノード にコピーします。
cLVMで使用できないため、lvmetadデーモンが無効になっているかどうかを確認します。/etc/lvm/lvm.confで、キーワードuse_lvmetadが0に設定される必要があります(デフォルトは1です)。必要な場合は、この設定をすべてのノード にコピーします。
cLVMを使用するためのクラスタ準備には次の基本的な手順が含まれます。
シェルを起動して、rootとしてログインします。
クラスタリソースの現在の設定を確認します。
root # crm configure showすでにDLMリソース(および対応するベースグループおよびベースクローン)を設定済みである場合、手順21.2「DLM、CLVM、およびSTONITHの設定」で継続します。
そうでない場合は、手順17.1「DLMのベースグループの設定」で説明されているように、DLMリソース、および対応するベースグループとベースクローンを設定します。
crmライブ設定をexitで終了します。
クラスタのミラーログ情報を追跡するには、cmirrordデーモンを使用します。このデーモンが実行されていないと、クラスタはミラーリングできません。
/dev/sdaと/dev/sdbは、DRBD、iSCSI、その他と同様の共有ストレージデバイスであると想定します。必要な場合は、これらを独自のデバイス名に置き換えます。次の手順に従います。
2つ以上のノードを持つクラスタの作成方法については、『インストールおよびセットアップクイックスタート』を参照してください。
dlm、clvmd、およびSTONITHを実行するために、クラスタを構成します。
root #crmconfigurecrm(live)configure#primitiveclvmd ocf:heartbeat:clvm \ params with_cmirrord=1 \ op stop interval=0 timeout=100 \ op start interval=0 timeout=90 \ op monitor interval=20 timeout=20crm(live)configure#primitivedlm ocf:pacemaker:controld \ op start timeout="90" \ op stop timeout="100" \ op monitor interval="60" timeout="60"crm(live)configure#primitivesbd_stonith stonith:external/sbd \ params pcmk_delay_max=30crm(live)configure#groupg-storage dlm clvmdcrm(live)configure#clonecl-storage g-storage \ meta interleave="true" ordered=true
exitでcrmshを終了し、変更内容をコミットします。
手順 21.3を使用してディスクの構成を続行します。
クラスタ化されたボリュームグループ (VG) を作成します。
root #pvcreate/dev/sda /dev/sdbroot #vgcreate-cy vg1 /dev/sda /dev/sdb
ミラーログの論理ボリューム (LV) をクラスタ内に作成します。
root #lvcreate-n lv1 -m1 -l10%VG vg1 --mirrorlog mirrored
lvsを使用して進捗状況を表示します。パーセンテージの数値が100%に到達したら、ミラーディスクは正しく同期化されたということです。
クラスタ化されたボリューム/dev/vg/lv1をテストするには、次の手順に従います。
/dev/vg/lv1を読み込むか、ここに書き込みます。
lvchange
-anでLVを非アクティブ化します。
lvchange
-ayでLVをアクティブ化します。
lvconvertを使用してミラーログをディスクログに変換します。
別のクラスタVGにミラーログのLVを作成します。これは前のものとは別のボリュームグループです。
現在のcLVMは、ミラーサイドごとに1つの物理ボリューム (PV) しか処理できません。1つのミラーが実際には、連結またはストライプ化の必要がある複数のPVで構成されている場合、lvcreateはこのことを理解できません。このため、lvcreateおよびcmirrordメタデータは、複数のPVを1つのサイドに「グループ化」することを理解する必要があり、事実上RAID10をサポートすることになります。
cmirrordに対してRAID10をサポートするには、次の手順を使用します(/dev/sda、/dev/sdb、/dev/sdc、および/dev/sddは共有ストレージデバイスだとします)。
ボリュームグループ (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 createdroot #vgcreatevgtest /dev/sda /dev/sdb /dev/sdc /dev/sdd Clustered volume group "vgtest" successfully created
ファイル/etc/lvm/lvm.confを開き、allocationセクションに移動します。次の行を設定して、ファイルを保存します。
mirror_logs_require_separate_pvs = 1
PVにタグを追加します。
root #pvchange--addtag @a /dev/sda /dev/sdbroot #pvchange--addtag @b /dev/sdc /dev/sdd
タグは、ストレージオブジェクトのメタデータに割り当てられる順序付けのないキーワードまたは用語です。タグを使用すると、順序付けのないタグのリストをLVM2ストレージオブジェクトのメタデータに添付することによって、それらのオブジェクトのコレクションを有用になるように分類できます。
タグを一覧します。
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)を参照してください。
次のシナリオでは、iSCSIターゲットをいくつかのクライアントにエクスポートする2つのSANボックスを使用します。一般的なアイデアが、図21.1「cLVMによるiSCSIのセットアップ」で説明されています。
以降の手順を実行すると、ディスク上のデータはすべて破壊されます。
まず、1つのSANボックスだけ設定します。各SANボックスは、そのiSCSIターゲットをエクスポートする必要があります。次の手順に従います。
YaSTを実行し、 › の順にクリックしてiSCSIサーバモジュールを起動します。
コンピュータがブートするたびにiSCSIターゲットを起動したい場合は、を選択し、そうでない場合は、を選択します。
ファイアウォールが実行中の場合は、を有効にします。
タブに切り替えます。認証が必要な場合は、受信または送信(あるいはその両方の)認証を有効にします。この例では、を選択します。
新しいiSCSIターゲットを追加します。
タブに切り替えます。
をクリックします。
ターゲットの名前を入力します。名前は、次のようにフォーマットされます。
iqn.DATE.DOMAIN
フォーマットに関する詳細は、セクション3.2.6.3.1のタイプ「iqn」(iSCSI修飾名)(http://www.ietf.org/rfc/rfc3720.txt)を参照してください。
より説明的な名前にしたい場合は、さまざまなターゲットで一意であれば、識別子を変更できます。
をクリックします。
にデバイス名を入力し、を使用します。
を2回クリックします。
警告ボックスでを選択して確認します。
環境設定ファイル/etc/iscsi/iscsid.confを開き、パラメータnode.startupをautomaticに変更します。
次の手順に従って、iSCSIイニシエータを設定します。
YaSTを実行し、 › の順にクリックします。
コンピュータがブートするたびに、iSCSIイニシエータを起動したい場合は、を選択し、そうでない場合は、を選択します。
タブに切り替え、ボタンをクリックします。
自分のIPアドレスとiSCSIターゲットのポートを追加します(手順21.4「iSCSIターゲット(SAN上)を設定する」参照)。通常は、ポートを既定のままにし、デフォルト値を使用できます。
認証を使用する場合は、受信および送信用のユーザ名およびパスワードを挿入します。そうでない場合は、を選択します。
を選択します。検出された接続が一覧されます。
をクリックして続行します。
シェルを開いて、rootとしてログインします。
iSCSIイニシエータが正常に起動しているかどうかテストします。
root #iscsiadm-m discovery -t st -p 192.168.3.100 192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
セッションを確立します。
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.5「iSCSIイニシエータを設定する」のiSCSIイニシエータを実行したノードの1つで、rootシェルを開きます。
ディスク/dev/sddおよび/dev/sdeでコマンドpvcreateを使用して、LVM2用に物理ボリュームを準備します。
root #pvcreate/dev/sddroot #pvcreate/dev/sde
両方のディスク上でクラスタ対応のボリュームグループを作成します。
root #vgcreate--clustered y clustervg /dev/sdd /dev/sde
必要に応じて、論理ボリュームを作成します。
root #lvcreate-m1 --name clusterlv --size 500M clustervg
物理ボリュームを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
ボリュームグループを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」」を参照してください。
市、国、または大陸の各所にデータセンターが分散している場合は、次のシナリオを使用できます。
プライマリ/プライマリDRBDリソースを作成する
まず、手順20.1「DRBDの手動設定」の説明に従って、DRBDデバイスをプライマリ/セカンダリとしてセットアップします。ディスクの状態が両方のノードでup-to-dateであることを確認します。drbdadm statusを使用してこれをチェックします。
次のオプションを環境設定ファイル(通常は、/etc/drbd.d/r0.res)に追加します。
resource r0 {
net {
allow-two-primaries;
}
...
}変更した設定ファイルをもう一方のノードにコピーします。たとえば、次のように指定します。
root #scp/etc/drbd.d/r0.res venus:/etc/drbd.d/
両方のノードで、次のコマンドを実行します。
root #drbdadmdisconnect r0root #drbdadmconnect r0root #drbdadmprimary r0
ノードのステータスをチェックします。
root #drbdadmstatus r0
clvmdリソースをペースメーカーの環境設定でクローンとして保存し、DLMクローンリソースに依存させます。詳細については、手順21.1「DLMリソースを作成する」を参照してください。次に進む前に、クラスタでこれらのリソースが正しく機動していることを確認してください。crm statusまたはWebインタフェースを使用して、実行中のサービスを確認できます。
pvcreateコマンドで、LVM2用に物理ボリュームを準備します。たとえば、/dev/drbd_r0デバイスでは、コマンドは次のようになります。
root #pvcreate/dev/drbd_r0
クラスタ対応のボリュームグループを作成します。
root #vgcreate--clustered y myclusterfs /dev/drbd_r0
必要に応じて、論理ボリュームを作成します。論理ボリュームのサイズは変更できます。たとえば、次のコマンドで、4GBの論理ボリュームを作成します。
root #lvcreate-m1 --name testlv -L 4G myclusterfs
VG内の論理ボリュームは、ファイルシステムのマウントまたはraw用として使用できるようになりました。論理ボリュームを使用しているサービスにコロケーションのための正しい依存性があることを確認し、VGをアクティブ化したら論理ボリュームの順序付けを行います。
このような設定手順を終了すると、LVM2の環境設定は他のスタンドアロンワークステーションと同様に行えます。
複数のデバイスが同じ物理ボリュームの署名を共有していると思われる場合(マルチパスデバイスやdrbdなどのように)、LVM2がPVを走査するデバイスを明示的に設定しておくことをお勧めします。
たとえばコマンドvgcreateがミラーブロックデバイスの代わりに物理デバイスを使用すると、DRBDは混乱してしまい、DRBDのスプリットブレイン状態が発生する場合があります。
LVM2用の単一のデバイスを非アクティブ化するには、次の手順に従います。
ファイル/etc/lvm/lvm.confを編集し、filterから始まる行を検索します。
そこに記載されているパターンは正規表現として処理されます。冒頭の「a」は走査にデバイスパターンを受け入れることを、冒頭の「r」はそのデバイスパターンのデバイスを拒否することを意味します。
/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/.*/" ]
環境設定ファイルを書き込み、すべてのクラスタノードにコピーします。
詳細な情報は、http://www.clusterlabs.org/wiki/Help:ContentsにあるPacemakerメーリングリストから取得できます。
cLVMのFAQのオフィシャルサイトはhttp://sources.redhat.com/cluster/wiki/FAQ/CLVMです。