Pacemakerでかんたんクラスタリング体験してみよう!

第2回Pacemakerをインストールしてみよう![構築基本編]

はじめに

第1回では、⁠Pacemakerって何?」からその歴史までをご紹介しました。今回は、Pacemakerの構築、設定をステップ by ステップで進めていきたいと思います。ぜひ、手元にコンピュータをご用意してください。自分の目で確認しながら進めていただければ、理解もぐっと深くなるでしょう。

全体の流れは次の通りです。

  • Pacemakerのインストール
  • クラスタ制御機能(Heartbeat)の設定
  • リソース制御機能(Pacemaker)の設定

クラスタ制御機能にはCorosyncとHeartbeatバージョン3を選択できますが、今回はHeartbeatバージョン3を使用します。リソース制御機能では、ApacheのHAクラスタ設定を行います。ただし、今回は設定手順の流れを理解していただくため、設定内容は基本的なものに限定します。また、故障が起きたときの動作や復旧手順については、第4回で説明しますので、楽しみにお待ちください。

マシン環境を準備できる方は、最小インストールのCentOS5.5(x86_64)のサーバ2台を用意してください。仮想環境で準備してもらえれば十分です。私がVMware Playerで準備した環境は表1の通りです。

表1 サーバスペック
CPU数1
メモリ1GB
ディスク10GB
NIC数3
OSCentOS5.5(x86_64)

説明の都合上、サーバ名はpm01とpm02とします。ネットワーク設定は表2の通りです。

表2 ネットワーク設定
ネットワークアドレス /ネットマスク長用途仮想IPpm01のIPアドレス(デバイス)pm02のIPアドレス(デバイス)
192.168.68.0 /24サービスLAN192.168.68.100192.168.68.101 (eth0)192.168.68.102 (eth0)
192.168.32.0 /24インターコネクトLAN192.168.32.101 (eth1)192.168.32.102 (eth1)
192.168.64.0 /24インターコネクトLAN192.168.64.101 (eth2)192.168.64.102 (eth2)

NICは3つ使用します。1つはサービス提供用、残りの2つはインターコネクト通信用です。ネットワーク構成は図1のようになっているとし、サーバからインターネット接続できるようにしてください。

作業はrootユーザで行います。sshでリモート作業する場合には、必要に応じてパスワード入力してください。 作業用にサーバpm01で、ターミナルを1つ起動してください。ほとんどの作業はこのターミナルで行います。

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

Pacemakerのインストール

第1回でPacemakerは複数のコンポーネントの組み合わせとして提供されるという話をしました。そこで、Linux-HA Japanでは、必要なrpmがすべて入ったyumリポジトリPacemakerリポジトリパッケージを配布しています。このyumリポジトリにはLinux-HA Japanで開発したオリジナルパッケージも含まれています。

図2 Linux-HA Japan Pacemakerリポジトリパッケージ
図2 Linux-HA Japan Pacemakerリポジトリパッケージ

Linux-HA Japan(図2)にアクセスし、Pacemakerリポジトリパッケージをダウンロードします。ダウンロードしたファイルを、サーバpm01に転送します。

この後、サーバpm01上での作業に移ります。Pacemakerリポジトリパッケージはカレントディレクトリにあるとします。これを/tmpに展開し、yum でインストールします。

# tar zxvf pacemaker-1.0.10-1.4.1.el5.x86_64.repo.tar.gz -C /tmp
# yum -c /tmp/pacemaker-1.0.10-1.4.1.el5.x86_64.repo/pacemaker.repo install pacemaker heartbeat pm_extras

オリジナルパッケージpm_extrasを追加することで、インターコネクトLAN故障が標準ツールで見えるようになります。

サーバpm02にもリポジトリパッケージを展開し、Pacemakerをインストールします。作業中のターミナルから次のコマンドを実行してください。

# gzip -cd pacemaker-1.0.10-1.4.1.el5.x86_64.repo.tar.gz | ssh pm02 tar xvf - -C /tmp
# ssh pm02 yum -c /tmp/pacemaker-1.0.10-1.4.1.el5.x86_64.repo/pacemaker.repo -y install pacemaker heartbeat pm_extras

Pacemakerの自動起動をオフにします。

# chkconfig --level 2345 heartbeat off
# ssh pm02 chkconfig --level 2345 heartbeat off

Pacemakerの自動起動は、オン/オフ両方の運用がありえます。オンの場合は、サーバ再起動後には自動的にクラスタに組み込まれます。オフの場合は、手動でPacemakerを起動します。故障が原因で再起動したときに、その原因を調査したい場合はオフの運用がいいでしょう。

クラスタ制御機能(Heartbeat)の設定

設定は、すべてのサーバで同一にします。最初にpm01を設定し、それをpm02に反映します。

ha.cf

Heartbeatの設定は、 /etc/ha.d/ha.cfで行います。次のコマンドで設定ファイルを作成します。

# cat > /etc/ha.d/ha.cf <<EOF
pacemaker on

debug 0
udpport 694
keepalive 2
warntime 7
deadtime 10
initdead 10
logfacility local1

bcast eth1
bcast eth2

node pm01
node pm02

watchdog /dev/watchdog
respawn root /usr/lib64/heartbeat/ifcheckd
EOF

主な設定項目の簡単な意味は次の通りです。

  • pacemaker:リソース制御にPacemakerを使用するかどうか
  • udpport:インターコネクト通信で使用するudpポート
  • keepalive:インターコネクト通信の送信間隔(秒)
  • deadtime:インターコネクト通信途絶後に故障と判断するまでの時間(秒)
  • initdead:初期起動時に他のサーバの起動を待つ時間(秒)
  • logfacility:syslog経由でログを出力するときのファシリティ指定
  • bcast:インターコネクト通信(ブロードキャスト)に使用するデバイスの指定
  • node:クラスタに参加するサーバ名を指定
  • respawn:起動するサブプロセスの指定

respawnで指定しているifcheckdはpm_extrasに含まれるLinux-HA Japanオリジナルパッケージで、インターコネクト通信が正常かどうかを見えるようにします。

authkeys

次に、/etc/ha.d/authkeysを作成します。これは、インターコネクト通信の認証のために使用します。

# cat > /etc/ha.d/authkeys <<EOF
auth 1
1 sha1 secret
EOF

このファイルはrootのみにread権限を与えてください。

# chmod 0600 /etc/ha.d/authkeys

syslog.conf

次に、syslogdの設定を変更します。これは必須ではありませんが、Pacemakerのログは多めなので、ログファイルを分けたほうが望ましいです。/etc/syslog.confをエディタで開き、下記の箇所を変更します。

変更前

*.info;mail.none;authpriv.none;cron.none            /var/log/messages

変更後

*.info;mail.none;authpriv.none;cron.none;local1.none            /var/log/messages

また、ファイルの最後に下記を追加します。

local1.info                                             /var/log/ha-log

以上の変更後/etc/syslog.confを保存します。変更を反映するために、syslogdを再起動します。

# /etc/init.d/syslog restart

pm02への設定反映

以上の作業を、pm02に反映します。

# scp /etc/ha.d/{ha.cf,authkeys} pm02:/etc/ha.d
# ssh pm02 chmod 0600 /etc/ha.d/authkeys
# scp /etc/syslog.conf pm02:/etc
# ssh pm02 /etc/init.d/syslog restart

Pacemakerの起動

では、Pacemakerを起動してみましょう。

# /etc/init.d/heartbeat start
# ssh pm02 /etc/init.d/heartbeat start

クラスタの状態を確認するには、crm_monコマンドを使用します。

# crm_mon -A

初めて起動した場合には、次のように表示されていると思います。

============
Last updated: Fri Mar 18 22:37:14 2011
Current DC: NONE
0 Nodes configured, unknown expected votes
0 Resources configured.
============

Node Attributes:

しばらく待つと、次のような表示に変わります。 Onlineにサーバ名が表示されればOKです。

============
Last updated: Fri Mar 18 22:31:07 2011
Stack: Heartbeat
Current DC: pm01 (755595f2-7905-4ba3-909e-68c4e74067bf) - partition with quorum
Version: 1.0.10-da7075976b5ff0bee71074385f8fd02f296ec8a3
2 Nodes configured, unknown expected votes
0 Resources configured.
============

Online: [ pm02 pm01 ]

Node Attributes:
* Node pm02:
    + pm01-eth1                         : up
    + pm01-eth2                         : up
* Node pm01:
    + pm02-eth1                         : up
    + pm02-eth2                         : up

Node Attributes: の下に pm01-eth1 : up と表示されています。これは、サーバpm01 のインターコネクト通信用デバイスeth1が正常であるということを表しています。 これが見えるのは、 ha.cfで設定した ifcheckd の機能です。

crm_monを終了するには、CTRL-Cを押してください。

Pacemakerの停止

Pacemakerの停止方法は次の通りです。

# /etc/init.d/heartbeat stop
# ssh pm02 /etc/init.d/heartbeat stop

リソース制御機能(Pacemaker)の設定

次に、リソース制御機能を設定します。今回は、Apacheサーバのクラスタを構築します。構成は、図3の通りです。クライアントからは仮想IPに対してアクセスするようにします。

Pacemakerで管理すべきリソースは、Apacheと仮想IPです。運用系で故障が発生した場合は、この2つのリソースはセットでフェイルオーバさせます。

図3 リソース構成
図3 リソース構成

事前準備

Apacheをインストールします。

# yum -y install httpd
# ssh pm02 yum -y install httpd

特に設定は不要ですが、どちらのサーバのApacheにアクセスしているかわかるように、index.htmlを用意しておきます。

# cat > /var/www/html/index.html <<EOF
<html> <body> <h1>pm01 is on service.</h1> </body> </html>
EOF
# ssh pm02 "cat > /var/www/html/index.html" <<EOF
<html> <body> <h1>pm02 is on service.</h1> </body> </html>
EOF

リソース設定の種類

リソース設定の基本は、リソースエージェント(RA)です。⁠聞いていないよ~」という人は第1回を読み返してください。リソース設定でよく使う用語について簡単に説明しておきます。

  • primitive: すべてのリソース設定の最小単位。RAはまずprimitive設定することから始まります。
  • clone: 同じ設定のリソースを複数のノードで動作させたい場合に使用します。 primitive 設定後にclone化します。ネットワーク監視、ディスク監視などで使用します。
  • group: 複数のリソースをまとめてフェイルオーバさせるために使用します。group内のprimitiveには、起動/停止時の順序も合わせて設定されます。

今回の例では、Apacheと仮想IPはgroup設定を行います。

crmコマンド

リソース設定は、crmコマンドで行います。crmコマンドは非常に多機能で、これ1つでリソース設定からサーバ・リソース管理、状態確認などが行えます。

# crm help

This is the CRM command line interface program.

Available commands:

        cib              manage shadow CIBs
        resource         resources management
        node             nodes management
        options          user preferences
        configure        CRM cluster configuration
        ra               resource agents information center
        status           show cluster status
        quit,bye,exit    exit the program
        help             show help
        end,cd,up        go back one level

コマンドの実行方法しては、対話モード、ワンライナー、バッチモードの3つがあります。それぞれについて、クラスタに参加しているサーバの一覧を見る手順を例に、手順を説明します。

引数なしで起動すると、対話モードで使えます。 help を入力すると、そこで使えるコマンドが表示されます。タブキーを入力すると、コマンドや引数についても補完が効くのでとても便利です。通常は対話モードで使うことが多いでしょう。

# crm
crm(live)# node
crm(live)node# show
pm02(53a7615f-6b2f-4f71-9597-6b9a44e7f803): normal
        standby: off
pm01(8559a0d8-a5c9-4a84-aa7e-1961cad9658c): normal
        standby: off
crm(live)node# quit
bye

引数でコマンドを与えると、ワンライナー(1行プログラム)として使うことができます。

# crm node show

あるいは、コマンドを標準入力でcrmに渡してバッチモードで実行することもできます。実行すべきコマンドが決まっている場合はこの方法が便利です。

# crm <<EOF
node show
EOF

以降の設定手順では、ワンライナーまたは対話モードを使用しますが、まとめてコマンドを実行したい場合は、バッチモードを使ってみてください。

ではさっそくリソース設定を始めましょう。

クラスタ全体の設定

次のコマンドを実行してください。

# crm configure property no-quorum-policy="ignore" stonith-enabled="false"
# crm configure rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"

1行目では、クラスタ全体に関係する設定を行っています。

  • no-quorum-policy:3サーバ以上の構成で、クラスタに参加するサーバ数が過半数に満たない場合の動作ポリシーを指定。2サーバの場合はおまじないと思ってignoreを設定してください
  • stonith-enabled:STONITH機能を有効にするかどうかを指定。詳細は次回で説明します

2行目では、リソース動作のデフォルト値を設定しています。

  • resource-stickiness:リソース移動を固定する優先度を指定。INFINITYを指定すると不具合のない限りは稼働中のリソースは移動せず、自動フェイルバックなしの動作に相当します
  • migration-threshold:故障を検知した場合に同一サーバでリソースの再起動を試みる回数を指定

RAの設定

RAを設定するコマンドは、crm configure primitiveです。使い方をcrmのヘルプで調べてみましょう。

# crm configure primitive help
usage: primitive <rsc> [<class>:[<provider>:]]<type>
        [params <param>=<value> [<param>=<value>...]]
        [meta <attribute>=<value> [<attribute>=<value>...]]
        [operations id_spec
            [op op_type [<attribute>=<value>...] ...]]
  • <rsc>:リソースの名前を指定
  • <class>:lsb, ocfまたはstonithを指定(Pacemakerでは通常はocf仕様のRAを使用します)
  • <provider>:標準では、heartbeatまたはpacemakerを指定
  • <type>:RA名を指定
  • <params>:RAの設定パラメータを指定
  • <op>:start,monitor,stopなどのPacemakerからのコマンドに対する設定を指定

RAの情報は、 crm raコマンドを使用することで多くの情報を得ることができます。

今回primitive設定するRAについて、表3にまとめます。

表3 primitive設定するRA
リソースリソース名RA設定情報の表示コマンド
Apachehttpdapachecrm ra info apache
仮想IPvipIPaddr2crm ra info IPaddr2
ネットワーク監視pingpingdcrm ra info ocf:pacemaker:pingd

リソース名は、ユーザがわかりやすい名前をつけられます。

Apacheを管理するためのRAは、apacheです。次のコマンドでApacheのRAを設定します。

# crm configure primitive httpd ocf:heartbeat:apache params configfile="/etc/httpd/conf/httpd.conf" statusurl="http://localhost/" testregex="service" op monitor interval="10s"

クラスタの状態を確認します。

# crm_mon

============
Last updated: Wed Mar 23 10:00:20 2011
Stack: Heartbeat
Current DC: pm02 (53a7615f-6b2f-4f71-9597-6b9a44e7f803) - partition with quorum
Version: 1.0.10-da7075976b5ff0bee71074385f8fd02f296ec8a3
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ pm02 pm01 ]

httpd   (ocf::heartbeat:apache):        Started pm02

サーバpm02でApacheが動作していることがわかります。

次に、仮想IPを設定します。RAはIPaddr2を使います。

# crm configure primitive vip ocf:heartbeat:IPaddr2 params ip="192.168.68.100" nic="eth0" cidr_netmask="24" op monitor interval="10s"

仮想IPとApacheは常に同じサーバで動作させるためgroup設定にします。このために、crm configure groupコマンドを使います。

# crm configure group web vip httpd

クラスタの状態を確認します。

# crm_mon

============
Last updated: Wed Mar 23 10:19:29 2011
Stack: Heartbeat
Current DC: pm02 (53a7615f-6b2f-4f71-9597-6b9a44e7f803) - partition with quorum
Version: 1.0.10-da7075976b5ff0bee71074385f8fd02f296ec8a3
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ pm02 pm01 ]

Resource Group: web
     vip        (ocf::heartbeat:IPaddr2):       Started pm02
     httpd      (ocf::heartbeat:apache):        Started pm02

vipとhttpdが同じサーバで動作していることを確認してください。この例では、pm02で動作していますが、場合によってはpm01で動作しているかもしれません。

Webブラウザで http://192.168.68.100/ にアクセスしてください。pm02で動作していれば、

pm02 is on service.

と表示されるはずです。

ネットワーク監視

Apacheでサービスを提供するためには、サービスLANのネットワークが正常であることが必要です。このチェックのために、図1のゲートウェイ(192.168.68.2)までのネットワーク到達性を監視する設定を追加してみましょう。

ネットワーク監視をするためのRAは、pingdです。ネットワーク監視はすべてのサーバで動いている必要があるため、clone設定を使用します。

# crm configure primitive ping ocf:pacemaker:pingd params name="default_ping_set" host_list="192.168.68.2"multiplier="100" dampen="1" op monitor interval="10s"
# crm configure clone clone_ping ping

pingdの設定内容について補足します。

host_listで指定されたIPアドレスにICMPパケットを送信しネットワークの到達性を確認します。OKならdefault_ping_setmultiplierの値をセットします。NGなら、default_ping_setの値は 0 になります。

クラスタの状態を確認します。default_ping_setの値を確認するため、crm_monに-Aオプションをつけて実行します。

# crm_mon -A
============
Last updated: Wed Mar 23 20:43:18 2011
Stack: Heartbeat
Current DC: pm02 (53a7615f-6b2f-4f71-9597-6b9a44e7f803) - partition with quorum
Version: 1.0.10-da7075976b5ff0bee71074385f8fd02f296ec8a3
2 Nodes configured, unknown expected votes
2 Resources configured.
============

Online: [ pm02 pm01 ]

Resource Group: web
     vip        (ocf::heartbeat:IPaddr2):       Started pm01
     httpd      (ocf::heartbeat:apache):        Started pm01
Clone Set: clone_ping
     Started: [ pm02 pm01 ]

Node Attributes:
* Node pm02:
    + default_ping_set                  : 100
    + pm01-eth1                         : up
    + pm01-eth2                         : up
* Node pm01:
    + default_ping_set                  : 100
    + pm02-eth1                         : up
    + pm02-eth2                         : up

どちらのサーバの値も、正常値(100)になっていることがわかります。

ネットワーク監視に失敗したサーバではApacheは動作しないように設定します。このために、default_ping_setが正常値(100)より小さい場合は、そのサーバではリソースは動作しない」という条件を設定します。このために crm configure locationコマンドを使います。

# crm configure location web_location web rule -inf: not_defined default_ping_set or default_ping_set lt 100

リソース設定の初期化方法

最後に、リソース設定の初期化方法を説明します。

すべてのサーバのリソースを停止します。このための簡単な方法は、サーバの状態をスタンバイにすることです。

# crm node standby pm01
# crm node standby pm02

次にリソース設定を削除(crm configure erase コマンド)し、サーバをオンライン状態に戻します。

# crm configure erase
# crm node online pm01
# crm node online pm02

まとめ

第2回では、Pacemakerのインストールと設定方法について、順序を追って説明しました。次回は、本格的なHAクラスタを構築するための高度な設定について解説する予定です。

では、ハッピー、クラスタリング!

おすすめ記事

記事・ニュース一覧