第12章 DRBDとOCFS2の使用

目次

12.1. OCFS2の基礎
12.2. OCFS2用のDRBDリソースの作成
12.3. OCFS2ファイルシステムの作成
12.4. PacemakerによるOCFS2の管理
12.4.1. PacemakerにデュアルプライマリDRBDリソースを追加する
12.4.2. OCFS2をPacemakerで管理するには
12.4.3. PacemakerにOCFS2ファイルシステムを追加する
12.4.4. OCFS2ファイルシステムを管理するPacemakerの制約の追加
12.5. Pacemakerを使わないOCFS2管理
12.5.1. OCFS2をサポートするようにクラスタを設定する
12.5.2. OCFS2ファイルシステムの使用

この章では、共有Oracle Cluster File Systemバージョン2 (OCFS2)を格納するブロックデバイスとしてDRBDリソースを設定する方法を説明します。

[重要]重要

全てのクラスタファイルシステムには、fencingが 必要 です。DRBDリソース経由だけでなく、STONITHでもです。問題のあるメンバは 必ず killされなければなりません。

次のような設定がよいでしょう。

disk {
        fencing resource-and-stonith;
}
handlers {
        # Make sure the other node is confirmed
        # dead after this!
        outdate-peer "/sbin/kill-other-node.sh";
}

これらは 揮発性のキャッシュである必要があります。GFS2に関するものであり、OCFS2についてではありませんが、https://fedorahosted.org/cluster/wiki/DRBD_Cookbook が参考になるでしょう。

12.1. OCFS2の基礎

Oracle Cluster File Systemバージョン2 (OCFS2)は、Oracle Corporationが開発した同時アクセス共有ストレージファイルシステムです。前バージョンのOCFSはOracleデータベースペイロード専用に設計されていましたが、OCFS2はほとんどのPOSIXセマンティクスを実装する汎用ファイルシステムです。OCFS2の最も一般的なユースケースは、もちろんOracle Real Application Cluster (RAC)ですが、OCFS2は負荷分散NFSクラスタなどでも使用できます。

本来、CFS2は従来の共有ストレージデバイス用に設計されたものですが、デュアルプライマリDRBDにも問題なく配備できます。OCFS2が通常実行されるSANデバイスとは異なり、DRBDはローカルストレージに対して読み書きを行うため、ファイルシステムからデータを読み取るアプリケーションの読み取り待ち時間が短縮できるというメリットがあります。さらに、DRBDの場合は、単一のファイルシステムイメージを単に共有するのではなく、各ファイルシステムイメージにさらにコピーを追加するため、OCFS2に冗長性が加わります。

他の共有クラスタファイルシステムGFSなどと同様に、OCFS2で複数のノードが読み取り/書き込みモードで同じストレージデバイスに同時にアクセスできます。データが破損するおそれはありません。これには、クラスタノードからの同時アクセスを管理するDLM (Distributed Lock Manager)が使用されます。DLM自体は、システムに存在する実際のOCFS2ファイルシステムとは別個の仮想ファイルシステム(ocfs2_dlmfs)を使用します。

OCFS2は組み込みクラスタ通信層を使用して、クラスタメンバシップおよびファイルシステムのマウントとマウント解除操作を管理したり、これらのタスクをPacemakerクラスタインフラストラクチャに委ねることができます。

OCFS2は、SUSE Linux Enterprise Server (OCFS2が主にサポートされる共有クラスタファイルシステム)、CentOS、Debian GNU/LinuxおよびUbuntu Server Editionで入手できます。また、OracleはRed Hat Enterprise Linux (RHEL)用のパッケージも提供しています。この章の説明は、SUSE Linux Enterprise ServerシステムでOCFS2を実行することを前提としています。

12.2. OCFS2用のDRBDリソースの作成

OCFS2は共有クラスタファイルシステムで、すべてのクラスタノードからストレージに対して同時に読み取り/書き込みアクセスが行われることを前提としています。したがって、OCFS2ファイルシステムを格納するために使用するDRBDリソースは、デュアル・プライマリモードで設定する必要があります。また、スプリットブレインから自動的に回復するためのDRBDの機能を使用することをお勧めします。リソースは起動後直ちにプライマリロールに切り替わる必要があります。上記のすべてを実行するために、次の行をリソース構成に記述してください。

resource <resource> {
  startup {
    become-primary-on both;
    ...
  }
  net {
    # allow-two-primaries yes;
    after-sb-0pri discard-zero-changes;
    after-sb-1pri discard-secondary;
    after-sb-2pri disconnect;
    ...
  }
  ...
}
[警告]警告

回復ポリシーを設定することは、事実上、自動データロス設定を行うことです。十分にご理解のうえご使用ください。

最初の構成の際に allow-two-primaries オプションを 有効にする のはお勧めできません。これは、最初のリソース同期が完了してから有効にしてください。

これらのオプションを新しく構成したリソースに追加したら、通常どおりにリソースを初期化できます。リソースの allow-two-primaries オプションを yes にすると、両方のノードのリソースをプライマリロールに昇格させることができます。

12.3. OCFS2ファイルシステムの作成

OCFS対応の mkfs コマンドを使って、OCFS2ファイルシステムを作成します。

mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
mkfs.ocfs2 1.4.0
Filesystem label=ocfs2_drbd0
Block size=1024 (bits=10)
Cluster size=4096 (bits=12)
Volume size=205586432 (50192 clusters) (200768 blocks)
7 cluster groups (tail covers 4112 clusters, rest cover 7680 clusters)
Journal size=4194304
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 0 block(s)
Formatting Journals: done
Writing lost+found: done
mkfs.ocfs2 successful

2ノードスロットOCFS2ファイルシステムが /dev/drbd0 に作成され、ファイルシステムのラベルが ocfs2_drbd0 に設定されます。mkfs の呼び出し時に、その他のオプションを指定することもできます。詳細は mkfs.ocfs2 システムマニュアルページを参照ください。

12.4. PacemakerによるOCFS2の管理

12.4.1. PacemakerにデュアルプライマリDRBDリソースを追加する

既存のデュアルプライマリDRBDリソースは、次の crm 設定でPacemakerリソース管理に追加することができます。

primitive p_drbd_ocfs2 ocf:linbit:drbd \
  params drbd_resource="ocfs2"
ms ms_drbd_ocfs2 p_drbd_ocfs2 \
  meta master-max=2 clone-max=2 notify=true
[重要]重要

メタ変数 master-max=2 に注意してください。これはPacemakerのマスター/スレーブのデュアルマスターモードを有効にします。これはまた、allow-two-primariesyes にDRBD設定で設定されている必要があります。これらを忘れると、リソースの検証中にPacemakerでフラグ設定エラーが発生するかもしれません。

12.4.2. OCFS2をPacemakerで管理するには

OCFS2とロックマネージャ(DLM)の分散カーネルを管理するために、Pacemakerは、3つの異なるリソースエージェントを使用します。

  • ocf:pacemaker:controld — PacemakerのDLMに対してのインタフェース
  • ocf:ocfs2:o2cb — PacemakerのOCFS2クラスタ管理へのインタフェース
  • ocf:heartbeat:Filesystem — Pacemakerのクローンとして構成したときにクラスタファイルシステムをサポートする汎用ファイルシステム管理リソースエージェント

次の crm 設定のようにリソースグループの クローン を作成することによって、OCFS2の管理に必要なPacemakerリソースをすべてのノードで起動できます。

primitive p_controld ocf:pacemaker:controld
primitive p_o2cb ocf:ocfs2:o2cb
group g_ocfs2mgmt p_controld p_o2cb
clone cl_ocfs2mgmt g_ocfs2mgmt meta interleave=true

この構成がコミットされると、Pacemakerは、クラスタ内のすべてのノードで controldo2cb のリソースタイプのインスタンスを起動します。

12.4.3. PacemakerにOCFS2ファイルシステムを追加する

PacemakerはOCF2ファイルシステムにアクセスするのに、従来の ocf:heartbeat:Filesystem リソースエージェントを使います。これはクローンモードにおいてもです。Pacemakerの管理下にOCFS2ファイルシステムを配置するには、次の crm 設定を使用します。

primitive p_fs_ocfs2 ocf:heartbeat:Filesystem \
  params device="/dev/drbd/by-res/ocfs2/0" directory="/srv/ocfs2" \
         fstype="ocfs2" options="rw,noatime"
clone cl_fs_ocfs2 p_fs_ocfs2
[注記]注記

この例では、ボリュームリソースが1つであることを前提にしています。

12.4.4. OCFS2ファイルシステムを管理するPacemakerの制約の追加

すべてのOCFS2関連のリソースとクローンを結びつけるには、Pacemaker構成に以下の制約を加えてください。

order o_ocfs2 ms_drbd_ocfs2:promote cl_ocfs2mgmt:start cl_fs_ocfs2:start
colocation c_ocfs2 cl_fs_ocfs2 cl_ocfs2mgmt ms_drbd_ocfs2:Master

12.5. Pacemakerを使わないOCFS2管理

[重要]重要

OCFS2 DLMをサポートしない旧バージョンのPacemakerしか使えない場合、この節が参考になります。したがって、この節は以前の方式を使っている方の参照のためにだけ残してあります。新規インストールの場合は、Pacemaker方式を使ってください。

12.5.1. OCFS2をサポートするようにクラスタを設定する

12.5.1.1. 設定ファイルの作成

OCFS2は主要な設定ファイル /etc/ocfs2/cluster.conf を使用します。

OCFS2クラスタを作成する際には、必ず、両方のホストを設定ファイルに追加してください。クラスタの相互接続通信には、通常はデフォルトポート(7777)が適切です。他のポート番号を選択する場合は、DRBD (および他の構成されたTCP/IP)が使用する既存のポートと衝突しないポートを選択する必要があります。

cluster.conf ファイルを直接編集したくない場合は、ocfs2console というグラフィカルな構成ユーティリティを使用することもできます。通常はこちらのほうが便利です。いずれの場合も /etc/ocfs2/cluster.conf ファイルの内容はおおよそ次のようになります。

node:
    ip_port = 7777
    ip_address = 10.1.1.31
    number = 0
    name = alice
    cluster = ocfs2

node:
    ip_port = 7777
    ip_address = 10.1.1.32
    number = 1
    name = bob
    cluster = ocfs2

cluster:
    node_count = 2
    name = ocfs2

クラスタ構成を設定したら、scp を使用して構成をクラスタの両方のノードに配布します。

12.5.1.2. O2CBドライバの設定

  • SUSE Linux Enterpriseシステム

SLESでは、o2cb の起動スクリプトの configure オプションを利用することができます。

/etc/init.d/o2cb configure
Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot.  The current values will be shown in brackets ('[]').  Hitting
<ENTER> without typing an answer will keep that current value.  Ctrl-C
will abort.

Load O2CB driver on boot (y/n) [y]:
Cluster to start on boot (Enter "none" to clear) [ocfs2]:
Specify heartbeat dead threshold (>=7) [31]:
Specify network idle timeout in ms (>=5000) [30000]:
Specify network keepalive delay in ms (>=1000) [2000]:
Specify network reconnect delay in ms (>=2000) [2000]:
Use user-space driven heartbeat? (y/n) [n]:
Writing O2CB configuration: OK
Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK
  • .Debian GNU/Linuxシステム

Debianの場合は、/etc/init.d/o2cbconfigure オプションは使用できません。代わりに、ocfs2-tools パッケージを再設定してドライバを有効にします。

dpkg-reconfigure -p medium -f readline ocfs2-tools
Configuring ocfs2-tools
Would you like to start an OCFS2 cluster (O2CB) at boot time? yes
Name of the cluster to start at boot time: ocfs2
The O2CB heartbeat threshold sets up the maximum time in seconds that a node
awaits for an I/O operation. After it, the node "fences" itself, and you will
probably see a crash.

It is calculated as the result of: (threshold - 1) x 2.

Its default value is 31 (60 seconds).

Raise it if you have slow disks and/or crashes with kernel messages like:

o2hb_write_timeout: 164 ERROR: heartbeat write timeout to device XXXX after NNNN
milliseconds
O2CB Heartbeat threshold: `31`
                Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading stack plugin "o2cb": OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Setting cluster stack "o2cb": OK
Starting O2CB cluster ocfs2: OK

12.5.2. OCFS2ファイルシステムの使用

クラスタ構成を完了して、ファイルシステムを作成すると、他のファイルシステムと同様にマウントすることができます。

mount -t ocfs2 /dev/drbd0 /shared

dmesg コマンドで表示されるカーネルログに次のような行が見つかるはずです。

ocfs2: Mounting device (147,0) on (node 0, slot 0) with ordered data mode.

その時点から、両方のノードでOCFS2ファイルシステムに読み取り/書き込みモードでアクセスできるようになります。