Red Hat5.5で2+ 1フェイルオーバークラスターを作成しています。4つのサービスのうち2つは同じノードで実行し、同じ仮想IPアドレスを共有する必要があります。各ノードのサービスの1つ(以下のcluster.confではdisk1およびdisk2と呼ばれます)には(SAN)ディスクが必要ですが、もう1つは必要ありません(これらは-と呼ばれます)。 nodisk1およびnodisk2)。したがって、各ノードには、ディスクを必要とする1つのサービス(diskN)と、ディスクを必要としない対応するサービス(nodiskN)が必要です。 HA-LVMを使用しています。
SAN)に接続された2つのインターフェイスを(ifdownを介して)シャットダウンしてSAN障害をシミュレートすると、ディスクを必要とするサービスが無効になり、もう一方は実行を続けます、予想どおり。驚くべきことに(そして残念ながら)、同じマシン上の2つのサービスによって共有されている仮想IPアドレスも削除され、実行中のサービスが使用できなくなります。IPアドレスを維持するようにクラスターを構成するにはどうすればよいですか?これまでに見つけた方法は、ディスクを必要としない各サービスに異なる仮想IPアドレスを割り当てることでした(次のcluster.confには実装されていません)。
cluster.confは次のようになります。
<?xml version="1.0" ?>
<cluster config_version="1" name="cluster">
<fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="3"/>
<cman shutdown_timeout="10000"/>
<clusternodes>
<clusternode name="node1" nodeid="1" votes="1">
<fence>
<method name="1">
<device name="device1"/>
</method>
</fence>
</clusternode>
<clusternode name="node2" nodeid="2" votes="1">
<fence>
<method name="1">
<device name="device2"/>
</method>
</fence>
</clusternode>
<clusternode name="node3" nodeid="3" votes="1">
<fence>
<method name="1">
<device name="device3"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
<fencedevice agent="fence_ilo" ipaddr="10.0.24.101" login="admin" name="device1" passwd="password"/>
<fencedevice agent="fence_ilo" ipaddr="10.0.24.102" login="admin" name="device2" passwd="password"/>
<fencedevice agent="fence_ilo" ipaddr="10.0.24.103" login="admin" name="device3" passwd="password"/>
</fencedevices>
<rm>
<failoverdomains>
<failoverdomain name="domain1" nofailback="0">
<failoverdomainnode name="node1" priority="1"/>
</failoverdomain>
<failoverdomain name="domain2" nofailback="0">
<failoverdomainnode name="node2" priority="1"/>
</failoverdomain>
</failoverdomains>
<resources>
<ip address="10.0.24.111" monitor_link="1"/>
<ip address="10.0.24.112" monitor_link="1"/>
</resources>
<service autostart="1" exclusive="0" name="disk1" recovery="restart" domain="domain1">
<ip ref="10.0.24.111"/>
<script file="/etc/init.d/disk1" name="disk1"/>
<fs device="/dev/VolGroup10/LogVol10" force_fsck="0" force_unmount="1" fstype="ext3" mountpoint="/mnt/lun1" name="lun1" self_fence="1"/>
<lvm lv_name="LogVol10" name="VolGroup10/LogVol10" vg_name="VolGroup10"/>
</service>
<service autostart="1" exclusive="0" name="nodisk1" recovery="restart" domain="domain1">
<ip ref="10.0.24.111"/>
<script file="/etc/init.d/nodisk1" name="nodisk1"/>
</service>
<service autostart="1" exclusive="0" name="disk2" recovery="restart" domain="domain2">
<ip ref="10.0.24.112"/>
<script file="/etc/init.d/disk2" name="disk2"/>
<fs device="/dev/VolGroup20/LogVol20" force_fsck="0" force_unmount="1" fstype="ext3" mountpoint="/mnt/lun2" name="lun2" self_fence="1"/>
<lvm lv_name="LogVol20" name="VolGroup20/LogVol20" vg_name="VolGroup20"/>
</service>
<service autostart="1" exclusive="0" name="nodisk2" recovery="restart" domain="domain2">
<ip ref="10.0.24.112"/>
<script file="/etc/init.d/nodisk2" name="nodisk2"/>
</service>
</rm>
</cluster>
このIPを維持するには、別のサービスが必要になると思います。問題は、SANサービスが失敗すると、rgmanagerがサービスを実行しているノードでip addr del <ip>
を発行することです。このIPは共有されているため、他のサービスからヤンクアウトされます。次のような別のサービスを追加する必要があります。
<service autostart="1" domain="<fo_domain_of_services>" name="floating_ip">
<ip ref="your_ip" />
</service>
フェイルオーバードメインを設定する方法が重要です。間違って設定すると、IPが一方のノードに配置され、サービスがもう一方のノードに配置されることになります。残念ながら、現在テストするクラスターはありませんが、3つすべてのサービス(IPとIP自体を必要とする2つ)を、少なくとも優先度の高い単一の制限付きフェイルオーバードメインに配置する必要があると考えています。 1.1。
手動で/etc/cluster/cluster.conf
に変更を加えてバージョン番号をインクリメントしてから、ccs_tool update /etc/cluster/cluster.conf
を使用して構成を他のノードにプッシュする場合は常に注意してください。もう1つ覚えておくべきことは、ccs_tool
は段階的に廃止されていますが、RHEL5.4では引き続き機能するはずです。覚えておくべきもう1つのコマンドはrg_test
です。これにより、サービスを開始/停止するときにクラスターが何をしているかを正確に確認できます。デバッグレベルを設定し、常にログファイルを監視します。幸運を!
これを機能させる唯一の方法は、ディスクを必要としないサービスに独自の仮想IPアドレスを与えることでした。
cluster.confは次のようになります。
<?xml version="1.0" ?>
<cluster config_version="1" name="cluster">
<fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="3"/>
<cman shutdown_timeout="10000"/>
<clusternodes>
<clusternode name="node1" nodeid="1" votes="1">
<fence>
<method name="1">
<device name="device1"/>
</method>
</fence>
</clusternode>
<clusternode name="node2" nodeid="2" votes="1">
<fence>
<method name="1">
<device name="device2"/>
</method>
</fence>
</clusternode>
<clusternode name="node3" nodeid="3" votes="1">
<fence>
<method name="1">
<device name="device3"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
<fencedevice agent="fence_ilo" ipaddr="10.0.24.101" login="admin" name="device1" passwd="password"/>
<fencedevice agent="fence_ilo" ipaddr="10.0.24.102" login="admin" name="device2" passwd="password"/>
<fencedevice agent="fence_ilo" ipaddr="10.0.24.103" login="admin" name="device3" passwd="password"/>
</fencedevices>
<rm>
<failoverdomains>
<failoverdomain name="domain1" nofailback="0">
<failoverdomainnode name="node1" priority="1"/>
</failoverdomain>
<failoverdomain name="domain2" nofailback="0">
<failoverdomainnode name="node2" priority="1"/>
</failoverdomain>
</failoverdomains>
<resources>
<ip address="10.0.24.111" monitor_link="1"/>
<ip address="10.0.24.112" monitor_link="1"/>
<ip address="10.0.24.113" monitor_link="1"/>
<ip address="10.0.24.114" monitor_link="1"/>
</resources>
<service autostart="1" exclusive="0" name="disk1" recovery="restart" domain="domain1">
<ip ref="10.0.24.111"/>
<script file="/etc/init.d/disk1" name="disk1"/>
<fs device="/dev/VolGroup10/LogVol10" force_fsck="0" force_unmount="1" fstype="ext3" mountpoint="/mnt/lun1" name="lun1" self_fence="1"/>
<lvm lv_name="LogVol10" name="VolGroup10/LogVol10" vg_name="VolGroup10"/>
</service>
<service autostart="1" exclusive="0" name="nodisk1" recovery="restart" domain="domain1">
<ip ref="10.0.24.112"/>
<script file="/etc/init.d/nodisk1" name="nodisk1"/>
</service>
<service autostart="1" exclusive="0" name="disk2" recovery="restart" domain="domain2">
<ip ref="10.0.24.113"/>
<script file="/etc/init.d/disk2" name="disk2"/>
<fs device="/dev/VolGroup20/LogVol20" force_fsck="0" force_unmount="1" fstype="ext3" mountpoint="/mnt/lun2" name="lun2" self_fence="1"/>
<lvm lv_name="LogVol20" name="VolGroup20/LogVol20" vg_name="VolGroup20"/>
</service>
<service autostart="1" exclusive="0" name="nodisk2" recovery="restart" domain="domain2">
<ip ref="10.0.24.114"/>
<script file="/etc/init.d/nodisk2" name="nodisk2"/>
</service>
</rm>
</cluster>
ディスクに依存する2つのサービスをそれぞれのリソースグループに入れてみましたか?
最善の行動は、障害が検出されたときにIPと実行中のサービスを削除してから、IPと両方のサービスを別のクラスターメンバーに移動することだと思われます。