21 OCFS2 #
OCFS 2 (Oracle Cluster File System 2)は、Linux 2.6以降のカーネルに完全に統合されている汎用ジャーナリングファイルシステムです。Oracle Cluster File System 2を利用すれば、アプリケーションバイナリファイル、データファイル、およびデータベースを、共有ストレージ中のデバイスに保管することができます。このファイルシステムには、クラスタ中のすべてのノードが同時に読み書きすることができます。ユーザスペース管理デーモンは、クローンリソースを介して管理され、HAスタック(特に、CorosyncおよびDLM (Distributed Lock Manager))との統合を実現します。
21.1 特長と利点 #
OCFS2は、以下のようなストレージソリューションに使用できます。
一般のアプリケーションとワークロード。
クラスタ中のXENイメージ。Xen仮想マシンと仮想サーバは、クラスタサーバによってマウントされたOCFS2ボリュームに保存できます。これによって、サーバ間でXen仮想マシンを素早く容易に移植できます。
LAMP (Linux、Apache、MySQL、およびPHP | Perl | Python)スタック。
OCFS2は、高パフォーマンスで対称的なパラレルクラスタファイルシステムとして、次の機能をサポートします。
アプリケーションのファイルを、クラスタ内のすべてのノードで使用できます。ユーザは、クラスタ中のOracle Cluster File System 2ボリュームに1回インストールするだけで構いません。
すべてのノードが、標準ファイルシステムインタフェースを介して、同時並行的に、ストレージに直接読み書きできるので、クラスタ全体に渡わたって実行されるアプリケーションの管理が容易になります。
ファイルアクセスがDLMを介して調整されます。ほとんどの場合、DLMによる制御は適切に機能しますが、アプリケーションの設計によっては、アプリケーションとDLMがファイルアクセスの調整で競合すると、スケーラビリティが制限されることがあります。
すべてのバックエンドストレージで、ストレージのバックアップ機能を利用することができます。共有アプリケーションファイルのイメージを簡単に作成することができるため、災害発生時でも素早くデータを復元することができます。
Oracle Cluster File System 2には、次の機能も用意されています。
メタデータのキャッシュ処理。
メタデータのジャーナル処理。
ノード間にまたがるファイルデータの整合性。
最大4KBのマルチブロックサイズ、最大1MBのクラスタサイズ、4PB(ペタバイト)の最大ボリュームサイズをサポートします。
32台までのクラスタノードをサポート。
データベースのパフォーマンスを向上する非同期、直接I/Oのサポート。
OCFS2は、SUSE Linux Enterprise High Availabilityによって提供される、pcmk (Pacemaker)スタックと併用する場合にのみ、SUSEによってサポートされます。o2cbスタックと組み合わせた場合、SUSEはOCFS2をサポートしません。
21.2 OCFS2のパッケージと管理ユーティリティ #
OCFS2カーネルモジュール(ocfs2
)は、SUSE Linux Enterprise High Availability 15 SP6に自動的にインストールされます。OCFS2を使用するには、ocfs2-toolsと、ご使用のカーネルに適合するocfs2-kmp-*パッケージが、クラスタの各ノードにインストールされていることを確認してください。
ocfs2-toolsパッケージには、次に示すOCFS2ボリュームの管理ユーティリティがあります。構文については、各マニュアルページを参照してください。
- debugfs.ocfs2
デバッグのために、OCFS2ファイルシステムの状態を調査します。
- defragfs.ocfs2
OCFS2ファイルシステムのフラグメンテーションを減らします。
- fsck.ocfs2
ファイルシステムにエラーがないかをチェックし、必要に応じてエラーを修復します。
- mkfs.ocfs2
デバイス上にOCFS2ファイルシステムを作成します。通常は、共有物理/論理ディスク上のパーティションに作成します。
- mounted.ocfs2
クラスタシステム上のすべてのOCFS2ボリュームを検出、表示します。OCFS2デバイスをマウントしているシステム上のすべてのノードを検出、表示するか、またはすべてのOCFS2デバイスを表示します。
- tunefs.ocfs2
ボリュームラベル、ノードスロット数、すべてのノードスロットのジャーナルサイズ、およびボリュームサイズなど、OCFS2ファイルのシステムパラメータを変更します。
21.3 OCFS2サービスとSTONITHリソースの設定 #
OCFS2ボリュームを作成する前に、DLMおよびSTONITHリソースをクラスタ内のサービスとして設定する必要があります。
次の手順では、crm
シェルを使用してクラスタリソースを設定します。21.6項 「Hawk2でのOCFS2リソースの設定」で説明されているように、リソースの設定にはHawk2を使用することもできます。
フェンシングデバイスを設定する必要があります。STONITHなしでは、設定内に配置されたメカニズム(external/sbd
など)は失敗します。
シェルを起動し、
root
または同等のものとしてログインします。手順13.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に対するリソースの設定の詳細については、20.2項 「DLMクラスタリソースの設定」を参照してください。
21.4 OCFS2ボリュームの作成 #
21.3項 「OCFS2サービスとSTONITHリソースの設定」で説明されているように、DLMクラスタリソースを設定したら、システムがOCFS2を使用できるように設定し、OCFs2ボリュームを作成します。
一般に、アプリケーションファイルとデータファイルは、異なるOCFS2ボリュームに保存することを推奨します。アプリケーションボリュームとデータボリュームのマウント要件が異なる場合は、必ず、異なるボリュームに保存します。
作業を始める前に、OCFS2ボリュームに使用するブロックデバイスを準備します。デバイスは空き領域のままにしてください。
次に、手順21.2「OCFS2ボリュームの作成とフォーマット」で説明されているように、mkfs.ocfs2
で、OCFS2ボリュームを作成し、フォーマットします。そのコマンドの重要なパラメータを以下に示します。詳細情報とコマンド構文については、mkfs.ocfs2
のマニュアルページを参照してください。
- ボリュームラベル (
-L
) 異なるノードへのマウント時に、正しく識別できるように、一意のわかりやすいボリューム名を指定します。ラベルを変更するには、
tunefs.ocfs2
ユーティリティを使用します。- クラスタサイズ (
-C
) ファイルに割り当てられる、データ保管領域の最小単位です。使用できるオプションと推奨事項については、
mkfs.ocfs2
のマニュアルページを参照してください。- ノードスロット数(
-N
) 同時にボリュームをマウントできる最大ノード数を指定します。各ノードについて、OCFS2はジャーナルなどの個別のシステムファイルを作成します。ボリュームにアクセスするノードに、リトルエンディアン形式のノード(AMD64/Intel 64など)とビッグエンディアン形式のノード(S/390xなど)が混在しても構いません。
ノード固有のファイルは、ローカルファイルと呼ばれます。ローカルファイルには、ノードスロット番号が付加されます。たとえば、
journal:0000
は、スロット番号0
に割り当てられたノードに属します。各ボリュームを同時にマウントすると予期されるノード数に従って、各ボリュームの作成時に、そのボリュームの最大ノードスロット数を設定します。
tunefs.ocfs2
ユーティリティを使用して、必要に応じてノードスロットの数を増やします。この値を減らすことはできません。1つのノードスロットは約100 MiBのディスク容量を使用します。-N
パラメータを指定しない場合、ノードスロット数はファイルシステムのサイズに基づいて決定されます。デフォルト値については、mkfs.ocfs2
のマニュアルページを参照してください。- ブロックサイズ (
-b
) ファイルシステムがアドレス可能な領域の最小単位を指定します。ブロックサイズは、ボリュームの作成時に指定します。使用できるオプションと推奨事項については、
mkfs.ocfs2
のマニュアルページを参照してください。- 特定機能のオン/オフ(
--fs-features
) カンマで区切った機能フラグリストを指定できます。
mkfs.ocfs2
は、そのリストに従って、それらの機能セットを含むファイルシステムを作成しようとします。機能をオンにするには、その機能をリストに入れます。機能をオフにするには、その名前の前にno
を付けます。使用できるすべてのフラグの概要については、
mkfs.ocfs2
のマニュアルページを参照してください。- 事前定義された機能(
--fs-feature-level
) 事前定義されたファイルシステム機能セットから選択できます。使用できるオプションについては、
mkfs.ocfs2
のマニュアルページを参照してください。
mkfs.ocfs2
によってボリュームを作成およびフォーマットするときに機能を指定しない場合、デフォルトでbackup-super
、sparse
、inline-data
、unwritten
、metaecc
、indexed-dirs
、およびxattr
の各機能が有効化されます。
クラスタノードの1つだけで、次の手順を実行します。
端末ウィンドウを開いて、
root
としてログインします。クラスタがオンラインであることをコマンド
crm status
で確認します。mkfs.ocfs2
ユーティリティを使用して、ボリュームを作成およびフォーマットします。このコマンドの構文については、mkfs.ocfs2
マニュアルページを参照してください。たとえば、最大32台のクラスタノードをサポートする新しいOCFS2ファイルシステムを作成するには、次のコマンドを入力します。
#
mkfs.ocfs2 -N 32 /dev/disk/by-id/DEVICE_ID
常に固定デバイス名(例:
/dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg
)を使用します。
21.5 OCFS2ボリュームのマウント #
OCFS2ボリュームは、手動でマウントするか、クラスタマネージャでマウントできます(手順21.4「クラスタリソースマネージャでOCFS2ボリュームをマウントする」参照)。
複数のOCFS2ボリュームをマウントするには、手順21.5「クラスタリソースマネージャで複数のOCFS2ボリュームをマウントする」を参照してください。
端末ウィンドウを開いて、
root
としてログインします。クラスタがオンラインであることをコマンド
crm status
で確認します。コマンドラインから、
mount
コマンドを使ってボリュームをマウントします。
OCFS2ボリュームは、完全に機能するクラスタスタックがなくても、単一ノードにマウントできます。たとえば、バックアップからデータに素早くアクセスできます。これを行うには、-o nocluster
オプションを指定してmount
コマンドを使用します。
このマウント方法では、クラスタ全体の保護は行われません。ファイルシステムの損傷を防ぐため、ファイルシステムが1つのノードにのみマウントされていることを確認する必要があります。
High AvailabilityソフトウェアでOCFS2ボリュームをマウントするには、クラスタ内でOCFS2ファイルシステムのリソースを設定します。次の手順では、crm
シェルを使用してクラスタリソースを設定します。21.6項 「Hawk2でのOCFS2リソースの設定」で説明されているように、リソースの設定にはHawk2を使用することもできます。
root
または同等の権限でノードにログインします。crm configure
を実行します。OCFS2ファイルシステムをクラスタ内のすべてのノードにマウントするように、Pacemakerを設定します。
crm(live)configure#
primitive ocfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="ocfs2" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Started"
ocfs2-1
プリミティブを手順20.1「DLMのベースグループの設定」で作成したg-storage
グループに追加します。crm(live)configure#
modgroup g-storage add ocfs2-1
ベースグループの内部コロケーションおよび順序付けのため、
ocfs2-1
リソースは、すでに実行中のdlm
リソースも持つノード上でのみ開始できます。重要: 複数のOCFS2リソースにグループを使用しないグループに複数のOCFS2リソースを追加すると、OCFS2ボリューム間の依存関係が作成されます。たとえば、
crm configure group g-storage dlm ocfs2-1 ocfs2-2
でグループを作成した場合、ocfs2-1
を停止すると、ocfs2-2
も停止し、ocfs2-2
を開始すると、ocfs2-1
も開始されます。クラスタで複数のOCFS2リソースを使用するには、手順21.5「クラスタリソースマネージャで複数のOCFS2ボリュームをマウントする」で説明されているように、コロケーションと順序制約を使用します。
show
で変更内容をレビューします。すべて正しければ、
commit
で変更を送信し、quit
でcrmライブ設定を終了します。
クラスタで複数のOCFS2ボリュームをマウントするには、各ボリュームにOCFS2ファイルシステムリソースを設定し、これらを手順20.2「独立したDLMリソースの設定」で作成したdlm
リソースと同じ場所に配置します。
DLMのグループに複数のOCFS2リソースを追加「しない」でください。これにより、OCFS2ボリューム間の依存関係が作成されます。たとえば、ocfs2-1
とocfs2-2
が同じグループである場合、ocfs2-1
を停止するとocfs2-2
も停止します。
root
または同等の権限でノードにログインします。crm configure
を実行します。最初のOCFS2ボリュームのプリミティブを作成します。
crm(live)configure#
primitive ocfs2-1 Filesystem \ params directory="/srv/ocfs2-1" fstype=ocfs2 device="/dev/disk/by-id/DEVICE_ID1" \ op monitor interval=20 timeout=40 \ op start timeout=60 interval=0 \ op stop timeout=60 interval=0
2つ目のOCFS2ボリュームのプリミティブを作成します。
crm(live)configure#
primitive ocfs2-2 Filesystem \ params directory="/srv/ocfs2-2" fstype=ocfs2 device="/dev/disk/by-id/DEVICE_ID2" \ op monitor interval=20 timeout=40 \ op start timeout=60 interval=0 \ op stop timeout=60 interval=0
OCFS2リソースのクローンを作成して、すべてのノードで実行できるようにします。
crm(live)configure#
clone cl-ocfs2-1 ocfs2-1 meta interleave=true
crm(live)configure#
clone cl-ocfs2-2 ocfs2-2 meta interleave=true
両方のOCFS2リソースにコロケーション制約を追加して、DLMも実行しているノードでのみ実行できるようにします。
crm(live)configure#
colocation col-ocfs2-with-dlm inf: ( cl-ocfs2-1 cl-ocfs2-2 ) cl-dlm
両方のOCFS2リソースに順序制約を追加して、DLMがすでに実行されている後でのみ開始できるようにします。
crm(live)configure#
order o-dlm-before-ocfs2 Mandatory: cl-dlm ( cl-ocfs2-1 cl-ocfs2-2 )
show
で変更内容をレビューします。すべて正しければ、
commit
で変更を送信し、quit
でcrmライブ設定を終了します。
21.6 Hawk2でのOCFS2リソースの設定 #
crmシェルを使用して、DLM、およびOCFS2のファイルシステムリソースを手動で設定する代わりに、Hawk2の
のOCFS2テンプレートを使用することもできます。。ウィザードを使用する場合でも、手順21.1「STONITHリソースの設定」で説明されているように、共有ストレージ上でSBDパーティションを作成し、STONITHリソースを設定する必要があります。
のOCFS2テンプレートには、STONITHリソースの設定が含まれませんまた、Hawk手順20.1「DLMのベースグループの設定」および手順21.4「クラスタリソースマネージャでOCFS2ボリュームをマウントする」で説明されている手動設定とは若干異なるリソース設定になります。
のOCFS2テンプレートを使用すると、Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。OCFS2 File System
を選択します。画面の指示に従います。オプションについての情報が必要な場合には、オプションをクリックすると、Hawk2は簡単なヘルプテキストを表示します。最後の設定手順が完了したら、
を選択して、入力した値を検証します。CIBに適用する設定スニペットやその他の必要な変更がウィザードに表示されます。
図 21.1: OCFS2 CIBの変更のHawk2まとめ画面 #適用予定の変更を確認します。すべてが希望どおりの場合は、変更を適用します。
画面上のメッセージが、アクションに成功したかどうかを示します。
21.7 OCFS2ファイルシステム上でクォータを使用する #
OCFS2ファイルシステム上でクォータを使用するには、適切なクォータ機能またはマウントオプションを使用して、ファイルシステムを作成し、マウントします。オプションはursquota
(個々のユーザのためのクォータ)またはgrpquota
(グループのためのクォータ)です。これらの機能は後ほど、tunefs.ocfs2
を使用して、マウントされていないファイルシステムで有効にすることもできます。
ファイルシステムで適切なクォータ機能が有効にされている場合、ファイルシステムは、そのメタデータで、各ユーザ(または)グループが使用しているスペースの量とファイルの数を追跡します。OCFS2はクォータ情報をファイルシステムの内部メタデータとして扱うので、quotacheck
(8)プログラムを実行する必要はありません。すべての機能はfsck.ocf2、およびファイルシステムドライバ自体に組み込まれています。
各ユーザまたはグループに課せられている制限の強制を有効にするには、他のファイルシステムでの場合と同様に、quotaon
(8)を実行します。
パフォーマンス上の理由で、各クラスタノードはクォータの計算をローカルに行い、この情報を、10秒ごとに共通の中央ストレージに同期するようになっています。この間隔はtunefs.ocfs2
で調整できます。オプションはusrquota-sync-interval
およびgrpquota-sync-interval
です。クォータ情報は必ずしも常に正確というわけではないので、複数のクラスタノードを並列に運用している場合、ユーザまたはグループがクォータ制限をいくらか超えることもあります。
21.8 詳細の参照先 #
OCFS2の詳細については、次のリンクを参照してください。
- https://ocfs2.wiki.kernel.org/
OCFS2プロジェクトホームページ。
- https://oss.oracle.com/projects/ocfs2/
Oracleサイトにある以前のOCFS2プロジェクトのホームページ
- https://oss.oracle.com/projects/ocfs2/documentation
プロジェクトの以前のドキュメントホームページ。