[Linux-cluster] Help with a two node cluster for a web server needed

Lon Hohberger lhh at redhat.com
Mon Jan 14 20:03:46 UTC 2008


So, what was happening was this:

1. unplug cable
2. cman transitions
3. fencing occurs
4. qdiskd detects negative transition

Here's what we want on the "dead" node:

1. unplug cable
2. qdiskd detects negative transition from heuristic



Here's your configuration:

    <quorumd interval="1" label="Qdisk1" tko="5" votes="1">
        <heuristic interval="1" program="ping 10.200.10.1 -c1 -t1"
score="1" tko="3"/>
    </quorumd>


First, let's ping the router with the cable unplugged to see how long it
takes for our heuristic to complete when things are "broken".  On my
machine:

[lhh at ayanami ~]$ time ping -c1 -t1 frederick
PING frederick (12.1.2.99) 56(84) bytes of data.
>From ayanami (12.1.2.37) icmp_seq=1 Destination Host Unreachable

--- frederick ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms


real    0m3.006s
^^^^^^^^^^^^^^^^
user    0m0.000s
sys     0m0.000s

Ok - so, 3 seconds for ping to "not find" a host if routing is wrong or
the host is down, sleep 1 second, repeat 3x (tko!) - if dead 3x (tko
count), qdisk removes the vote from CMAN.  That means if the host is
down, it will take qdisk about 3 * (3+1) = 12 seconds to kill its vote
with CMAN. [NOTE: keep in mind, it might not be 3 seconds for your
configuration...]

CMAN's default failover time is 5 seconds (this is really openais's
Totem protocol token timeout, if you want to be technical).

12 > 5, meaning qdiskd can't do much to help before CMAN takes action.
We need to flip these times so that CMAN times out *after* qdisk.  This
way, qdiskd can say "Ok! I'm dead!" - and either take action (reboot by
default) or remove its vote from CMAN.


So, the practical rules for timings are basically like this:

* Heuristics should transition before QDisk.  x < y.

* Qdisk should transition before CMAN - in a little less than 1/2 the
time, actually.  y * 2 < z


Option 1:

Make 1 tko sufficient by making the heuristic do more work.  In my quick
testing, the same 3 seconds for 1 packet was used for 3 packets.

Also, we still want CMAN to time out after qdisk - which it won't yet.
So, we need to add a tag to cluster.conf that instructs totem to report
a node as down after a period longer than qdisk (a little more than
double, as noted above):
  
    ...
    <quorumd ...>
        <heuristic interval="1" program="ping 10.200.10.1 -c3 -t1"
score="1" tko="1"/>
    </quorumd>
    <totem token="11000"/>
    ...

This says 110000 milliseconds, or 11 seconds, is required before totem
(and therefore, CMAN) will declare a node dead (2 * qdisk_timeout) = 10.
Toss in a second for fun, we get 11 seconds.

Since the ping timeout for -c3 is 3 seconds and we have a tko of 1, it
should take 3-4 seconds for ping to return a failure.

3 < 5
5 * 2 < 11


Option 2: 

Make things fit around your heuristic.  Given our 12 second "negative"
case for our heuristic/tko, we can simply make qdisk time out in >12
seconds.  Then, we double that and add a bit for CMAN:

    ...
    <quorumd interval="1" label="Qdisk1" tko="13" votes="1">
        <heuristic interval="1" program="ping 10.200.10.1 -c1 -t1"
score="1" tko="3"/>
    </quorumd>
    <totem token="27000"/>
    ...

12 < 13 
13 * 2 < 27


Let me know if this helps you, so I can add it to the Wiki and further
clarify the manual pages.  Either of these should get you up and
working.

-- Lon




More information about the Linux-cluster mailing list