26 GFS2 #
Global File System 2 (GFS2)は、Linuxコンピュータクラスタ用の共有ディスクファイルシステムです。GFS2により、すべてのノードが同じ共有ブロックストレージに直接同時にアクセスすることができます。GFS2には、非接続運用モードがなく、クライアント役割やサーバ役割もありません。GFS2クラスタのすべてのノードがピアとして機能します。GFS2は、クラスタノードを32台までサポートします。クラスタでGFS2を使用する場合は、ハードウェアが共有ストレージへのアクセスを許可し、ロックマネージャがストレージへのアクセスを制御する必要があります。
26.1 GFS2パッケージおよび管理ユーティリティ #
GFS2を使用するには、gfs2-utilsと、ご使用のカーネルに適合するgfs2-kmp-*パッケージが、クラスタの各ノードにインストールされていることを確認してください。
gfs2-utilsパッケージには、次に示すGFS2ボリュームの管理ユーティリティがあります。構文については、各マニュアルページを参照してください。
- fsck.gfs2
ファイルシステムにエラーがないかをチェックし、必要に応じてエラーを修復します。
- gfs2_jadd
GFS2ファイルシステムにジャーナルを追加します。
- gfs2_grow
GFS2ファイルシステムを拡張します。
- mkfs.gfs2
デバイス上にGFS2ファイルシステムを作成します。通常は、共有デバイスまたはパーティションになります。
- tunegfs2
UUID
、label
、lockproto
、locktable
などのGFS2ファイルシステムパラメータを表示および操作できます。
26.2 GFS2サービスとSTONITHリソースの設定 #
GFS2ボリュームを作成する前に、DLMおよびSTONITHリソースを設定する必要があります。
フェンシングデバイスを設定する必要があります。STONITHなしでは、設定内に配置されたメカニズム(external/sbd
など)は失敗します。
シェルを起動し、
root
または同等のものとしてログインします。手順17.3「SBDデバイスの初期化」で説明されるとおり、SBDパーティションを作成します。
crm configure
を実行します。フェンシングデバイスとして
external/sbd
を設定します。crm(live)configure#
primitive sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30 meta target-role="Started"
show
で変更内容をレビューします。すべて正しければ、
commit
で変更を送信し、quit
でcrmライブ設定を終了します。
DLMに対するリソースの設定の詳細については、24.2項 「DLMクラスタリソースの設定」を参照してください。
26.3 GFS2ボリュームの作成 #
26.2項 「GFS2サービスとSTONITHリソースの設定」で説明されているように、DLMをクラスタリソースとして設定したら、システムがGFS2を使用できるように設定し、GFS2ボリュームを作成します。
一般に、アプリケーションファイルとデータファイルは、異なるGFS2ボリュームに保存することをお勧めします。アプリケーションボリュームとデータボリュームのマウント要件が異なる場合は、必ず、異なるボリュームに保存します。
作業を始める前に、GFS2ボリュームに使用するブロックデバイスを準備します。デバイスは空き領域のままにしてください。
次に、手順26.2「GFS2ボリュームの作成とフォーマット」で説明されているように、mkfs.gfs2
で、GFS2ボリュームを作成し、フォーマットします。そのコマンドの重要なパラメータを以下に示します。詳細情報とコマンド構文については、mkfs.gfs2
のマニュアルページを参照してください。
- ロックプロトコル名(
-p
) 使用するロッキングプロトコルの名前。使用可能なロッキングプロトコルはlock_dlm (共有ストレージ用)です。またはローカルファイルシステム(1ノードのみ)としてGFS2を使用している場合は、lock_nolockプロトコルを指定できます。このオプションを指定しない場合、lock_dlmプロトコルであるとみなされます。
- ロックテーブル名(
-t
) 使用しているロックモジュールに適切はロックテーブルフィールド。clustername:fsnameです。clustername値は、クラスタ設定ファイル
/etc/corosync/corosync.conf
の値と一致している必要があります。このクラスタのメンバーだけが、このファイルシステムの使用を許可されます。fsname値は、このGFS2ファイルシステムと作成された他のファイルシステムを区別するために使用される固有のファイルシステム名です(1~16文字)。- ジャーナル数(
-j
) 作成するgfs2_mkfs用のジャーナル数。ファイルシステムをマウントするマシンごとに少なくとも1つのジャーナルが必要です。このオプションを指定しない場合、1つのジャーナルが作成されます。
クラスタノードの1つだけで、次の手順を実行します。
端末ウィンドウを開いて、
root
としてログインします。クラスタがオンラインであることをコマンド
crm status
で確認します。mkfs.gfs2
ユーティリティを使用して、ボリュームを作成およびフォーマットします。このコマンドの構文については、mkfs.gfs2
マニュアルページを参照してください。たとえば、最大32台のクラスタノードをサポートする新しいGFS2ファイルシステムを作成するには、次のコマンドを使用します。
#
mkfs.gfs2 -t hacluster:mygfs2 -p lock_dlm -j 32 /dev/disk/by-id/DEVICE_ID
hacluster
名は、ファイル/etc/corosync/corosync.conf
(これはデフォルトです)のエントリcluster_name
に関係します。常に固定デバイス名(例:
/dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg
)を使用します。
26.4 GFS2ボリュームのマウント #
GFS2ボリュームは、手動でマウントするか、クラスタマネージャでマウントできます(手順26.4「クラスタマネージャによるGFS2ボリュームのマウント」を参照)。
端末ウィンドウを開いて、
root
としてログインします。クラスタがオンラインであることをコマンド
crm status
で確認します。コマンドラインから、
mount
コマンドを使ってボリュームをマウントします。
GFS2ファイルシステムをテスト目的で手動マウントした場合、そのファイルシステムは、いったんマウント解除してから、クラスタリソースで使用してください。
High AvailabilityソフトウェアでGFS2ボリュームをマウントするには、クラスタ内でOCFファイルシステムのリソースを設定します。次の手順では、crm
シェルを使用してクラスタリソースを設定します。リソースの設定には、Hawk2を使用することもできます。
シェルを起動し、
root
または同等のものとしてログインします。crm configure
を実行します。GFS2ファイルシステムをクラスタ内のすべてのノードにマウントするように、Pacemakerを設定します。
crm(live)configure#
primitive gfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="gfs2" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Started"
gfs2-1
プリミティブを手順24.1「DLMのベースグループの設定」で作成したg-storage
グループに追加します。crm(live)configure#
modgroup g-storage add gfs2-1
ベースグループの内部コロケーションおよび順序付けのため、
gfs2-1
リソースは、すでに実行中のdlm
リソースも持つノード上でのみ開始できます。show
で変更内容をレビューします。すべて正しければ、
commit
で変更を送信し、quit
でcrmライブ設定を終了します。
26.5 OCFS2からGFS2への移行 #
OCFS2は、SUSE Linux Enterprise High Availability 15 SP7で廃止されました。将来のリリースではサポートされません。
OCFS2とは異なり、GFS2はreflink機能をサポートしていません。
この手順では、OCFS2からGFS2に移行する方法の1つを示します。g-storage
グループの一部である単一のOCFS2ボリュームがあることを前提としています。
新しいブロックストレージを準備し、データをバックアップする手順は、特定のセットアップによって異なります。詳細が必要な場合は、関連するドキュメントを参照してください。
この手順は、クラスタノードの1つでのみ実行する必要があります。
この手順は、運用環境で実行する前に、テスト環境で十分にテストしてください。
GFS2ボリューム用のブロックデバイスを準備します。
必要なディスク容量を確認するには、OCFS2のマウントポイントで
df -h
を実行します。次に例を示します。#
df -h /mnt/shared/
Filesystem Size Used Avail Use% Mounted on /dev/sdb 10G 2.3G 7.8G 23% /mnt/sharedFilesystem
の下に表示されるディスク名をメモしておきます。これは後で、移行が成功したかどうかを確認するのに役立ちます。注記: OCFS2のディスク使用量一部のOCFS2システムファイルは、ディスク容量をグローバルビットマップファイルに返すのではなく保持することがあります。そのため、実際のディスク使用量は、
df -h
の出力に表示される量よりも少なくなる可能性があります。クラスタのすべてのノードにGFS2パッケージをインストールします。次のコマンドを使用して、すべてのノードに対して一度に実行できます。
#
crm cluster run "zypper install -y gfs2-utils gfs2-kmp-default"
mkfs.gfs2
ユーティリティを使用して、GFS2ボリュームを作成およびフォーマットします。このコマンドの構文については、mkfs.gfs2
マニュアルページを参照してください。ヒント:mkfs.ofs2
とmkfs.gfs2
との主な相違点OCFS2では、
-C
でクラスタサイズを指定し、-b
でブロックサイズを指定します。GFS2でも、-b
でブロックサイズを指定しますが、クラスタサイズの設定がないため、-C
は使用しません。OCFS2では、
-N
でノードの数を指定します。GFS2では、-j
でノードの数を指定します。
たとえば、最大32台のクラスタノードをサポートする新しいGFS2ファイルシステムを作成するには、次のコマンドを使用します。
#
mkfs.gfs2 -t CLUSTERNAME:mygfs2 -p lock_dlm -j 32 /dev/disk/by-id/DEVICE_ID
CLUSTERNAME
は、ファイル/etc/corosync/corosync.conf
のエントリcluster_name
と同じである必要があります。 デフォルトはhacluster
です。クラスタノード間で共有されるデバイスには、常に安定したデバイス名を使用してください。
クラスタを保守モードにします。
#
crm maintenance on
OCFS2ボリュームのデータをバックアップします。
crmシェルを対話式モードで開始します。
#
crm configure
OCFS2リソースを削除します。
crm(live)#
delete ocfs2-1
OCFS2ファイルシステムに使用したものと同じマウントポイントを使用して、GFS2ファイルシステムをクラスタ内のすべてのノードにマウントします。
crm(live)#
primitive gfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="gfs2" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Started"
GFS2プリミティブを
g-storage
グループに追加します。crm(live)#
modgroup g-storage add gfs2-1
show
で変更内容をレビューします。すべて正しければ、
commit
で変更を送信し、quit
でcrmライブ設定を終了します。クラスタの保守モードを解除します。
#
crm maintenance off
クラスタの状態と、グループ
g-storage
の詳細情報を確認します。#
crm status detail
グループにプリミティブリソース
gfs2-1
が含まれているはずです。マウントポイントで
df -h
を実行して、ディスク名が変更されていることを確認します。#
df -h /mnt/shared/
Filesystem Size Used Avail Use% Mounted on /dev/sdc 10G 290M 9.8G 3% /mnt/shared出力に間違ったディスクが表示されている場合、新しい
gfs2-1
リソースが再起動中である可能性があります。少し待ってからコマンドを再度実行すると、この問題は自動的に解決します。バックアップからGFS2ボリュームにデータを復元します。
注記: GFS2のディスク使用量データを復元した後でも、GFS2ボリュームはOCFS2ボリュームほど多くのディスク容量を使用しない場合があります。
データが正しく表示されることを確認するには、マウントポイントの内容を確認します。次に例を示します。
#
ls -l /mnt/shared/
このコマンドを他のノードで実行して、データが正しく共有されていることを確認することもできます。
必要に応じて、OCFS2ディスクを削除できます。