はじめに
第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 |
OS | CentOS5.5(x86_64) |
説明の都合上、サーバ名はpm01とpm02とします。ネットワーク設定は表2の通りです。
表2 ネットワーク設定
ネットワークアドレス /ネットマスク長 | 用途 | 仮想IP | pm01のIPアドレス(デバイス) | pm02のIPアドレス(デバイス) |
192.168.68.0 /24 | サービスLAN | 192.168.68.100 | 192.168.68.101 (eth0) | 192.168.68.102 (eth0) |
192.168.32.0 /24 | インターコネクトLAN | - | 192.168.32.101 (eth1) | 192.168.32.102 (eth1) |
192.168.64.0 /24 | インターコネクトLAN | - | 192.168.64.101 (eth2) | 192.168.64.102 (eth2) |
NICは3つ使用します。1つはサービス提供用、残りの2つはインターコネクト通信用です。ネットワーク構成は図1のようになっているとし、サーバからインターネット接続できるようにしてください。
作業はrootユーザで行います。sshでリモート作業する場合には、必要に応じてパスワード入力してください。 作業用にサーバpm01で、ターミナルを1つ起動してください。ほとんどの作業はこのターミナルで行います。
Pacemakerのインストール
第1回でPacemakerは複数のコンポーネントの組み合わせとして提供されるという話をしました。そこで、Linux-HA Japanでは、必要なrpmがすべて入ったyumリポジトリ(Pacemakerリポジトリパッケージ)を配布しています。このyumリポジトリにはLinux-HA Japanで開発したオリジナルパッケージも含まれています。
Linux-HA Japan(図2)にアクセスし、Pacemakerリポジトリパッケージをダウンロードします。ダウンロードしたファイルを、サーバpm01に転送します。
この後、サーバpm01上での作業に移ります。Pacemakerリポジトリパッケージはカレントディレクトリにあるとします。これを/tmpに展開し、yum でインストールします。
オリジナルパッケージpm_extrasを追加することで、インターコネクトLAN故障が標準ツールで見えるようになります。
サーバpm02にもリポジトリパッケージを展開し、Pacemakerをインストールします。作業中のターミナルから次のコマンドを実行してください。
Pacemakerの自動起動をオフにします。
Pacemakerの自動起動は、オン/オフ両方の運用がありえます。オンの場合は、サーバ再起動後には自動的にクラスタに組み込まれます。オフの場合は、手動でPacemakerを起動します。故障が原因で再起動したときに、その原因を調査したい場合はオフの運用がいいでしょう。
クラスタ制御機能(Heartbeat)の設定
設定は、すべてのサーバで同一にします。最初にpm01を設定し、それをpm02に反映します。
ha.cf
Heartbeatの設定は、 /etc/ha.d/ha.cfで行います。次のコマンドで設定ファイルを作成します。
主な設定項目の簡単な意味は次の通りです。
- pacemaker:リソース制御にPacemakerを使用するかどうか
- udpport:インターコネクト通信で使用するudpポート
- keepalive:インターコネクト通信の送信間隔(秒)
- deadtime:インターコネクト通信途絶後に故障と判断するまでの時間(秒)
- initdead:初期起動時に他のサーバの起動を待つ時間(秒)
- logfacility:syslog経由でログを出力するときのファシリティ指定
- bcast:インターコネクト通信(ブロードキャスト)に使用するデバイスの指定
- node:クラスタに参加するサーバ名を指定
- respawn:起動するサブプロセスの指定
respawnで指定しているifcheckdはpm_extrasに含まれるLinux-HA Japanオリジナルパッケージで、インターコネクト通信が正常かどうかを見えるようにします。
authkeys
次に、/etc/ha.d/authkeysを作成します。これは、インターコネクト通信の認証のために使用します。
このファイルはrootのみにread権限を与えてください。
syslog.conf
次に、syslogdの設定を変更します。これは必須ではありませんが、Pacemakerのログは多めなので、ログファイルを分けたほうが望ましいです。/etc/syslog.confをエディタで開き、下記の箇所を変更します。
変更前
変更後
また、ファイルの最後に下記を追加します。
以上の変更後/etc/syslog.confを保存します。変更を反映するために、syslogdを再起動します。
pm02への設定反映
以上の作業を、pm02に反映します。
Pacemakerの起動
では、Pacemakerを起動してみましょう。
クラスタの状態を確認するには、crm_monコマンドを使用します。
初めて起動した場合には、次のように表示されていると思います。
しばらく待つと、次のような表示に変わります。 Onlineにサーバ名が表示されればOKです。
Node Attributes: の下に pm01-eth1 : up と表示されています。これは、サーバpm01 のインターコネクト通信用デバイスeth1が正常であるということを表しています。 これが見えるのは、 ha.cfで設定した ifcheckd の機能です。
crm_monを終了するには、CTRL-Cを押してください。
Pacemakerの停止
Pacemakerの停止方法は次の通りです。
リソース制御機能(Pacemaker)の設定
次に、リソース制御機能を設定します。今回は、Apacheサーバのクラスタを構築します。構成は、図3の通りです。クライアントからは仮想IPに対してアクセスするようにします。
Pacemakerで管理すべきリソースは、Apacheと仮想IPです。運用系で故障が発生した場合は、この2つのリソースはセットでフェイルオーバさせます。
事前準備
Apacheをインストールします。
特に設定は不要ですが、どちらのサーバのApacheにアクセスしているかわかるように、index.htmlを用意しておきます。
リソース設定の種類
リソース設定の基本は、リソースエージェント(RA)です。「聞いていないよ~」という人は第1回を読み返してください。リソース設定でよく使う用語について簡単に説明しておきます。
- primitive:
すべてのリソース設定の最小単位。RAはまずprimitive設定することから始まります。
- clone:
同じ設定のリソースを複数のノードで動作させたい場合に使用します。 primitive 設定後にclone化します。ネットワーク監視、ディスク監視などで使用します。
- group:
複数のリソースをまとめてフェイルオーバさせるために使用します。group内のprimitiveには、起動/停止時の順序も合わせて設定されます。
今回の例では、Apacheと仮想IPはgroup設定を行います。
crmコマンド
リソース設定は、crmコマンドで行います。crmコマンドは非常に多機能で、これ1つでリソース設定からサーバ・リソース管理、状態確認などが行えます。
コマンドの実行方法しては、対話モード、ワンライナー、バッチモードの3つがあります。それぞれについて、クラスタに参加しているサーバの一覧を見る手順を例に、手順を説明します。
引数なしで起動すると、対話モードで使えます。 help を入力すると、そこで使えるコマンドが表示されます。タブキーを入力すると、コマンドや引数についても補完が効くのでとても便利です。通常は対話モードで使うことが多いでしょう。
引数でコマンドを与えると、ワンライナー(1行プログラム)として使うことができます。
あるいは、コマンドを標準入力でcrmに渡してバッチモードで実行することもできます。実行すべきコマンドが決まっている場合はこの方法が便利です。
以降の設定手順では、ワンライナーまたは対話モードを使用しますが、まとめてコマンドを実行したい場合は、バッチモードを使ってみてください。
ではさっそくリソース設定を始めましょう。
クラスタ全体の設定
次のコマンドを実行してください。
1行目では、クラスタ全体に関係する設定を行っています。
- no-quorum-policy:3サーバ以上の構成で、クラスタに参加するサーバ数が過半数に満たない場合の動作ポリシーを指定。2サーバの場合はおまじないと思ってignoreを設定してください
- stonith-enabled:STONITH機能を有効にするかどうかを指定。詳細は次回で説明します
2行目では、リソース動作のデフォルト値を設定しています。
- resource-stickiness:リソース移動を固定する優先度を指定。INFINITYを指定すると不具合のない限りは稼働中のリソースは移動せず、自動フェイルバックなしの動作に相当します
- migration-threshold:故障を検知した場合に同一サーバでリソースの再起動を試みる回数を指定
RAの設定
RAを設定するコマンドは、crm configure primitiveです。使い方をcrmのヘルプで調べてみましょう。
- <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にまとめます。
リソース名は、ユーザがわかりやすい名前をつけられます。
Apacheを管理するためのRAは、apacheです。次のコマンドでApacheのRAを設定します。
クラスタの状態を確認します。
サーバpm02でApacheが動作していることがわかります。
次に、仮想IPを設定します。RAはIPaddr2を使います。
仮想IPとApacheは常に同じサーバで動作させるためgroup設定にします。このために、crm configure groupコマンドを使います。
クラスタの状態を確認します。
vipとhttpdが同じサーバで動作していることを確認してください。この例では、pm02で動作していますが、場合によってはpm01で動作しているかもしれません。
Webブラウザで http://192.168.68.100/ にアクセスしてください。pm02で動作していれば、
と表示されるはずです。
ネットワーク監視
Apacheでサービスを提供するためには、サービスLANのネットワークが正常であることが必要です。このチェックのために、図1のゲートウェイ(192.168.68.2)までのネットワーク到達性を監視する設定を追加してみましょう。
ネットワーク監視をするためのRAは、pingdです。ネットワーク監視はすべてのサーバで動いている必要があるため、clone設定を使用します。
pingdの設定内容について補足します。
host_listで指定されたIPアドレスにICMPパケットを送信しネットワークの到達性を確認します。OKならdefault_ping_setにmultiplierの値をセットします。NGなら、default_ping_setの値は 0 になります。
クラスタの状態を確認します。default_ping_setの値を確認するため、crm_monに-Aオプションをつけて実行します。
どちらのサーバの値も、正常値(100)になっていることがわかります。
ネットワーク監視に失敗したサーバではApacheは動作しないように設定します。このために、「 default_ping_setが正常値(100)より小さい場合は、そのサーバではリソースは動作しない」という条件を設定します。このために crm configure locationコマンドを使います。
リソース設定の初期化方法
最後に、リソース設定の初期化方法を説明します。
すべてのサーバのリソースを停止します。このための簡単な方法は、サーバの状態をスタンバイにすることです。
次にリソース設定を削除(crm configure erase コマンド)し、サーバをオンライン状態に戻します。
まとめ
第2回では、Pacemakerのインストールと設定方法について、順序を追って説明しました。次回は、本格的なHAクラスタを構築するための高度な設定について解説する予定です。
では、ハッピー、クラスタリング!