
SFEXはActive-Standbyのクラスタ構成で運用中、Heartbeat通信が切れた場合に両ノードがActiveとなる(スプリットブレイン状態)ことを防ぐために使用します。
バイナリファイルはRHEL5用です。
バイナリファイル(32bit) --- sfex-1.3-i386.zip[1] (52.9 KB) [md5sum: 0d6ee79540a6995468ad89f1dd6887ea]
バイナリファイル(64bit) --- sfex-1.3-x86_64.zip[2] (59.7 KB) [md5sum: 3f4e6b30daca2a681b1029c8888b9112]
ソースファイル --- sfex-1.3.tar.gz[3] (79.1 KB) [md5sum: 6bc563ad4a22d39b5f0fcf8726138ae8]
SFEXはcib.xmlの中で高いスコアが付けられたノードで開始されます。そのため、複数のノードで、同時に共有ディスクにアクセスすることはありません。
Node A
この処理は所有権の更新を意味します。
Node A
Node B
Node A
Node B
このNode B起動処理はHB通信断と同じように行われます。
この事象はほとんど発生しません。しかしながら、heartbeat通信が切れた状態で同時に複数のノードが起動された場合などに発生します。
Node A / Node B 共有ディスクへの書き込みは最終的にシリアライズされます。書き込みできるエリアは"一つ"であるためです。その結果、最後に書き込まれたノード名が残ります。 この例では、Node Bが残ります。
<cib admin_epoch="0" epoch="1" have_quorum="false" cib_feature_revision="1.3">
<configuration>
<crm_config>
<cluster_property_set id="set01">
<attributes>
<nvpair id="symmetric-cluster"
name="symmetric-cluster" value="true"/>
<nvpair id="no-quorum-policy"
name="no-quorum-policy" value="ignore"/>
<nvpair id="stonith-enabled"
name="stonith-enabled" value="false"/>
<nvpair id="short-resource-names"
name="short-resource-names" value="true"/>
<nvpair id="is-managed-default"
name="is-managed-default" value="true"/>
<nvpair id="default-resource-stickiness"
name="default-resource-stickiness" value="INFINITY"/>
<nvpair id="stop-orphan-resources"
name="stop-orphan-resources" value="true"/>
<nvpair id="stop-orphan-actions"
name="stop-orphan-actions" value="true"/>
<nvpair id="remove-after-stop"
name="remove-after-stop" value="false"/>
<nvpair id="default-resource-failure-stickiness"
name="default-resource-failure-stickiness" value="-INFINITY"/>
<nvpair id="stonith-action"
name="stonith-action" value="reboot"/>
<nvpair id="default-action-timeout"
name="default-action-timeout" value="120s"/>
<nvpair id="dc-deadtime"
name="dc-deadtime" value="10s"/>
<nvpair id="cluster-recheck-interval"
name="cluster-recheck-interval" value="0"/>
<nvpair id="election-timeout"
name="election-timeout" value="2min"/>
<nvpair id="shutdown-escalation"
name="shutdown-escalation" value="20min"/>
<nvpair id="crmd-integration-timeout"
name="crmd-integration-timeout" value="3min"/>
<nvpair id="crmd-finalization-timeout"
name="crmd-finalization-timeout" value="10min"/>
<nvpair id="cluster-delay"
name="cluster-delay" value="180s"/>
<nvpair id="pe-error-series-max"
name="pe-error-series-max" value="-1"/>
<nvpair id="pe-warn-series-max"
name="pe-warn-series-max" value="-1"/>
<nvpair id="pe-input-series-max"
name="pe-input-series-max" value="-1"/>
<nvpair id="startup-fencing"
name="startup-fencing" value="true"/>
</attributes>
</cluster_property_set>
</crm_config>
<nodes/>
<resources>
<group id="grpPostgreSQLDB">
<primitive id="prmExPostgreSQLDB" class="ocf" type="sfex" provider="heartbeat">
<operations>
<op id="exPostgreSQLDB_start"
name="start" timeout="180s" on_fail="fence"/>
<op id="exPostgreSQLDB_monitor"
name="monitor" interval="10s" timeout="60s" on_fail="fence"/>
<op id="exPostgreSQLDB_stop"
name="stop" timeout="60s" on_fail="fence"/>
</operations>
<instance_attributes id="atrExPostgreSQLDB">
<attributes>
<nvpair id="dskPostgreSQLDB"
name="device" value="/dev/cciss/c1d0p1"/>
<nvpair id="idxPostgreSQLDB"
name="index" value="1"/>
<nvpair id="cltPostgreSQLDB"
name="collision_timeout" value="1"/>
<nvpair id="lctPostgreSQLDB"
name="lock_timeout" value="70"/>
<nvpair id="mntPostgreSQLDB"
name="monitor_interval" value="10"/>
<nvpair id="fckPostgreSQLDB"
name="fsck" value="/sbin/fsck -p /dev/cciss/c1d0p2"/>
<nvpair id="fcmPostgreSQLDB"
name="fsck_mode" value="check"/>
<nvpair id="hltPostgreSQLDB"
name="halt" value="/sbin/halt -f -n -p"/>
</attributes>
</instance_attributes>
</primitive>
<primitive id="prmFsPostgreSQLDB" class="ocf" type="Filesystem" provider="heartbeat">
<operations>
<op id="fsPostgreSQLDB_start"
name="start" timeout="60s" on_fail="fence"/>
<op id="fsPostgreSQLDB_monitor"
name="monitor" interval="10s" timeout="60s" on_fail="fence"/>
<op id="fsPostgreSQLDB_stop"
name="stop" timeout="60s" on_fail="fence"/>
</operations>
<instance_attributes id="atrFsPostgreSQLDB">
<attributes>
<nvpair id="devPostgreSQLDB"
name="device" value="/dev/cciss/c1d0p2"/>
<nvpair id="dirPostgreSQLDB"
name="directory" value="/mnt/shared-disk"/>
<nvpair id="fstPostgreSQLDB"
name="fstype" value="ext3"/>
</attributes>
</instance_attributes>
</primitive>
<primitive id="prmIpPostgreSQLDB" class="ocf" type="IPaddr" provider="heartbeat">
<operations>
<op id="ipPostgreSQLDB_start"
name="start" timeout="60s" on_fail="fence"/>
<op id="ipPostgreSQLDB_monitor"
name="monitor" interval="10s" timeout="60s" on_fail="fence"/>
<op id="ipPostgreSQLDB_stop"
name="stop" timeout="60s" on_fail="fence"/>
</operations>
<instance_attributes id="atrIpPostgreSQLDB">
<attributes>
<!-- chenge ip address attribute -->
<nvpair id="ipPostgreSQLDB" name="ip" value="aaa.bbb.ccc.ddd"/>
<nvpair id="maskPostgreSQLDB" name="netmask" value="nn"/>
<nvpair id="nicPostgreSQLDB" name="nic" value="bond0"/>
</attributes>
</instance_attributes>
</primitive>
<primitive id="prmApPostgreSQLDB" class="ocf" type="pgsql" provider="heartbeat">
<operations>
<op id="apPostgreSQLDB_start"
name="start" timeout="60s" on_fail="fence"/>
<op id="apPostgreSQLDB_monitor"
name="monitor" interval="30s" timeout="60s" on_fail="fence"/>
<op id="apPostgreSQLDB_stop"
name="stop" timeout="60s" on_fail="fence"/>
</operations>
<instance_attributes id="atrApPostgreSQLDB">
<attributes>
<nvpair id="pgctl01"
name="pgctl" value="/usr/local/pgsql/bin/pg_ctl"/>
<nvpair id="psql01"
name="psql" value="/usr/local/pgsql/bin/psql"/>
<nvpair id="pgdata01"
name="pgdata" value="/mnt/shared-disk/pgsql/data"/>
<nvpair id="pgdba01"
name="pgdba" value="postgres"/>
<nvpair id="pgdb01"
name="pgdb" value="template1"/>
<nvpair id="logfile01"
name="logfile" value="/var/log/pgsql.log"/>
</attributes>
</instance_attributes>
</primitive>
</group>
</resources>
<constraints>
<rsc_location id="rlcPostgreSQLDB" rsc="grpPostgreSQLDB">
<rule id="rulPostgreSQLDB_node01" score="200">
<expression id="expPostgreSQLDB_node01"
attribute="#uname" operation="eq" value="sfex01" />
</rule>
<rule id="rulPostgreSQLDB_node02" score="100">
<expression id="expPostgreSQLDB_node02"
attribute="#uname" operation="eq" value="sfex02"/>
</rule>
</rsc_location>
<rsc_location id="ping1:disconn" rsc="grpPostgreSQLDB">
<rule id="ping1:disconn:rule" score="-INFINITY" boolean_op="and">
<expression id="ping1:disconn:expr:defined"
attribute="default_ping_set" operation="defined"/>
<expression id="ping1:disconn:expr:positive"
attribute="default_ping_set" operation="lt" value="100"/>
</rule>
</rsc_location>
</constraints>
</configuration>
<status/>
</cib>
sfex -- バージョン1.3[3]
Heartbeat用 追加パッケージ集 (contrib)[4]
| [1] | http://wiki.linux-ha.org/sfex?action=AttachFile&do=get&target=sfex-1.3-i386.zip |
| [2] | http://wiki.linux-ha.org/sfex?action=AttachFile&do=get&target=sfex-1.3-x86_64.zip |
| [3] | http://wiki.linux-ha.org/sfex?action=AttachFile&do=get&target=sfex-1.3.tar.gz |
| [4] | http://www.linux-ha.org/ja/Contrib_ja |
This information provided courtesy of the Linux-HA project at http://linux-ha.org/