[Pacemaker] CLUSTERIP/iptables interaction
Chris Picton
chris at ecntelecoms.com
Tue Dec 15 03:37:01 EST 2009
On Tue, 15 Dec 2009 07:13:29 +0000, Chris Picton wrote:
>>> > The monitor op shouldn't make any changes. If the rule has gone
>>> > away, the monitor op should return failure to indicate the resource
>>> > is broken, which will result in Pacemaker telling the the failed
>>> > resource to stop, and start again. Actually, from the logs it looks
>>> > like a restart was attempted, and the stop op reported success, but
>>> > the subsequent start failed for some reason.
>>> >
>>> > Regards,
>>> >
>>> > Tim
>>>
>>> Exactly. So the RA seems to have a problem handeling this error
>>> scenario correctly.
>>
>> OK. Anybody knows how should it work and where's the problem. It seems
>> like it can't find some proc file.
>
> I will have a go at fixing the RA today to do the following: 1. Detect
> the error in monitor and return the correct value 2. Stop the resource
> cleanly
> 3. Start it up again.
>
>
> Will let you know how it goes.
The below patch seems to detect this specific failure, and stop the
resource cleanly.
The start operation is able to start it up again without errors
Chris
-------------------
--- IPaddr2.orig 2009-12-15 10:07:58.000000000 +0200
+++ IPaddr2.new 2009-12-15 10:22:03.000000000 +0200
@@ -548,6 +548,7 @@
# returns:
# ok = served (for CIP: + hash bucket)
# partial = served and no hash bucket (CIP only)
+# partial2 = served and no CIP iptables rule
# no = nothing
#
ip_served() {
@@ -577,6 +578,10 @@
fi
# Special handling for the CIP:
+ if [ ! -e $IP_CIP_FILE ]; then
+ echo "partial2"
+ return 0
+ fi
if egrep -q "(^|,)${IP_INC_NO}(,|$)" $IP_CIP_FILE ; then
echo "ok"
return 0
@@ -620,7 +625,7 @@
exit $OCF_SUCCESS
fi
- if [ -n "$IP_CIP" ] && [ $ip_status = "no" ]; then
+ if [ -n "$IP_CIP" ] && [ $ip_status = "no" ] || [ $ip_status =
"partial2" ]; then
$MODPROBE ip_conntrack
$IPTABLES -I INPUT -d $BASEIP -i $NIC -j CLUSTERIP \
--new \
@@ -691,13 +696,14 @@
fi
fi
local ip_status=`ip_served`
+ ocf_log info "IP status = $ip_status, IP_CIP=$IP_CIP"
if [ $ip_status = "no" ]; then
: Requested interface not in use
exit $OCF_SUCCESS
fi
- if [ -n "$IP_CIP" ]; then
+ if [ -n "$IP_CIP" ] && [ $ip_status != "partial2" ]; then
if [ $ip_status = "partial" ]; then
exit $OCF_SUCCESS
fi
@@ -743,7 +749,7 @@
ok)
return $OCF_SUCCESS
;;
- partial|no)
+ partial|no|partial2)
exit $OCF_NOT_RUNNING
;;
*)
More information about the Pacemaker
mailing list