クラスタ上の共有ストレージを管理する場合、ストレージサブシステムに行った変更を各ノードに伝える必要があります。Linux Volume Manager 2 (LVM2)はローカルストレージの管理に多用されており、クラスタ全体のボリュームグループのトランスペアレントな管理をサポートするために拡張されています。クラスタ化されたボリュームグループを、ローカルストレージと同じコマンドで管理できます。
クラスタLVMは、さまざまなツールと連携します。
cLVMのためにディスクアクセスを調整します。
1つのファイルシステムをいくつかのディスクに柔軟に分散することができます。LVMは、ディスクスペースの仮想プールを提供します。
すべてのノードが変更を知ることができるように、LVMメタデータへのアクセスを調整します。cLVMは、共有データ自体へのアクセスは調整しません。これをcLVMができるようにするには、OCFS2などのクラスタ対応アプリケーションをcLVMの管理対象ストレージの上に設定する必要があります。
ご使用のシナリオによっては、次のレイヤを使用して、cLVMでRAID 1デバイスを作成することができます。
LVM. ファイルシステムのサイズを増減したり、物理ストレージを追加したり、ファイルシステムのスナップショットを作成する場合に、高い柔軟性を提供するソリューションです。この方法については、16.2.3項 「シナリオ - SAN上でiSCSIを使用するcLVM」に説明があります。
DRBD. RAID 0 (ストライピング)とRAID 1 (ミラーリング)のみを提供します。最後の方式については、16.2.4項 「シナリオ - DRBDを使用するcLVM」に説明があります。
MIDデバイス(Linux Software RAIDまたはmdadm)は、すべてのRAIDレベルを提供しますが、まだクラスタはサポートしていません。したがって、先に挙げたリストには含まれていません。
次の前提条件を満たしていることを確認してください。
共有ストレージデバイス(Fibre Channel、FCoE、SCSI、iSCSI SAN、DRBD*で提供されているデバイスなど)が使用できること
DRBDの場合は、両方のノードがプライマリであること(以降の手順で説明)。
LVM2のロックタイプがクラスタを認識するかどうか確認すること。/etc/lvm/lvm.conf内のキーワードlocking_typeに値 3がデフォルトで含まれている必要があります。必要な場合は、この設定をすべてのノード にコピーします。
16.2.2項 「クラスタリソースの作成」に説明されているように、最初にクラスタリソースを作成してから、LVMボリュームを作成します。そうしないと、後でボリュームを削除できなくなります。
クラスタのミラーログ情報を追跡するには、cmirrordデーモンを使用します。このデーモンが実行されていないと、クラスタはミラーリングできません。
ここでは、/dev/sdaと/dev/sdbが共有ストレージデバイスだとします。必要な場合は、これらを独自のデバイス名に置き換えます。次の手順に従います。
2つ以上のノードを使用してクラスタを作成します。
dlm、clvmd、およびSTONITHを実行するために、クラスタを構成します。
root #crmconfigurecrm(live)configure#primitiveclvmd ocf:lvm2:clvmd \ op stop interval="0" timeout="100" \ op start interval="0" timeout="90" \ op monitor interval="20" timeout="20"crm(live)configure#primitivedlm ocf:pacemaker:controld \ op start interval="0" timeout="90" \ op stop interval="0" timeout="100" \ op monitor interval="60" timeout="60"crm(live)configure#primitivesbd_stonith stonith:external/sbdcrm(live)configure#groupbase-group dlm clvmdcrm(live)configure#clonebase-clone base-group \ meta interleave="true"
exitでcrmshを終了し、変更内容をコミットします。
クラスタ化されたボリュームグループ (VG) を作成します。
root #pvcreate/dev/sda /dev/sdbroot #vgcreate-cy vg /dev/sda /dev/sdb
ミラーログの論理ボリューム (LV) をクラスタ内に作成します。
root #lvcreate-nlv -m1 -l10%VG vg --mirrorlog mirrored
lvsを使用して進捗状況を表示します。パーセンテージの数値が100%に到達したら、ミラーディスクは正しく同期化されたということです。
クラスタ化されたボリューム/dev/vg/lvをテストするには、次の手順に従います。
/dev/vg/lvを読み込むか、ここに書き込みます。
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は共有ストレージデバイスだとします)。
ボリュームグループ (VG) を作成します。
root #pvcreate/dev/sda /dev/sdbroot #vgcreatevg /dev/sda /dev/sdb
ファイル/etc/lvm/lvm.confを開き、allocationセクションに移動します。次の行を設定して、ファイルを保存します。
mirror_legs_require_separate_pvs = 1
PVにタグを追加します。
root #pvchange--addtag @a /dev/sdaroot #pvchange--addtag @b /dev/sdb
タグは、ストレージオブジェクトのメタデータに割り当てられる順序付けのないキーワードまたは用語です。タグを使用すると、順序付けのないタグのリストをLVMストレージオブジェクトのメタデータに添付することによって、それらのオブジェクトのコレクションを有用になるように分類できます。
タグを一覧します。
root #pvs-o pv_name,vg_name,pv_tags /dev/sd{a,b}
次の出力を受信します。
PV VG PV Tags /dev/sda vgtest a /dev/sdb vgtest b
LVMに関する詳細情報が必要な場合は、『SUSE Linux Enterprise Server 12 ストレージ管理ガイド』の「LVM設定」の章を参照してください。http://www.suse.com/documentation/から入手できます。
cLVMを使用するためのクラスタ準備には次の基本的な手順が含まれます。
cLVMおよびOCFS2は両方とも、クラスタ内のすべてのノード上で実行するDLMリソースを必要とするため、通常はクローンとして設定されます。OCFS2およびcLVMの両方を含むセットアップがある場合、OCFS2およびcLVMの両方に1つのDLMリソースを設定することで十分です。
シェルを起動して、rootとしてログインします。
crm を実行します。
configure
showでクラスタリソースの現在の設定を確認します。
すでにDLMリソース(および対応するベースグループおよびベースクローン)を設定済みである場合、手順16.2「LVMおよびcLVMリソースの作成」で継続します。
そうでない場合は、手順13.2「DLMリソースの設定」で説明されているように、DLMリソース、および対応するベースグループとベースクローンを設定します。
crmライブ設定をexitで終了します。
シェルを起動して、rootとしてログインします。
crm を実行します。
configure
次のとおり、cLVMリソースを設定します。
crm(live)configure#primitiveclvm ocf:lvm2:clvmd \ params daemon_timeout="30"
次のとおり、ボリュームグループのLVMリソースを設定します。
crm(live)configure#primitivevg1 ocf:heartbeat:LVM \ params volgrpname="cluster-vg" \ op monitor interval="60" timeout="60"
ボリュームグループを1つのノード上で単独にアクティブ化する場合、以下で説明されるようにLVMリソースを設定し、ステップ 6を省略します。
crm(live)configure#primitivevg1 ocf:heartbeat:LVM \ params volgrpname="cluster-vg" exclusive="yes" \ op monitor interval="60" timeout="60"
この場合、cLVMは、非クラスタ化アプリケーション用の追加保護手段として、VG内のすべての論理ボリュームが複数のノード上でアクティブ化されないよう保護します。
cLVMおよびLVMリソースがクラスタ全体でアクティブ化されていることを確認するには、手順13.2「DLMリソースの設定」で作成したベースグループに両方のプリミティブを追加します。
入力
crm(live)configure#editbase-group
Viエディタが開いたら、そこに次のようにグループを変更し、変更を保存します。
crm(live)configure#groupbase-group dlm clvm vg1 ocfs2-1
セットアップにOCFS2が含まれない場合、ベースグループからocfs2-1プリミティブを省略します。
showで変更内容をレビューします。
すべて正しければ、commitで変更を送信し、exitでcrmライブ設定を終了します。
次のシナリオでは、iSCSIターゲットをいくつかのクライアントにエクスポートする2つのSANボックスを使用します。一般的なアイデアが、図16.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/iscsi.confを開き、パラメータnode.startupをautomaticに変更します。
次の手順に従って、iSCSIイニシエータを設定します。
YaSTを実行し、 › の順にクリックします。
コンピュータがブートするたびに、iSCSIイニシエータを起動したい場合は、を選択し、そうでない場合は、を選択します。
タブに切り替え、ボタンをクリックします。
自分のIPアドレスとiSCSIターゲットのポートを追加します(手順16.3「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 Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260] Logging in to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,3260] Login to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260]: successful Login to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,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です。
手順16.4「iSCSIイニシエータを設定する」のiSCSIイニシエータを実行したノードの1つで、rootシェルを開きます。
ディスク/dev/sddおよび/dev/sdeでコマンドpvcreateを使用して、LVM用に物理ボリュームを準備します。
root #pvcreate/dev/sddroot #pvcreate/dev/sde
両方のディスク上でクラスタ対応のボリュームグループを作成します。
root #vgcreate--clustered y clustervg /dev/sdd /dev/sde
必要に応じて、論理ボリュームを作成します。
root #lvcreate--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-0という名前の新しいデバイスができているはずです。LVMリソースの上でクラスタ化されたファイルシステム(たとえば、OCFS)を使用することをお勧めします。詳細については、第13章 OCFS2を参照してください。
市、国、または大陸の各所にデータセンターが分散している場合は、次のシナリオを使用できます。
プライマリ/プライマリDRBDリソースを作成する
まず、手順15.1「DRBDの手動設定」の説明に従って、DRBDデバイスをプライマリ/セカンダリとしてセットアップします。ディスクの状態が両方のノードでup-to-dateであることを確認します。これは、cat /proc/drbdまたはsystemctl status drbd.serviceで確認します。
次のオプションを環境設定ファイル(通常は、/etc/drbd.d/r0.res)に追加します。
resource r0 {
startup {
become-primary-on both;
}
net {
allow-two-primaries;
}
...
}変更した設定ファイルをもう一方のノードにコピーします。たとえば、次のように指定します。
root #scp/etc/drbd.d/r0.res venus:/etc/drbd.d/
両方のノードで、次のコマンドを実行します。
root #drbdadmdisconnect r0root #drbdadmconnect r0root #drbdadmprimary r0
ノードのステータスをチェックします。
root #cat/proc/drbd ... 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----
clvmdリソースをペースメーカーの環境設定でクローンとして保存し、DLMクローンリソースに依存させます。詳細については、手順16.1「DLMリソースを作成する」を参照してください。次に進む前に、クラスタでこれらのリソースが正しく機動していることを確認してください。crm_monまたはWebインタフェースを使用して、実行中のサービスを確認できます。
pvcreateコマンドで、LVM用に物理ボリュームを準備します。たとえば、/dev/drbd_r0デバイスでは、コマンドは次のようになります。
root #pvcreate/dev/drbd_r0
クラスタ対応のボリュームグループを作成します。
root #vgcreate--clustered y myclusterfs /dev/drbd_r0
必要に応じて、論理ボリュームを作成します。論理ボリュームのサイズは変更できます。たとえば、次のコマンドで、4GBの論理ボリュームを作成します。
root #lvcreate--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です。