7 Oracle Cluster File Systemバージョン2の管理

警告:

Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。

できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。

この章では、Oracle Cluster File Systemバージョン2 (OCFS2)ファイル・システムを構成および使用する方法について説明します。

OCFS2について

Oracle Cluster File Systemバージョン2 (OCFS2)は、クラスタでの使用を目的とした、パフォーマンスに優れた可用性の高い共有ディスク型の汎用ファイル・システムです。OCFS2ボリュームは、クラスタ化されていないスタンドアロン・システムにもマウントできます。

ext4btrfsなどの代替ファイル・システムと比較して、ocfs2をローカルでマウントする利点はないように思われますが、OCFS2では、btrfsファイル・システムでcp --reflinkコマンドを使用する場合と同様に、reflinkコマンドを使用して個々のファイルのコピーオンライト・クローンを作成できます。通常、このようなクローンによって、VMイメージやLinuxコンテナなどの非常によく似たファイルの複数のコピーを格納する場合にディスク領域を節約できます。また、ローカルOCFS2ファイル・システムをマウントすると、後でそれを変換せずにクラスタ・ファイル・システムに移行できます。reflinkコマンドの使用時は、結果となるファイルシステムが元のファイルシステムのクローンのように動作することに注意してください。これは、それらのUUIDが同一だということです。reflinkを使用してクローンを作成するときは、tunefs.ocfs2コマンドを使用してUUIDを変更する必要があります。詳細は、ボリューム・パラメータの問合せおよび変更を参照してください。

OCFS2は、ローカル・ファイル・システムのセマンティクスを提供しているため、ほぼすべてのアプリケーションで使用できます。クラスタ対応のアプリケーションは、複数のクラスタ・ノードからのキャッシュ一貫性のあるパラレルI/Oを使用してクラスタ全体でアクティビティを調整することや、ノード障害の発生時に利用可能なファイル・システム機能を使用し、フェイルオーバーを実行して別のノードで稼働することができます。次に、OCFS2の典型的な使用事例を示します。
  • 仮想マシン・イメージへの共有アクセスをホストするOracle VM。

  • Linuxゲスト・マシンでファイル・システムを共有できるOracle VMおよびVirtualBox。

  • データベース・クラスタのOracle Real Application Cluster (RAC)。

  • ミドルウェア・クラスタのOracle E-Business Suite。

OCFS2には、エンタープライズ・レベルのコンピューティング環境でのデプロイメントに適した次のような多くの機能があります。

  • 停電またはシステム・クラッシュの発生時にファイル・システムの一貫性を確保する順序付きのライトバック・データ・ジャーナルのサポート。

  • 512バイトから4KBの範囲にわたるブロック・サイズと、4KBから1MBの範囲にわたるファイル・システム・クラスタ・サイズ(どちらも2の累乗単位で増分)。サポートされている最大ボリューム・サイズは16TBで、これは4KBのクラスタ・サイズに相当します。4PBもの巨大ボリューム・サイズも、クラスタ・サイズ1MBの場合は理論的に可能ですが、この上限値はテストされていません。

  • 大規模ファイルを効率的に格納できるエクステント・ベースの割当て。

  • 高いパフォーマンスと効率的な格納を目的とするスパース・ファイル、インライン・データ、未書込みエクステント、ホール・パンチング、reflinkおよび割当て予約の最適化された割当てサポート。

  • 大量のオブジェクトが含まれる場合でも、そのディレクトリに対する効率的なアクセスを可能にするディレクトリの索引付け。

  • 破損したinodeおよびディレクトリを検出するためのメタデータ・チェックサム。

  • 通常のファイル、ディレクトリ、シンボリック・リンクなどのファイル・システム・オブジェクトにname:valueペアを無制限にアタッチできる拡張属性。

  • 従来のファイル・アクセス権モデルに加えられたPOSIX ACLおよびSELinuxの拡張セキュリティ・サポート。

  • ユーザーおよびグループの割当て制限のサポート。

  • 32ビットと64ビットおよびリトル・エンディアン(x86、x86_64、ia64)とビッグ・エンディアン(ppc64)の各アーキテクチャが混在するノードの異機種間クラスタのサポート。

  • クラスタ・ノードからの同時アクセスを管理する分散ロック・マネージャ(DLM)付きの、簡単に構成できるカーネル内クラスタ・スタック(O2CB)。

  • バッファ型、直接、非同期、スプライスおよびメモリー・マップ型のI/Oのサポート。

  • ext3ファイル・システムと同様のパラメータを使用するツール・セット。

OCFS2の詳細は、https://oss.oracle.com/projects/ocfs2/documentation/を参照してください。

ローカルOCFS2ファイル・システムの作成

ローカルにマウントし、クラスタに関連付けないOCFS2ファイル・システムを作成するには、次のコマンドを使用します。

sudo mkfs.ocfs2 -M local --fs-features=local -N 1 [options] device
たとえば、ノード・スロットが1つでラベルがlocalvolのローカルにマウント可能なOCFS2ボリュームを/dev/sdc1に作成します。
sudo mkfs.ocfs2 -M local --fs-features=local -N 1 -L "localvol" /dev/sdc1

tunefs.ocfs2ユーティリティを使用して、ローカルOCFS2ファイル・システムをクラスタ使用に変換できます。次に例を示します。

sudo umount /dev/sdc1
sudo tunefs.ocfs2 -M cluster --fs-features=clusterinfo -N 8 /dev/sdc1

この例では、ノード・スロットの数も1から8に増やしているため、最大8個のノードによるファイル・システムをマウントが可能になります。

OCFS2のインストールおよび構成

この項では、OCFS2を使用するようにクラスタを設定する手順について説明します。

OCFS2のクラスタの準備

最高のパフォーマンスを得るには、クラスタ内の各ノードに2つ以上のネットワーク・インタフェースが存在する必要があります。1つのインタフェースは、パブリック・ネットワークに接続してシステムへの一般的なアクセスを可能にします。もう1つのインタフェースは、ノード間のプライベート通信に使用します(クラスタ・ノードによる共有リソースへのアクセスの調整方法および相互の状態の監視方法を確認するクラスタ・ハートビート)。これらのインタフェースは、ネットワーク・スイッチを介して接続する必要があります。クラスタの構成を続行する前に、すべてのネットワーク・インタフェースが構成され、稼働していることを確認してください。

2つのクラスタ・ハートビート構成を選択できます。

  • 共有デバイスごとのローカル・ハートビート・スレッド。このモードでは、ノードはOCFS2ボリュームのマウント時にハートビート・スレッドを開始し、ボリュームのマウント解除時にスレッドを停止します。これがデフォルトのハートビート・モードです。多くのOCFS2ボリュームをマウントするノードには、大きなCPUオーバーヘッドがかかります。これは、各マウントで、別々のハートビート・スレッドが必要なためです。マウント数が多いと、1つのマウントでのハートビートI/Oタイムアウトが原因で、ノードが自身をクラスタからフェンシングするリスクが高まります。

  • 特定の共有デバイスでのグローバル・ハートビート。OCFS2ボリュームがディスク・デバイス全体を占有しており、パーティションでない場合、そのOCFS2ボリュームをグローバル・ハートビート・デバイスとして構成できます。このモードでは、クラスタがオンラインになるとデバイスへのハートビートが開始し、クラスタがオフラインになるとハートビートが停止します。多くのOCFS2ボリュームをマウントするクラスタでは、このモードをお薦めします。グローバル・ハートビート・デバイスの半分以上でハートビートI/Oタイムアウトが発生した場合、ノードはクラスタから自身をフェンシングします。したがって、1つのデバイスの障害に対する冗長性を確保するために、少なくとも3つのグローバル・ハートビート・デバイスを構成する必要があります。

図7-1に、ネットワーク・スイッチを介してLANおよびネットワーク・ストレージ・サーバーに接続された4ノードのクラスタを示します。各ノードおよびストレージ・サーバーは、ローカル・クラスタ・ハートビートに使用するプライベート・ネットワークにもスイッチを介して接続されます。

図7-1- プライベート・ネットワークを使用したクラスタ構成


この図は、ネットワーク・スイッチを介してLANおよびネットワーク・ストレージ・サーバーに接続された4ノードのクラスタを示しています。各ノードおよびストレージ・サーバーは、クラスタ・ハートビートに使用するプライベート・ネットワークにもスイッチを介して接続されます。

プライベート・ネットワークを使用せずにOCFS2を構成および使用することもできますが、このような構成では、I/Oハートビートのタイムアウトが原因でクラスタからのノード・フェンシングが発生する可能性が高まります。

ファイアウォールの構成

プライベート・クラスタ通信のためにクラスタが使用するインタフェースでのアクセスを可能にするように、各ノードのファイアウォールを構成または無効化します。デフォルトでは、クラスタはポート7777を通じてTCPとUDPの両方を使用します。

着信TCP接続およびUDPデータグラムをポート7777で許可するには、次のコマンドを使用します。

sudo firewall-cmd --zone=zone --add-port=7777/tcp --add-port=7777/udp
sudo firewall-cmd --permanent --zone=zone --add-port=7777/tcp --add-port=7777/udp

クラスタ・ソフトウェアの構成

各ノードが同じバージョンのOCFS2ソフトウェアと互換バージョンのOracle Linux Unbreakable Enterprise Kernel (UEK)を実行しているのが理想的です。クラスタは、クラスタのローリング・アップデートの実行中などに、OCFS2とUEKソフトウェアのバージョンが混在していても実行可能です。最も低いバージョンのソフトウェアを実行しているクラスタ・ノードによって、使用可能な機能のセットが決定されます。

yumを使用して、各ノードに次のパッケージをインストールするか、それらのパッケージを同じバージョンにアップグレードします。
  • kernel-uek

  • ocfs2-tools

ノート:

グローバル・ハートビート機能を使用する場合、ocfs2-tools-1.8.0-11以降をインストールする必要があります。

クラスタ・スタックの構成ファイルの作成

構成ファイルを作成するには、o2cbコマンドまたはテキスト・エディタを使用します。

o2cbコマンドを使用してクラスタ・スタックを構成するには:
  1. 次のコマンドを使用してクラスタ定義を作成します。
    sudo o2cb add-cluster cluster_name
    たとえば、4つのノードが含まれるmyclusterというクラスタを定義するには、次のようにします。
    sudo o2cb add-cluster mycluster

    コマンドによって、構成ファイル/etc/ocfs2/cluster.confが作成されます(まだ存在していない場合)。

  2. ノードごとに、次のコマンドを使用してノードを定義します。
    sudo o2cb add-node cluster_name node_name --ip ip_address

    ノードの名前は、/etc/sysconfig/networkで構成されているシステムのHOSTNAMEの値と同じである必要があります。IPアドレスは、クラスタ内のプライベート通信のためにノードが使用するものです。

    たとえば、クラスタmycluster内でIPアドレスが10.1.0.100のnode0というノードを定義するには、次のようにします。
    sudo o2cb add-node mycluster node0 --ip 10.1.0.100
    OCFS2はIPv4アドレスのみをサポートすることに注意してください。
  3. クラスタでグローバル・ハートビート・デバイスを使用する場合、次のコマンドを使用します。
    sudo o2cb add-heartbeat cluster_name device1
    .
    .
    .
    sudo o2cb heartbeat-mode cluster_name global

    ノート:

    ディスク・デバイス全体を使用するようにグローバル・ハートビートを構成する必要があります。ディスク・パーティション上でグローバル・ハートビート・デバイスは構成できません。

    たとえば、/dev/sdd/dev/sdg、および/dev/sdjをグローバル・ハートビート・デバイスとして使用するには、次のコマンドを使用します。
    sudo o2cb add-heartbeat mycluster /dev/sdd
    sudo o2cb add-heartbeat mycluster /dev/sdg
    sudo o2cb add-heartbeat mycluster /dev/sdj
    sudo o2cb heartbeat-mode mycluster global
  4. クラスタ構成ファイル/etc/ocfs2/cluster.confをクラスタ内の各ノードにコピーします。

    ノート:

    クラスタ構成ファイルに追加した変更は、クラスタ・スタックを再起動するまで有効になりません。

次のサンプル構成ファイル/etc/ocfs2/cluster.confでは、ローカル・ハートビートを使用するmyclusterという4ノード・クラスタを定義しています。
node:
	name = node0
	cluster = mycluster
	number = 0
	ip_address = 10.1.0.100
	ip_port = 7777

node:
        name = node1
        cluster = mycluster
        number = 1
        ip_address = 10.1.0.101
        ip_port = 7777

node:
        name = node2
        cluster = mycluster
        number = 2
        ip_address = 10.1.0.102
        ip_port = 7777

node:
        name = node3
        cluster = mycluster
        number = 3
        ip_address = 10.1.0.103
        ip_port = 7777

cluster:
        name = mycluster
        heartbeat_mode = local
        node_count = 4
グローバル・ハートビートを使用するようにクラスタを構成する場合、グローバル・ハートビート・デバイス用のエントリもファイルに含める必要があります。
node:
        name = node0
        cluster = mycluster
        number = 0
        ip_address = 10.1.0.100
        ip_port = 7777

node:
        name = node1
        cluster = mycluster
        number = 1
        ip_address = 10.1.0.101
        ip_port = 7777

node:
        name = node2
        cluster = mycluster
        number = 2
        ip_address = 10.1.0.102
        ip_port = 7777

node:
        name = node3
        cluster = mycluster
        number = 3
        ip_address = 10.1.0.103
        ip_port = 7777

cluster:
        name = mycluster
        heartbeat_mode = global
        node_count = 4

heartbeat:
        cluster = mycluster
        region = 7DA5015346C245E6A41AA85E2E7EA3CF

heartbeat:
        cluster = mycluster
        region = 4F9FBB0D9B6341729F21A8891B9A05BD

heartbeat:
        cluster = mycluster
        region = B423C7EEE9FC426790FC411972C91CC3

ここでは、クラスタのハートビート・モードがglobalとして示されており、ハートビート領域がそのブロック・デバイスのUUIDによって表されています。

構成ファイルを手動で編集する場合、次のレイアウトを使用していることを確認します。
  • cluster:heartbeat:、およびnode:の各ヘッダーが最初の列に存在する必要があります。

  • 各パラメータ・エントリは、タブの空白1つ分インデントする必要があります。

  • クラスタ、ハートビート・デバイス、またはノードを定義する各セクションが空白行で区切られている必要があります。

クラスタ・スタックの構成

クラスタ・スタックを構成するには:
  1. クラスタの各ノードで次のコマンドを実行します。
    sudo /sbin/o2cb.init configure 
    次の表に、入力を要求される値を示します。
    プロンプト 説明

    Load O2CB driver on boot (y/n)

    ブート時にクラスタ・スタック・ドライバをロードするかどうか。デフォルトの応答はnです。

    Cluster stack backing O2CB

    クラスタ・スタック・サービスの名前。デフォルトおよび通常の応答はo2cbです。

    Cluster to start at boot (クリアするには"none"を入力)

    クラスタ構成ファイル/etc/ocfs2/cluster.confで定義したクラスタの名前を入力します。

    Specify heartbeat dead threshold (>=7)

    ノードが無反応であるとみなされる前に、応答なしで経過させる2秒単位のハートビートの数。入力する値を計算するには、必要なしきい値時間を2で割って1を加えます。たとえば、しきい値時間を120秒に設定するには、値61を入力します。デフォルト値は、60秒のしきい値時間に対応する31です。

    ノート:

    システムでマルチパス・ストレージを使用する場合、推奨値は61以上です。

    Specify network idle timeout in ms (>=5000)

    ネットワーク接続が無反応であるとみなされる前に、経過させるミリ秒数。デフォルト値は、30,000ミリ秒です。

    ノート:

    結合したネットワーク・インタフェースの場合、推奨値は30,000ミリ秒以上です。

    Specify network keepalive delay in ms (>=1000)

    別のノードにキープアライブ・パケットを送信する間隔のミリ秒単位の最大遅延。デフォルトおよび推奨値は2,000ミリ秒です。

    Specify network reconnect delay in ms (>=2000)

    ネットワーク接続が切断された場合に再接続を試行する間隔のミリ秒単位の最小遅延。デフォルトおよび推奨値は2,000ミリ秒です。

    クラスタ・スタックの設定を確認するには、/sbin/o2cb.init statusコマンドを入力します。
    sudo /sbin/o2cb.init status
    Driver for "configfs": Loaded
    Filesystem "configfs": Mounted
    Stack glue driver: Loaded
    Stack plugin "o2cb": Loaded
    Driver for "ocfs2_dlmfs": Loaded
    Filesystem "ocfs2_dlmfs": Mounted
    Checking O2CB cluster "mycluster": Online
      Heartbeat dead threshold: 61
      Network idle timeout: 30000
      Network keepalive delay: 2000
      Network reconnect delay: 2000
      Heartbeat mode: Local
    Checking O2CB heartbeat: Active

    この例では、クラスタはオンラインであり、ローカル・ハートビート・モードを使用しています。ボリュームが構成されていない場合、O2CBハートビートは、ActiveではなくNot activeとして示されます。

    次の例は、3つのグローバル・ハートビート・デバイスを使用するオンライン・クラスタのコマンド出力を示しています。

    # /sbin/o2cb.init status
    Driver for "configfs": Loaded
    Filesystem "configfs": Mounted
    Stack glue driver: Loaded
    Stack plugin "o2cb": Loaded
    Driver for "ocfs2_dlmfs": Loaded
    Filesystem "ocfs2_dlmfs": Mounted
    Checking O2CB cluster "mycluster": Online
      Heartbeat dead threshold: 61
      Network idle timeout: 30000
      Network keepalive delay: 2000
      Network reconnect delay: 2000
      Heartbeat mode: Global
    Checking O2CB heartbeat: Active
      7DA5015346C245E6A41AA85E2E7EA3CF /dev/sdd
      4F9FBB0D9B6341729F21A8891B9A05BD /dev/sdg
      B423C7EEE9FC426790FC411972C91CC3 /dev/sdj
  2. ネットワーキングが有効になった後、ブート時に開始するようにo2cbおよびocfs2サービスを構成します。
    sudo systemctl enable o2cb
    sudo systemctl enable ocfs2
    これらの設定によって、システムの起動時にノードでOCFS2ボリュームを自動的にマウントできます。

クラスタ操作のためのカーネルの構成

クラスタの適切な操作のため、次の表に示されているカーネル設定を構成する必要があります。
カーネル設定 説明

panic

パニック後、システムが自動的に自己リセットを行う前の秒数を指定します。

値が0の場合、システムはハングして、トラブルシューティングのためにパニックの詳細情報を収集できます。これはデフォルト値です。

自動リセットを有効にするには、0以外の値を設定します。メモリー・イメージ(vmcore)が必要な場合、Kdumpがこのイメージを作成するのに十分な時間を確保します。推奨値は30秒ですが、大規模システムの場合はより長い時間が必要です。

panic_on_oops

カーネルoopsが発生した場合にシステムでパニックを起こすように指定します。クラスタ操作に必要とされるカーネル・スレッドがクラッシュした場合、システムは自己リセットを行う必要があります。それ以外の場合、他のノードはあるノードの応答が遅れているのか、応答できないのかを区別できず、その結果クラスタ操作がハングする可能性があります。

各ノードで、次のコマンドを入力してpanicおよびpanic_on_oopsの推奨値を設定します。
sudo sysctl kernel.panic=30
sudo sysctl kernel.panic_on_oops=1
再起動後も変更内容を維持するには、次のエントリを/etc/sysctl.confファイルに追加します。
# Define panic and panic_on_oops for cluster operation
kernel.panic=30
kernel.panic_on_oops=1

クラスタ・スタックの起動および停止

次のリストに、クラスタ・スタックに対して様々な操作を実行する場合に使用できるコマンドを示します。

  • /sbin/o2cb.init status: クラスタ・スタックのステータスを確認します。

  • /sbin/o2cb.init online: クラスタ・スタックを起動します。

  • /sbin/o2cb.init offline: クラスタ・スタックを停止します。

  • /sbin/o2cb.init unload: クラスタ・スタックをアンロードします。

OCFS2ボリュームの作成

mkfs.ocfs2コマンドを使用して、デバイスにOCFS2ボリュームを作成できます。ボリュームにラベルを付け、ラベルを指定してマウントする場合、デバイスはパーティションに対応している必要があります。ラベルを指定してパーティション化されていないディスク・デバイスをマウントすることはできません。次の表に、OCFS2ボリュームの作成時に使用できる最も有益なオプションを示します。
コマンド・オプション 説明

-bblock-size

--block-sizeblock-size

ファイル・システムを対象とするI/Oトランザクションの単位サイズと、inodeおよびエクステント・ブロックのサイズを指定します。サポートされるブロック・サイズは、512 (512バイト)、1K、2Kおよび4Kです。デフォルトおよび推奨ブロック・サイズは、4K (4KB)です。

-Ccluster-size

--cluster-sizecluster-size

ファイル・データを割り当てるために使用する領域の単位サイズを指定します。サポートされるクラスタ・サイズは、4K、8K、16K、32K、64K、128K、256K、512Kおよび1M (1MB)です。デフォルトのクラスタ・サイズは、4K (4KB)です。

--fs-feature-level=feature-level

ファイル・システム機能のセットを選択できます。
default

スパース・ファイル、未書込みエクステントおよびインライン・データの各機能のサポートを有効にします。

max-compat

OCFS2の古いバージョンによって認識される機能のみを有効にします。

max-features

OCFS2によって現在サポートされているすべての機能を有効にします。

--fs_features=feature

スパース・ファイル、未書込みエクステント、バックアップ・スーパーブロックのサポートなどの個々の機能を有効化または無効化できます。詳細は、mkfs.ocfs2(8)マニュアル・ページを参照してください。

-Jsize=journal-size

--journal-optionssize=journal-size

先行書込みジャーナルのサイズを指定します。指定されていない場合、サイズは-Tオプションに指定するファイル・システムの用途タイプから決定され、それ以外の場合はボリューム・サイズから決定されます。ジャーナルのデフォルト・サイズは、datafilesの場合は64M (64MB)、mailの場合は256M (256MB)およびvmstoreの場合は128M (128MB)です。

-Lvolume-label

--labelvolume-label

異なるクラスタ・ノードで簡単に識別できるわかりやすいボリュームの名前を指定します。

-Nnumber

--node-slotsnumber

ボリュームに同時にアクセスできるノードの最大数を指定します(これは、ファイル・システム・ジャーナルなどのシステム・ファイルではノード・スロットの数によって制限されます)。最高のパフォーマンスを得るには、ノード・スロットの数をノード数の2倍以上に設定します。後でノード・スロットの数を増加すると、ジャーナルはディスク・プラッタの外縁部に隣接して配置されなくなるため、パフォーマンスが低下する可能性があります。

-Tfile-system-usage-type

ファイル・システムの用途タイプを指定します。
datafiles

データベース・ファイルは、通常、数はわずかで、完全に割り当てられ、比較的大きいサイズです。このようなファイルでは、メタデータの変更はほとんど必要なく、大規模なジャーナルを保持する利点はありません。

mail

メール・サーバー・ファイルは、通常、数が多く、比較的小さいサイズです。このようなファイルでは、メタデータの変更が多く、大規模なジャーナルを保持する利点があります。

vmstore

仮想マシン・イメージ・ファイルは、通常、数はわずかで、まばらに割り当てられ、比較的大きいサイズです。このようなファイルでは、メタデータの変更数は中程度であり、中規模のサイズのジャーナルが必要です。

たとえば、数GB未満のファイル・システムでの一般的な使用であれば、すべてのデフォルト設定を使用して、myvolというラベル付きで/dev/sdc1上でOCFS2ボリュームを作成します。デフォルト値は4KBブロック、クラスタ・サイズ、8ノード・スロット、256MBジャーナルで、デフォルトのファイル・システム機能をサポートしています。
sudo mkfs.ocfs2 -L "myvol" /dev/sdc1
データベース・ファイルで使用するため、dbvolというラベル付きで/dev/sdd2上にOCFS2ボリュームを作成します。この場合、クラスタ・サイズは128KBに、ジャーナル・サイズは32MBに設定されます。
sudo mkfs.ocfs2 -L "dbvol" -T datafiles /dev/sdd2
16KBのクラスタ・サイズ、128MBのジャーナル、16のノード・スロットおよびrefcountツリーを除くすべての機能に対応するサポートを使用して、/dev/sde1上にOCFS2ボリュームを作成します。
sudo mkfs.ocfs2 -C 16K -J size=128M -N 16 --fs-feature-level=max-features --fs-features=norefcount /dev/sde1

ノート:

LVM論理ボリュームにOCFS2ボリュームを作成しないでください。LVMはクラスタ対応ではありません。

作成後にOCFS2ボリュームのブロックおよびクラスタ・サイズを変更することはできません。tunefs.ocfs2コマンドを使用すると、一定の制限付きでファイル・システムの他の設定を変更できます。詳細は、tunefs.ocfs2(8)マニュアル・ページを参照してください。

ボリュームでデータベース・ファイルを格納する場合、データベースのブロック・サイズより小さいクラスタ・サイズを指定しないでください。

ファイル・システムの大きさが数GBを超える場合、デフォルトのクラスタ・サイズ4KBでは不適切です。次の表に、様々なファイル・システム・サイズ範囲に推奨される最小クラスタ・サイズ設定を示します。

ファイル・システム・サイズ 推奨される最小クラスタ・サイズ

1GB - 10GB

8K

10GB - 100GB

16K

100GB - 1TB

32K

1TB - 10TB

64K

10TB - 16TB

128K

OCFS2ボリュームのマウント

次の例に示すとおり、ネットワーキングが開始した後のブート時にシステムでOCFS2ボリュームをマウントし、ネットワーキングが停止する前にファイル・システムをアンマウントする場合、/etc/fstab_netdevオプションを指定します。
myocfs2vol  /dbvol1  ocfs2     _netdev,defaults  0 0

ノート:

ネットワーキングの開始後にo2cbおよびocfs2サービスを開始するように有効化していない場合、ファイル・システムはマウントされません。クラスタ・スタックの構成を参照してください。

ボリューム・パラメータの問合せおよび変更

tunefs.ocfs2コマンドを使用して、ボリューム・パラメータの問合せおよび変更できます。たとえば、ボリュームのラベル、UUID、およびノード・スロット数を確認するには、次のコマンドを使用します。

sudo tunefs.ocfs2 -Q "Label = %V\nUUID = %U\nNumSlots =%N\n" /dev/sdb
Label = myvol
UUID = CBB8D5E0C169497C8B52A0FD555C7A3E
NumSlots = 4

ボリュームの新しいUUIDを生成します。

sudo tunefs.ocfs2 -U /dev/sda
sudo tunefs.ocfs2 -Q "Label = %V\nUUID = %U\nNumSlots =%N\n" /dev/sdb
Label = myvol
UUID = 48E56A2BBAB34A9EB1BE832B3C36AB5C
NumSlots = 4

OCFS2のトラブルシューティング

次の項では、OCFS2で発生する問題を調査するために使用できるいくつかの方法について説明します。

デバッグ用の推奨ツール

oopsトレースを取得する場合、ノードでnetconsoleを設定することをお薦めします。

ノード間のDLMのネットワーク・トラフィックを取得する場合、tcpdumpを使用できます。たとえば、プライベート・ネットワーク・インタフェースem2のポート7777でTCPトラフィックを取得するには、次のようなコマンドを使用します。
sudo tcpdump -i em2 -C 10 -W 15 -s 10000 -Sw /tmp/`hostname -s`_tcpdump.log -ttt 'port 7777' &

ext3ファイル・システムのdebugfsコマンドに動作が似ているdebugfs.ocfs2コマンドを使用して、OCFS2ドライバのイベントのトレース、ロック・ステータスの決定、ディクショナリ構造の再帰的検索、inodeの調査などを行うことができます。

詳細は、debugfs.ocfs2(8)マニュアル・ページを参照してください。

o2imageコマンドでは、OCFS2ファイル・システムのメタデータ(inode、ファイル名およびディレクトリ名の情報を含む)を別のファイル・システムのイメージ・ファイルに保存できます。イメージ・ファイルはメタデータのみを格納するため、元のファイル・システムよりずっと小さくなります。debugfs.ocfs2を使用してイメージ・ファイルを開き、ファイル・システムのレイアウトを分析してファイル・システムの破損またはパフォーマンス問題の原因を特定できます。

たとえば、次のコマンドによって、デバイス/dev/sda2上のOCFS2ファイル・システムからイメージ/tmp/sda2.imgが作成されます。

sudo o2image /dev/sda2 /tmp/sda2.img

詳細は、o2image(8)マニュアル・ページを参照してください。

debugfsファイル・システムのマウント

OCFS2では、debugfsファイル・システムを使用して、ユーザー領域からそのカーネル内状態の情報へのアクセスを可能にしています。debugfsファイル・システムをマウントして、debugfs.ocfs2コマンドを使用できるようにする必要があります。

debugfsファイル・システムをマウントするには、次の行を/etc/fstabに追加します。

debugfs    /sys/kernel/debug      debugfs  defaults  0 0

次に、mount -aコマンドを実行します。

OCFS2トレースの構成

次の表に、OCFS2の問題をトレースする場合に役立ついくつかのコマンドを示します。
コマンド 説明

debugfs.ocfs2 -l

すべてのトレース・ビットとそれらのステータスをリストします。

debugfs.ocfs2 -l SUPER allow

スーパーブロックのトレースを有効にします。

debugfs.ocfs2 -l SUPER off

スーパーブロックのトレースを無効にします。

debugfs.ocfs2 -l SUPER deny

別のトレース・モード設定によって暗黙的に有効化されていても、スーパーブロックのトレースを禁止します。

debugfs.ocfs2 -l HEARTBEAT \

ENTRY EXIT allow

ハートビート・トレースを有効にします。

debugfs.ocfs2 -l HEARTBEAT off \

ENTRY EXIT deny

ハートビート・トレースを無効にします。ENTRYおよびEXITは、すべてのトレース・パスに存在するため、denyに設定されます。

debugfs.ocfs2 -l ENTRY EXIT \

NAMEI INODE allow

ファイル・システムのトレースを有効にします。

debugfs.ocfs2 -l ENTRY EXIT \

deny NAMEI INODE allow

ファイル・システムのトレースを無効にします。

debugfs.ocfs2 -l ENTRY EXIT \

DLM DLM_THREAD allow

DLMのトレースを有効にします。

debugfs.ocfs2 -l ENTRY EXIT \

deny DLM DLM_THREAD allow

DLMのトレースを無効にします。

トレースを取得する方法の1つは、トレースを有効にしてしばらくの間スリープし、その後トレースを無効にすることです。次の例に示すとおり、不要な出力の表示を避けるには、終了後にトレース・ビットをデフォルト設定にリセットする必要があります。

sudo debugfs.ocfs2 -l ENTRY EXIT NAMEI INODE allow && sleep 10 && debugfs.ocfs2 -l ENTRY EXIT deny NAMEI INODE off

表示される情報量を制限するには、問題の理解に関係すると思われるトレース・ビットのみを有効にします。

mvなどの特定のファイル・システム・コマンドがエラーの原因であると思われる場合、次の例のコマンドを使用するとエラーのトレースに役立ちます。

sudo debugfs.ocfs2 -l ENTRY EXIT NAMEI INODE allow
sudo mv source destination & CMD_PID=$(jobs -p %-)
echo $CMD_PID
sudo debugfs.ocfs2 -l ENTRY EXIT deny NAMEI INODE off

トレースは、マウントされたすべてのOCFS2ボリュームに対して有効になるため、適切なプロセスIDを把握することが、トレースの解釈に役立ちます。

詳細は、debugfs.ocfs2(8)マニュアル・ページを参照してください。

ファイル・システム・ロックのデバッグ

OCFS2ボリュームがハングした場合、次のステップを使用すると、ビジー状態にあるロックと、ロックを保持している可能性の高いプロセスを特定するのに役立ちます。
  1. debugファイル・システムをマウントします。
    sudo mount -t debugfs debugfs /sys/kernel/debug
  2. ファイル・システム・デバイス(この例では/dev/sdx1)のロック・ステータスをダンプします。
    echo "fs_locks" | debugfs.ocfs2 /dev/sdx1 >/tmp/fslocks 62
    Lockres: M00000000000006672078b84822 Mode: Protected Read
    Flags: Initialized Attached
    RO Holders: 0 EX Holders: 0
    Pending Action: None Pending Unlock Action: None
    Requested Mode: Protected Read Blocking Mode: Invalid

    Lockresフィールドは、DLMによって使用されるロック名です。ロック名は、ロック・タイプ識別子、inode番号および世代番号の組合せです。次のリストに、使用可能なロック・タイプを示します。

    • D: ファイル・データ。

    • M: メタデータ

    • R: 名前変更

    • S: スーパーブロック

    • W: 読取り/書込み

  3. Lockres値を使用して、ロックのinode番号および世代番号を取得します。
    sudo echo "stat <M00000000000006672078b84822>" | debugfs.ocfs2 -n /dev/sdx1
    Inode: 419616   Mode: 0666   Generation: 2025343010 (0x78b84822)
    ... 
  4. 次のコマンドを使用して、inode番号が関連付けられたファイル・システム・オブジェクトを特定します。
    echo "locate <419616>" | debugfs.ocfs2 -n /dev/sdx1
    419616 /linux-2.6.15/arch/i386/kernel/semaphore.c
  5. ファイル・システム・オブジェクトに関連付けられたロック名を取得します。
    echo "encode /linux-2.6.15/arch/i386/kernel/semaphore.c" | debugfs.ocfs2 -n /dev/sdx1
    M00000000000006672078b84822 D00000000000006672078b84822 W00000000000006672078b84822  

    この例では、ファイル・システム・オブジェクトにメタデータ・ロック、ファイル・データ・ロックおよび読取り/書込みロックが関連付けられています。

  6. ファイル・システムのDLMドメインを特定します。
    echo "stats" | debugfs.ocfs2 -n /dev/sdX1 | grep UUID: | while read a b ; do echo $b ; done
    82DA8137A49A47E4B187F74E09FBBB4B  
  7. 次のコマンドでDLMドメインおよびロック名の値を使用して、DLMのデバッグを有効にします。
    echo R 82DA8137A49A47E4B187F74E09FBBB4B M00000000000006672078b84822 > /proc/fs/ocfs2_dlm/debug
  8. デバッグ・メッセージを調査します。
    sudo dmesg | tail
    struct dlm_ctxt: 82DA8137A49A47E4B187F74E09FBBB4B, node=3, key=965960985
      lockres: M00000000000006672078b84822, owner=1, state=0 last used: 0, 
      on purge list: no granted queue:
          type=3, conv=-1, node=3, cookie=11673330234144325711, ast=(empty=y,pend=n), 
          bast=(empty=y,pend=n) 
        converting queue:
        blocked queue:  

    DLMでは、ロックなし(type=0)、保護読取り(type=3)および排他(type=5)という3つのロック・モードがサポートされます。この例では、ロックはノード1 (owner=1)によって所有され、ノード3にはファイル・システム・リソースに対する保護読取りロックが付与されています。

  9. 次のコマンドを実行し、STAT列のDフラグによって示される中断不可能なスリープ状態にあるプロセスを検索します。
    ps -e -o pid,stat,comm,wchan=WIDE-WCHAN-COLUMN

    中断不可能なスリープ状態にある1つ以上のプロセスが、他のノードでのハングに対応します。

プロセスがI/Oの完了を待機している場合、ブロック・デバイス・レイヤーからドライバを通じてディスク・アレイに至るI/Oサブシステム内のすべての場所で問題が発生する可能性があります。ハングがユーザー・ロック(flock())に影響する場合、問題はアプリケーションに存在する可能性があります。可能であれば、ロックの所有者を強制終了します。ハングの原因がメモリーの不足またはメモリーの断片化にある場合、重要でないプロセスを強制終了してメモリーを解放できます。最も迅速な解決策は、ロックを保持しているノードをリセットすることです。DLMリカバリ・プロセスは、無反応のノードが所有していたすべてのロックをクリアするため、クラスタは動作を継続できます。

フェンシングされたノードの動作の構成

マウントされたOCFS2ボリュームを持つノードが、今後他のクラスタ・ノードと通信することはないと判断されると、そのノードはフェンシングというプロセスでクラスタから自身を削除します。フェンシングによって、他のノードが、フェンシングされたノードが保持するリソースにアクセスしようとしてハングすることを回避できます。デフォルトでは、フェンシングされたノードは、パニックにならずに再起動するため、クラスタにすばやく再参加できます状況によっては、フェンシングされたノードを再起動するかわりにパニックを起こすことが必要な場合があります。たとえば、netconsoleを使用して、oopsスタック・トレースを表示するか、再起動が高い頻度で発生する原因を診断できます。次回フェンシングが発生したときにパニックを起こすようにノードを構成するには、クラスタの起動後にノードで次のコマンドを実行します。
echo panic > /sys/kernel/config/cluster/cluster_name/fence_method

前のコマンドのcluster_nameは、クラスタの名前です。システムを再起動するたびに値を設定するには、この行を/etc/rc.localファイルに追加します。デフォルトの動作に戻すには、panicではなく値resetを使用します。

OCFS2の使用事例

次の項では、OCFS2の典型的な使用事例について説明します。

ロード・バランシング

OCFS2ノードを使用して、クライアント・システム間でリソースを共有できます。たとえば、ノードでは、SambaまたはNFSを使用して共有ファイル・システムをエクスポートできます。ノード間にサービス・リクエストを分散するには、ラウンドロビンDNSやネットワーク・ロード・バランサを使用するか、クライアントごとにどのノードを使用するかを指定します。

Oracle Real Application Cluster (RAC)

Oracle RACでは、独自のクラスタ・スタックであるクラスタ同期化サービス(CSS)を使用します。O2CBはCSSと組み合せて使用できますが、各スタックはタイムアウト、ノードおよび他のクラスタ設定に関して個別に構成できます。OCFS2を使用して投票ディスク・ファイルおよびOracle Cluster Registry (OCR)をホストすることはできますが、各ノードのローカル・ファイル・システムに存在する必要のあるグリッド・インフラストラクチャ・ユーザーのホームはホストできません。

CSSとO2CBは、両方とも定数の計算でタイ・ブレーカとして最も小さいノード番号を使用するため、ノード番号が両方のクラスタで同じであることを確認してください。必要に応じて、O2CB構成ファイル/etc/ocfs2/cluster.confを編集してノード番号に一貫性を確保し、すべてのノードでこのファイルを更新します。クラスタを再起動すると変更が有効になります。

Oracleデータベース

Oracleデータファイル、制御ファイル、REDOログ、投票ディスクおよびOCRをホストするボリュームをマウントする場合、noatimeオプションを指定します。noatimeオプションによって、inodeのアクセス時間の不要な更新が無効になります。

nointrマウント・オプションを指定すると、シグナルによる進行中のI/Oトランザクションへの割込みを防ぐことができます。

デフォルトでは、init.oraパラメータのfilesystemio_optionsによって、Oracleデータファイル、制御ファイルおよびREDOログへの直接I/Oを実行するようにデータベースに指示します。また、投票ディスクおよびOCRを含むボリュームに対してdatavolumeマウント・オプションを指定する必要もあります。このオプションは、Oracleユーザーのホーム・ディレクトリまたはOracle E-Business Suiteをホストするボリュームには指定しないでください。

データベース・ブロックがディスク全体に断片化されることを避けるには、ファイル・システム・クラスタ・サイズが少なくともデータベース・ブロック・サイズ(通常は8KB)と同じ大きさである必要があります。mkfs.ocfs2コマンドにファイル・システムの用途タイプをdatafilesとして指定すると、ファイル・システム・クラスタ・サイズは128KBに設定されます。

Oracleデータファイルにデータを同時にストリーミングすることによって複数のノードでスループットを最大化するため、OCFS2はPOSIX標準とは異なっており、非拡張型の直接I/O書込みを実行する場合にディスクの変更時刻(mtime)を更新しません。mtimeの値はメモリー内で更新されますが、OCFS2は、アプリケーションがファイルを拡張するか切り捨てないかぎり、またはtouchコマンドなどを使用してファイル・メタデータを変更する操作を実行しないかぎり、ディスクに値を書き込みません。この動作の結果として、同じファイルについて異なるタイムスタンプをレポートする異なるノードが出現します。次のコマンドを使用して、ファイルのディスク上のタイムスタンプを表示できます。
sudo debugfs.ocfs2 -R "stat /file_path" device | grep "mtime:"