特集
» 2010年09月08日 00時00分 公開

Heartbeat+Pacemaker+DRBDで高可用Linux:体験! 新しくなったLinux-HA (2/3)

[岩崎のぼる,@IT]

ハードウェアとOS環境の整備

 まず、Linux-HAを動作させるハードウェアを2台用意します。専用のハードウェアが用意できない場合には、VMWareまたはVirtualBoxのような仮想環境でも動作します。

ハードウェア動作条件

  1. Linuxが動作するサーバマシン
  2. ネットワークポートを2個以上搭載していること(可能なら3つ)
  3. 搭載メモリ1GB以上を推奨

 OSはCentOS 5.5を標準インストールして使用しますが、ここで1つ注意点があります。DRBDはパーティションを冗長化するため、DRBD用の領域を空けておく必要があるのです。

図3 図3 パーティション構成

 OSインストール時にApache(Webサーバ)もインストールします。OSと関連するソフトウェアは、2台のサーバ両方に同じようにインストールして、単体でも正常にWebサービスが提供できる状態にします。今回、Webサーバの設定はデフォルト値を使用しているため、DocumentRootは「/var/www/html」となります。

 HAクラスタ構成でWebサービスを提供する場合は、仮想IPアドレスを使用して、ノード間でサービスのプロセスと仮想IPアドレスの付け替えを行います。また、Linux-HAはホストネームを使用するため、ホストネームとIPアドレスの名前解決ができるように/etc/hostsファイルまたはDNSサーバに両ノードのホストネームを登録します。

図4 図4 ネットワーク構成

ソフトウェア環境の整備

 Linux-HA環境は、clusterlabsのWikiサイトからリポジトリを登録すれば、簡単にインストールできます。今回はCentOSを使用しているため、パッケージマネージャyumを使ってインストールします。そのほかのディストリビューションの場合は、clusterlabsのWikiサイトを参考にインストールしてください。

 Webサーバの冗長化はLinux-HAに含まれるHeartbeat、Pacemaker、DRBDという3つのOSSを組み合わせて実現します。

HeartbeatとPacemakerのインストール

# su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm'
# wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo
epelとclusterlabs.orgのリポジトリをインストール

 yumコマンドでパッケージをインストールします。依存関係のおかげで、PacemakerをインストールするとHeartbeatもインストールされるようになっています。

# yum install pacemaker.i386

DRBDのインストール

 DRBDを動作させるには、カーネルモジュールのインストールが必要です。アプリケーション本体とカーネルモジュールの2つのパッケージをインストールします。

# yum install drbd83.i386 kmod-drbd83.i686

 Linux-HAのインストールができたら、デフォルトでは自動起動してしまうDRBDとWebサーバを、自動起動しないように設定します。これらのサービスの起動および停止はPacemakerから制御するため、必須の作業となります。

DRBDでデータを複製する

 2台のノードで同じサービスを提供することが確認できたら、DRBDの準備を行います。

 DRBDの準備手順は次のとおりです。まず、OSインストール時に空き容量として確保していた領域にパーティションを作成し、そのパーティションを使用してレプリケーションされたDRBDデバイスを作成します。「/etc/drbd.d/」以下にリソースの設定ファイルを作成し、DRBDの設定を行います。

 リソースファイルの拡張子は、デフォルトでは「.res」にすることが決められており、/etc/drbd.confによりインポートされています。今回の例では、/dev/sda3がDRBDでレプリケーションされるブロックデバイスとなります。

# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
# vi /etc/drbd.d/r0.res
resource r0 {
    protocol C;
    device /dev/drbd0;
    meta-disk internal;

    on hoge1.example.jp {
        address 10.1.0.1:7801;
        disk /dev/sda3;
    }
    on hoge2.example.jp {
        address 10.1.0.2:7801;
        disk /dev/sda3;
    }
}
DRBD設定の設定

 設定ができたら、DRBDデバイスを使うのに必要なメタデータの作成を行います。DRBDはこのメタデータを使って両ノードの整合性を取っています。初回のメタデータの作成時にはいくつか対話式のメニューが出てきますが、すべて[yes]か[Enter]を押して進めます。

# drbdadm create-md r0
メタデータの作成

 メタデータの作成が正常にできれば、両ノード間のDRBDの接続が可能な状態となります。DRBDを接続してアクティブ側ノードのDRBDを[Primary]にして、初期同期を行います。

# /etc/init.d/drbd start    ← 両ノードでstartすると接続します
Starting DRBD resources: [ r0 Found valid meta data in the expected location, 2006962176 bytes into
/dev/sda3. d(r0) n(r0) ]...

# cat /proc/drbd            ← DRBDの状態を表示
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-
06-04 08:04:16
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1959832

# drbdadm -- -o primary r0  ← 初期同期開始
# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-
06-04 08:04:16
0: cs:SyncSource ro:Secondary/Secondary ds:UpToDate/Inconsistent C r----
  ns:1108524 nr:0 dw:0 dr:1116128 al:0 bm:67 lo:1 pe:30 ua:238 ap:0 ep:1 wo:b oos:835864
        [==========>.........] sync'ed: 57.1% (835864/1943448)K delay_probe: 69
        finish: 0:00:21 speed: 39,152 (38,192) K/sec
DRBDの初期同期

 DRBDの同期が実行されたら、ファイルシステムを作成します(同期中でも作成可能です)。

# mkfs.ext3 /dev/drbd0
ファイルシステムの作成

 このとき、必ずDRBDデバイスに対してファイルシステムを作成してください。/dev/sda3にファイルシステムを作成してしまうとメタデータが破壊されてしまい、再度作成し直すことになってしまいます。

 ファイルシステムができたら、Webサーバで使用するデータ領域をDRBD上に配置します。/mnt/drbd0ディレクトリを作成し、DRBDデバイスは常にそこにマウントされるようにして/var/www/htmlディレクトリのシンボリックリンクを張ります。

 スタンバイ側では/mnt/drbd0のディレクトリにDRBDデバイスがマウントされていないため、デッドリンク状態になっていることがポイントとなります。

# mkdir /mnt/drbd0
# mount /dev/drbd0 /mnt/drbd0
# mv /var/www/html /mnt/drbd0/
# ln -s /mnt/drbd0/html /var/www/html
アクティブノード側
# mkdir /mnt/drbd0
# rm -rf /var/www/html
# ln -s /mnt/drbd0/html /var/www/html
スタンバイノード側

 これでDRBDの準備は完了です。「/var/www/html」内に適当なHTMLファイルを用意して保存してください。正常にリンクされていれば、/mnt/drbd0/html内にも作成したHTMLファイルができるはずです。

Heartbeatの設定

 続いて、Pacemakerのインフラストラクチャとして動作するHeartbeatの設定を行います。Heartbeatは、Pacemakerとの組み合わせでは、ノード管理部分を設定するだけで動作します。

 ただしインストール直後は設定ファイルが存在しません。ドキュメントディレクトリから設定ファイル本体「ha.cf」と通信に使用する「authkeys」ファイルをコピーし、ベースとなる設定ファイルとして使用します。

 ha.cfファイルの1行目にある「crm yes」は、Pacemakerと組み合わせて使用する場合に追加します。この設定が存在すると、HeartbeatはPacemakerをサブプロセスとして起動するようになります。

# cp /usr/share/doc/heartbeat-3.0.3/ha.cf /etc/ha.d/
# cp /usr/share/doc/heartbeat-3.0.3/authkeys /etc/ha.d/
# chmod 600 /etc/ha.d/authkeys
設定ファイルのコピー
crm yes
logfile /var/log/ha-log
logfacility local0
keepalive 2
udpport 694
ucast eth1 10.0.0.1
ucast eth1 10.0.0.2
node hoge1.example.com
node hoge2.example.com
ha.cfの設定
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
autukeysの設定

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。