23 クラスタマルチデバイス(Cluster MD) #
クラスタマルチデバイス(Cluster MD)は、クラスタ用のソフトウェアベースのRAIDストレージソリューションです。現在、Cluster MDでは、クラスタにRAID1ミラーリングの冗長性を提供しています。SUSE Linux Enterprise High Availability Extension 15 SP4では、テクノロジープレビューとしてRAID10が含まれています。RAID10を試したい場合は、関連するmdadm
コマンドでmirror
を10
に置き換えてください。この章では、Cluster MDの作成および使用方法を示します。
23.1 概念の概要 #
Cluster MDは、クラスタ環境内のRAID1の使用をサポートします。Cluster MDで使用されるディスクまたはデバイスは、各ノードからアクセスされます。Cluster MDの一方のデバイスに障害が発生した場合、実行時に他方のデバイスに置き換えることができ、同じ量の冗長性を提供するために再同期されます。Cluster MDでは、調整とメッセージングのためにCorosyncと分散ロックマネージャ(DLM)が必要です。
Cluster MDデバイスは、他の通常のMDデバイスのようにブート時に自動的に開始されません。クラスタ化されたデバイスはリソースエージェントを使用して開始し、DLMリソースが開始されていることを確認する必要があります。
23.2 クラスタ化されたMD RAIDデバイスの作成 #
Pacemakerを使用して実行中のクラスタ。
DLMのリソースエージェント(DLMの設定方法については、手順18.1「DLMのベースグループの設定」を参照してください)。
少なくても2つの共有ディスクデバイス。デバイス障害の場合は自動的にフェールオーバーするスペアとして追加のデバイスを使用できます。
インストールされたパッケージcluster-md-kmp-default。
クラスタの各ノードでDLMリソースが稼動していることを確認し、リソース状態を確認するには、次のコマンドを実行します。
root #
crm_resource
-r dlm -WCluster MDデバイスを作成します。
既存の通常のRAIDデバイスがない場合、次のコマンドを実行し、DLMリソースが稼動しているノードでCluster MDデバイスを作成します。
root #
mdadm
--create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=2 --level=mirror /dev/sda /dev/sdbCluster MDはバージョン1.2のメタデータでのみ動作します。このため、
--metadata
オプションを使用してバージョンを指定することが推奨されます。他の役立つオプションについては、mdadm
のマニュアルページを参照してください。/proc/mdstat
で再同期の進捗状況を監視します。既存の通常のRAIDがすでにある場合は、最初に既存のビットマップをクリアしてからクラスタ化されたビットマップを作成します。
root #
mdadm
--grow /dev/mdX --bitmap=noneroot #
mdadm
--grow /dev/mdX --bitmap=clusteredオプションで、自動フェールオーバーのためのスペアデバイスを使用してCluster MDデバイスを作成するには、1つのクラスタノード上で次のコマンドを実行します。
root #
mdadm
--create /dev/md0 --bitmap=clustered --raid-devices=2 \ --level=mirror --spare-devices=1 /dev/sda /dev/sdb /dev/sdc --metadata=1.2
UUIDおよび関連するmdパスを取得します。
root #
mdadm
--detail --scanこのUUIDはスーパーブロックに保存されているUUIDと一致する必要があります。UUIDの詳細については、
mdadm.conf
のマニュアルページを参照してください。/etc/mdadm.conf
を開いて、mdデバイス名とそのデバイス名に関連付けられているデバイスを追加します。前のステップのUUIDを使用します。DEVICE /dev/sda /dev/sdb ARRAY /dev/md0 UUID=1d70f103:49740ef1:af2afce5:fcf6a489
Csync2の設定ファイル
/etc/csync2/csync2.cfg
を開き、/etc/mdadm.conf
を追加します。group ha_group { # ... list of files pruned ... include /etc/mdadm.conf }
23.3 リソースエージェントの設定 #
CRMリソースを次のように設定します。
Raid1
プリミティブを作成します。crm(live)configure#
primitive
raider Raid1 \ params raidconf="/etc/mdadm.conf" raiddev=/dev/md0 \ force_clones=true \ op monitor timeout=20s interval=10 \ op start timeout=20s interval=0 \ op stop timeout=20s interval=0raider
リソースをDLM用に作成したストレージのベースグループに追加します。crm(live)configure#
modgroup
g-storage add raideradd
サブコマンドは、デフォルトで新しいグループメンバーを追加します。まだ実行されてない場合は、
g-storage
グループのクローンを作成して、すべてのノードで実行できるようにします。crm(live)configure#
clone
cl-storage g-storage \ meta interleave=true target-role=Startedshow
で変更内容をレビューします。すべて正しいと思われる場合は、
commit
で変更を送信します。
23.4 デバイスの追加 #
デバイスを既存のアクティブなCluster MDデバイスに追加するには、最初にそのデバイスが各ノード上で「表示可能」であることを、コマンドを実行して確認します(cat /proc/mdstat
)。デバイスが表示できない場合、コマンドは失敗します。
1つのクラスタノード上で次のコマンドを使用します。
root #
mdadm
--manage /dev/md0 --add /dev/sdc
追加された新しいデバイスの動作は、Cluster MDデバイスの状態によって異なります。
ミラーリングされたデバイスの1つのみがアクティブである場合、新しいデバイスはミラーリングされたデバイスの2番目のデバイスになり、回復処理が開始されます。
Cluster MDデバイスの両方のデバイスがアクティブな場合、新たに追加されたデバイスはスペアデバイスになります。
23.5 一時的に障害が発生したデバイスの再追加 #
多くの場合、障害は一時的なもので、単一ノードに限定されます。任意のノードでI/O処理中に障害が発生した場合、クラスタ全体のデバイスがfailedとマーク付けされます。
たとえば、あるノードでケーブル障害が発生した場合などに、このようになることがあります。問題を修正した後で、デバイスを再追加できます。新しいパーツを追加してデバイス全体を同期するのではなく、古いパーツのみが同期されます。
デバイスを再追加するには、1つのクラスタノード上で次のコマンドを実行します。
root #
mdadm
--manage /dev/md0 --re-add /dev/sdb
23.6 デバイスの削除 #
置き換えるために実行時にデバイスを削除する前に、次の操作を実行します。
/proc/mdstat
をイントロスペクトしてデバイスに障害が発生しているか確認します。デバイスの前にある(F)
を探します。1つのクラスタノード上で次のコマンドを実行して、デバイスに障害発生させます。
root #
mdadm
--manage /dev/md0 --fail /dev/sda1つのクラスタノード上で次のコマンドを実行して障害が発生したデバイスを削除します。
root #
mdadm
--manage /dev/md0 --remove /dev/sda
23.7 障害復旧サイトで通常のRAIDとしてCluster MDをアセンブルする障害復旧サイトで通常のRAIDとしてCluster MDのアセンブルする #
障害復旧の際には、障害復旧サイトのインフラストラクチャにPacemakerクラスタスタックがないにもかかわらず、アプリケーションが既存のCluster MDディスク上のデータまたはバックアップからデータにアクセスする必要があるという状況に直面する場合があります。
-U no-bitmap
オプションを指定して--assemble
操作を使用し、それに応じてRAIDディスクのメタデータを変更することで、Cluster MD RAIDを通常のRAIDに変換できます。
データ復旧サイトですべてのアレイをアセンブルする方法の例を以下に示します。
while read i; do NAME=`echo $i | sed 's/.*name=//'|awk '{print $1}'|sed 's/.*://'` UUID=`echo $i | sed 's/.*UUID=//'|awk '{print $1}'` mdadm -AR "/dev/md/$NAME" -u $UUID -U no-bitmap echo "NAME =" $NAME ", UUID =" $UUID ", assembled." done < <(mdadm -Es)