設定のヒント
一般的な設定項目
/etc/cluster/cluster.conf に記載
<?xml version="1.0"?>
<cluster config_version="16" name="cluster01">
<cman expected_votes="3" two_node="0"/> // 正常時のVote数を記載
<clusternodes> // クラスタノードの情報
<clusternode name="node01" nodeid="1" votes="1">
<fence>
<method name="method01">
<device name="device00" %%その他のオプション%% /> // fencedeviceのnameを指定
</method>
</fence>
</clusternode>
<clusternode name="node02" nodeid="2" votes="1">
<fence>
<method name="method01">
<device name="device00" %%その他のオプション%% /> // fencedeviceのnameを指定
</method>
</fence>
</clusternode>
</clusternodes>
<totem token="20000"/> // ハートビートによる障害検知時間
<quorumd interval="1" label="qdisk01" tko="10" votes="1" master_wins="1"> // Quorum Diskの設定
// Heuristicを指定する場合はここに記載(master_winsと併用不可)
// 例:<heuristic interval="2" program="/usr/local/bin/pingcheck.sh" score="1" tko="3"/>
</quorumd>
<fencedevices>
<fencedevice name="device00" agent="your_agent" option="reboot" %%その他のオプション%% />
</fencedevices>
<rm>
<failoverdomains> // フェイルオーバドメインの設定
<failoverdomain name="dom01" ordered="0" restricted="1">
<failoverdomainnode name="node01" priority="1"/>
<failoverdomainnode name="node02" priority="2"/>
</failoverdomain>
</failoverdomains>
<service autostart="0" domain="dom01" name="service01"> // サービスの設定
<ip address="192.168.7.99" monitor_link="on"/>
<fs device="/dev/sdb" fstype="ext4" mountpoint="/data01" self_fence="1" name="data_fs">
<script file="/etc/init.d/myappl" name="myappl"/>
</fs>
</service>
</rm>
</cluster>
フェンスデバイスの設定方法
各ノードが使用するフェンスデバイスは、clusternodeタグ以下のfence/method/deviceタグのnameオプションに指定します。これは、対応するフェンスデバイス(fencedeviceタグ)のnameオプションに一致させます。(nameオプションに指定する名前は自由に決めて構いません。)
また、フェンスデバイス側のfencedeviceタグには、nameオプション以外に次のオプションを必須で指定します。
agent: 使用するフェンスエージェントの種類(fence_ipmilanなど)
option: フェンス処理でノードを再起動するのか、停止するのかを指定(reboot、もしくはoff)
これら以外のオプションは、ノード側のdeviceタグ、もしくはフェンスデバイス側のfencedeviceタグに指定します。1つのfencedeviceタグを複数のノードで共通に指定する場合、ノード個別のオプションをdeviceタグに指定して、全ノードで共通のオプションをfencedeviceタグに指定するような使い方ができます。
各フェンスエージェントが受け付けるオプションは、該当のフェンスエージェントのmanページで「STDIN PARAMETERS」として説明されています。
フェンスエージェントの一覧はマニュアルを参照してください。
複数のフェンスデバイスの指定
複数のフェンスデバイスを使用する場合、次の2種類の指定ができます。
1つのmethodタグに複数のdeviceタグを指定する方法
複数のmethodタグを指定する方法
1の例
<clusternode name="node01" nodeid="1" votes="1">
<fence>
<method name="method01">
<device name="power_device"/>
<device name="io_device"/>
</method>
</fence>
</clusternode>
2の例
<clusternode name="node01" nodeid="1" votes="1">
<fence>
<method name="method01">
<device name="power_device01"/>
</method>
<method name="method02">
<device name="power_device02"/>
</method>
</fence>
</clusternode>
1の場合は、method内の全てのdeviceが実行されて、全てが成功した際にフェンス処理が成功したとみなされます。
2の場合は、上から順番にmethodが実行されて、フェンスに成功した所で処理が終わります。残りのmethodは実行されません。
したがって、念のためにノード再起動を複数の方法で実行するような場合は、2の方法を使用します。強制再起動とSAN Switchのポートクローズを併用するような場合は、1の方法を使用します。
障害検知時間の設定
ハートビートによる障害検知時間は、最上位のclusterタグ直下のtotemタグのオプションで指定します。単位はmsecです。
<totem token="20000"/>
Quorum Diskによる障害検知時間は、最上位のclusterタグ直下のquorumdタグのオプションで指定します。
<quorumd interval="1" label="qdisk01" master_wins="1" tko="10" votes="1"/>
interval(sec)ごとにQuorum Diskへの書き込みを行って、tko(回)連続して書き込みが確認できないと障害と判断されます。この例では、障害検知時間10秒になります。
[注意]Quorum Diskを使用する場合、ハートビートによる障害検知時間は、Quorum Diskによる障害検知時間の2倍以上に設定する必要があります。
ipリソースの設定方法
ipリソースのaddressオプションには、サブネットマスクを指定してはいけません。既存のIPアドレスから同じサブネットに属するものを自動的に発見して、そのIPアドレスを持つデバイスに対して、同じサブネットで指定のIPアドレスを追加します。
lvmリソースの設定方法
共有ディスクのLUN上にLVMによる論理ボリュームを作成して、その上のファイルシステムをHAリソースとして使用する方法です。
(1) クラスタの各ノードで次の準備を行います。
/etc/lvm/lvm.confのvolume_list定義部分に、自身のノード名を次のように記載します。cluster.confに指定するノード名(この例ではnode01h)の前に@を付けます。(ノードによって設定するノード名が変わる点に注意してください。)
volume_list = [ "@node01h" ]
HAリソース以外に使用するボリュームグループがある場合は、次のように該当のボリュームグループ名(この例ではrootvg)をリストに追加しておきます。(逆に、HAリソースとして使用するボリュームグループは追加してはいけません。)
volume_list = [ "@node01h", "rootvg" ]
initrdを再作成して、再起動します。/etc/lvm/lvm.confを編集した後は、必ずinitrdの再作成が必要ですので注意してください。
# mkinitrd -f /boot/initramfs-$(uname -r).img $(uname -r)
# reboot
(2) クラスタ内の1つのノードで次の手順で、論理ボリュームとファイルシステムを作成します。
この例では、datavg00/datalv00を作成した上でファイルシステムを作成します。lvcreateを実行する前に、"vgchange --addtag" でボリュームグループにノード名のタグをつける必要があるので注意してください。
# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
# vgcreate datavg00 /dev/sdb
Volume group "datavg00" successfully created
# vgchange --addtag node01h datavg00
Volume group "datavg00" successfully changed
# lvcreate -L 200M -n datalv00 datavg00
Logical volume "datalv00" created
# mke2fs -t ext4 /dev/datavg00/datalv00
# vgchange -an datavg00
0 logical volume(s) in volume group "datavg00" now active
# vgchange --deltag node01h datavg00
Volume group "datavg00" successfully changed
/etc/cluster/cluster.confにlvmリソースとfsリソースを次のように定義します。(ここでは、サンプルでscriptリソースも追加しています。)
<lvm lv_name="datalv00" name="data_lvm00" self_fence="1" vg_name="datavg00">
<fs device="/dev/datavg00/datalv00" fstype="ext4" mountpoint="/data00" name="data_fs01" self_fence="1">
<script file="/etc/init.d/myappl" name="myappl"/>
</fs>
</lvm>
以上で設定は完了です。lvmリソースおよびfsリソースのself_fenceタグは、リソース障害による引き継ぎ時に、ディアクティベート、およびアンマウントに失敗した際に自発的に強制再起動するためのものです。
この手順で作成した論理ボリュームを手動でアクティベートして使用するには、最初の手順のように明示的にタグのつけ外しをする必要があります。これにより、誤って両ノードで同時にアクティベートすることを防止しています。