documentation.suse.com / SUSE Linux Enterprise High Availabilityのドキュメント / 管理ガイド / ストレージとデータレプリケーション / GFS2
適用項目 SUSE Linux Enterprise High Availability 15 SP7

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

UUIDlabellockprotolocktableなどのGFS2ファイルシステムパラメータを表示および操作できます。

26.2 GFS2サービスとSTONITHリソースの設定

GFS2ボリュームを作成する前に、DLMおよびSTONITHリソースを設定する必要があります。

手順 26.1: STONITHリソースの設定
注記
注記: 必要なSTONITHデバイス

フェンシングデバイスを設定する必要があります。STONITHなしでは、設定内に配置されたメカニズム(external/sbdなど)は失敗します。

  1. シェルを起動し、rootまたは同等のものとしてログインします。

  2. 手順17.3「SBDデバイスの初期化」で説明されるとおり、SBDパーティションを作成します。

  3. crm configureを実行します。

  4. フェンシングデバイスとしてexternal/sbdを設定します。

    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
        params pcmk_delay_max=30 meta target-role="Started"
  5. showで変更内容をレビューします。

  6. すべて正しければ、commitで変更を送信し、quitでcrmライブ設定を終了します。

DLMに対するリソースの設定の詳細については、24.2項 「DLMクラスタリソースの設定」を参照してください。

26.3 GFS2ボリュームの作成

26.2項 「GFS2サービスとSTONITHリソースの設定」で説明されているように、DLMをクラスタリソースとして設定したら、システムがGFS2を使用できるように設定し、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つのジャーナルが作成されます。

手順 26.2: GFS2ボリュームの作成とフォーマット

クラスタノードの1つだけで、次の手順を実行します。

  1. 端末ウィンドウを開いて、rootとしてログインします。

  2. クラスタがオンラインであることをコマンドcrm statusで確認します。

  3. 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ボリュームのマウント」を参照)。

手順 26.3: GFS2ボリュームの手動によるマウント
  1. 端末ウィンドウを開いて、rootとしてログインします。

  2. クラスタがオンラインであることをコマンドcrm statusで確認します。

  3. コマンドラインから、mountコマンドを使ってボリュームをマウントします。

警告
警告: 手動マウントによるGFS2デバイス

GFS2ファイルシステムをテスト目的で手動マウントした場合、そのファイルシステムは、いったんマウント解除してから、クラスタリソースで使用してください。

手順 26.4: クラスタマネージャによるGFS2ボリュームのマウント

High AvailabilityソフトウェアでGFS2ボリュームをマウントするには、クラスタ内でOCFファイルシステムのリソースを設定します。次の手順では、crmシェルを使用してクラスタリソースを設定します。リソースの設定には、Hawk2を使用することもできます。

  1. シェルを起動し、rootまたは同等のものとしてログインします。

  2. crm configureを実行します。

  3. 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"
  4. gfs2-1プリミティブを手順24.1「DLMのベースグループの設定」で作成したg-storageグループに追加します。

    crm(live)configure# modgroup g-storage add gfs2-1

    ベースグループの内部コロケーションおよび順序付けのため、gfs2-1リソースは、すでに実行中のdlmリソースも持つノード上でのみ開始できます。

  5. showで変更内容をレビューします。

  6. すべて正しければ、commitで変更を送信し、quitでcrmライブ設定を終了します。

26.5 OCFS2からGFS2への移行

OCFS2は、SUSE Linux Enterprise High Availability 15 SP7で廃止されました。将来のリリースではサポートされません。

注記
注記: GFS2ではreflinkはサポートされない

OCFS2とは異なり、GFS2はreflink機能をサポートしていません

この手順では、OCFS2からGFS2に移行する方法の1つを示します。g-storageグループの一部である単一のOCFS2ボリュームがあることを前提としています。

新しいブロックストレージを準備し、データをバックアップする手順は、特定のセットアップによって異なります。詳細が必要な場合は、関連するドキュメントを参照してください。

この手順は、クラスタノードの1つでのみ実行する必要があります。

警告
警告: この手順を最初にテストする

この手順は、運用環境で実行する前に、テスト環境で十分にテストしてください。

手順 26.5: OCFS2からGFS2への移行
  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/shared

    Filesystemの下に表示されるディスク名をメモしておきます。これは後で、移行が成功したかどうかを確認するのに役立ちます。

    注記
    注記: OCFS2のディスク使用量

    一部のOCFS2システムファイルは、ディスク容量をグローバルビットマップファイルに返すのではなく保持することがあります。そのため、実際のディスク使用量は、df -hの出力に表示される量よりも少なくなる可能性があります。

  2. クラスタのすべてのノードにGFS2パッケージをインストールします。次のコマンドを使用して、すべてのノードに対して一度に実行できます。

    # crm cluster run "zypper install -y gfs2-utils gfs2-kmp-default"
  3. mkfs.gfs2ユーティリティを使用して、GFS2ボリュームを作成およびフォーマットします。このコマンドの構文については、mkfs.gfs2マニュアルページを参照してください。

    ヒント
    ヒント: mkfs.ofs2mkfs.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です。

    クラスタノード間で共有されるデバイスには、常に安定したデバイス名を使用してください。

  4. クラスタを保守モードにします。

    # crm maintenance on
  5. OCFS2ボリュームのデータをバックアップします。

  6. crmシェルを対話式モードで開始します。

    # crm configure
  7. OCFS2リソースを削除します。

    crm(live)# delete ocfs2-1
  8. 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"
  9. GFS2プリミティブをg-storageグループに追加します。

    crm(live)# modgroup g-storage add gfs2-1
  10. showで変更内容をレビューします。

  11. すべて正しければ、commitで変更を送信し、quitでcrmライブ設定を終了します。

  12. クラスタの保守モードを解除します。

    # crm maintenance off
  13. クラスタの状態と、グループg-storageの詳細情報を確認します。

    # crm status detail

    グループにプリミティブリソースgfs2-1が含まれているはずです。

  14. マウントポイントでdf -hを実行して、ディスク名が変更されていることを確認します。

    # df -h /mnt/shared/
    Filesystem     Size  Used Avail Use% Mounted on
    /dev/sdc        10G  290M  9.8G   3% /mnt/shared

    出力に間違ったディスクが表示されている場合、新しいgfs2-1リソースが再起動中である可能性があります。少し待ってからコマンドを再度実行すると、この問題は自動的に解決します。

  15. バックアップからGFS2ボリュームにデータを復元します。

    注記
    注記: GFS2のディスク使用量

    データを復元した後でも、GFS2ボリュームはOCFS2ボリュームほど多くのディスク容量を使用しない場合があります。

  16. データが正しく表示されることを確認するには、マウントポイントの内容を確認します。次に例を示します。

    # ls -l /mnt/shared/

    このコマンドを他のノードで実行して、データが正しく共有されていることを確認することもできます。

  17. 必要に応じて、OCFS2ディスクを削除できます。

Documentation survey