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

第3回 Pacemakerでいろいろ設定してみよう![構築応用編]

この記事を読むのに必要な時間:およそ 8 分

さて,第2回では単純な1+1構成と簡単なリソースの起動を試してみましたが,今回はスプリットブレイン対策を考えてみたいと思います。

スプリットブレインって?

Pacemakerを設定する上で欠かせないのがスプリットブレイン対策です。スプリットブレインとはインターコネクト(ハートビート)通信が全て切断された状態のことです。

通常はあるサーバ(DCと呼ぶ)のPacemakerがクラスタ全体の指揮をとっていますが,スプリットブレインになると,各サーバのPacemakerが勝手に指揮をとり始めます。そうなると最悪の場合,各サーバでリソースが起動し,リソースの種類によってはデータの破壊やIPアドレスの競合といった状態を引き起こしてしまいます。

図1 スプリットブレイン

図1 スプリットブレイン

こういった状態を避けるためにインターコネクト用LANは冗長化することが望ましいのですが,それでもスプリットブレインになった時の対策として,Pacemakerの機能であるSTONITHや,リソースエージェント(RA)のsfex, VIPcheckを紹介します。

STONITH

STONITHはスプリットブレイン対策として最も有効な機能のひとつで,スプリットブレインになった場合に,強制的に相手のサーバをフェンシング (再起動) することで,最悪の事態を回避します。

この機能を使うには,相手から電源を落としてもらうためのハードウェア制御ボードが必要になります。現在,標準規格のIPMIをはじめ,HP社製サーバ搭載のiLO, IBM社製サーバ搭載のIMM等,複数の制御ボードに対応しており,それぞれのハードウェアに対応したプラグインが提供されています。どのようなプラグインが用意されているかは,以下のコマンドで確認できます。

# crm ra list stonith

なお上記コマンドで表示されるプラグインは,実際に電源を制御する実プラグイン以外に,STONITHの動作を補助するためのプラグインもあり,実際にはこれら補助プラグインと実プラグインを連携させて制御します。

では実際に設定してみましょう。クラスタ制御機能(Heartbeat)の設定は,第2回の設定を使用してください。今回は標準規格のIPMIを例に説明していきます。また説明をわかりやすくするために,他のリソースや補助プラグインは動かさず,実プラグインのみを動作させます。

ネットワーク構成はSTONITH専用にインターコネクト用LANとは別のインターフェースを用意し,相手のサーバのIPMIボードと接続してください。またIPMIボードには固定IPを割り振り,電源制御できるアカウントを用意しておいてください。今回は次のような設定を前提とします。

図2 STONITHの構成

図2 STONITHの構成

表1 ネットワーク設定

 IPMIボード
IPアドレス
IPMIボード
ユーザID
IPMIボード
パスワード
pm01192.168.100.1ipmiuser1ipmipass1
pm02192.168.100.2ipmiuser2ipmipass2

まず,環境によってはIPMI操作用のコマンドがインストールされていない可能性がありますので,OpenIPMI-toolsをインストールします。

(各サーバで実行)
# yum -y install OpenIPMI-tools

第2回のリソース制御機能(Pacemaker)の設定が残っている場合は一旦Pacemakerを停止し,設定をクリアします。第2回ではcrmコマンドでクリアしましたが,今回はファイルを削除する方法でやってみます。

(各サーバで実行)
# /etc/init.d/heartbeat stop
(各サーバで実行)
# rm -f /var/lib/heartbeat/crm/*
# /etc/init.d/heartbeat start

空っぽの状態でPacemakerが起動し,両サーバがOnlineになったことを確認します。

# crm_mon -A
============
省略
============

Online: [ pm01 pm02 ]

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

では設定していきます。設定には通常のリソース設定と同様にcrmコマンドを使用します。crmコマンドって何?という人は第2回を参照してください。今回は対話モードを使って設定してみたいと思います。

# crm configure
crm(live)configure# 

まずはクラスタ全体の設定です。上記プロンプトで以下の設定を入力します。

見やすいように"\"を使って改行しています。
property $id="cib-bootstrap-options" \
	no-quorum-policy="ignore" \
	stonith-enabled="true" \
	startup-fencing="false"

rsc_defaults resource-stickiness="INFINITY" \
                migration-threshold="1"

stonith-enabled="true" で,STONITH機能を有効にします。startup-fencingは,Pacemaker起動時に相手のサーバの状態が把握できない場合に念のために相手をフェンシングする機能で,起動時にすでにスプリットブレインになっていた場合などに有効に働きます。今回はfalse(無効)を使用します。no-quorum-policyは第2回の時と同様,2台構成の場合はおまじないと思って,ignoreを設定しておいてください。rsc_defaultsの設定も第2回と同様に設定します。

次にプラグインの設定です。今回はIPMIなので,external/ipmiというプラグイン(以下ipmiプラグイン)を使用します。なお,実際のプラグインの置き場所は64bit環境の場合/usr/lib64/stonith/plugins/ になります。では,ipmiプラグインにどのようなパラメータが必要なのか調べます。

# crm ra info stonith:external/ipmi
IPMI STONITH external device (stonith:external/ipmi)

ipmitool based power management. Apparently, the power off
method of ipmitool is intercepted by ACPI which then makes
a regular shutdown. If case of a split brain on a two-node
it may happen that no node survives. For two-node clusters
use only the reset method.

Parameters (* denotes required, [] the default):

hostname (string): Hostname
    The name of the host to be managed by this STONITH device.

ipaddr (string): IP Address
    The IP address of the STONITH device.

userid (string): Login
    The username used for logging in to the STONITH device.

passwd (string): Password
    The password used for logging in to the STONITH device.

interface (string, [lan]): IPMI interface
    IPMI interface to use, such as "lan" or "lanplus".

stonith-timeout (time, [60s]):
    How long to wait for the STONITH action to complete. Overrides the stonith-timeout cluster property

priority (integer, [0]):
    The priority of the stonith resource. The lower the number, the higher the priority.

Operations' defaults (advisory minimum):

    start         timeout=60
    stop          timeout=15
    status        timeout=60
    monitor_0     interval=3600 timeout=60

7つのパラメータがあるようです。

著者プロフィール

松尾隆利(まつおたかとし)

NTTオープンソースソフトウェアセンタ所属。

Pacemakerに初めて触れて早1年。Heartbeat時代のxml設定の苦労をあまり知らないまま育つ。現在はLinux-HA Japanオリジナル機能の開発や,Webページのメンテナンス,オープンソースカンファレンス出展などに携わる。

コメント

コメントの記入