This page describes how to implement a fencing agent, and how agents are called from the cluster software.

Fencing, generally, is a way to prevent an ill-behaved cluster member from accessing shared data in a way which would cause data or file system corruption. The canonical case where fencing is required is something like this: Node1 live-hangs with a lock on a GFS file system. Node2 thinks node1 is dead, takes a lock, and begins accessing the same data. Node1 wakes up and continues what it was doing. Because we can not predict when node1 would wake up or prevent it from issuing I/Os immediately after waking up, we need a way to prevent its I/Os from completing even if it does wake up.

Definitions

What is given to fencing agents by fenced

When the cluster decides a node must be fenced, a node is chosen to perform the task. The fence daemon ("fenced") is responsible for performing the request, and it spawns agents listed for a given node as noted in cluster.conf. When called by other pieces of software (fenced, fence_node), fencing agents take arguments from standard input (as opposed to the command line) in the following format:

argument=value
#this line is ignored
argument2=value2

The following things are not allowed in this input:

The following are guidelines for parsing the arguments:

Example cluster.conf

<clusternodes>
    <clusternode name="red.lab.boston.redhat.com" nodeid="1" votes="1">
        <fence>
            <method name="1">
                <device name="ips-rack9" port="1" option="reboot"/>
            </method>
        </fence>
    </clusternode>
    ...
</clusternodes>
<fencedevices>
    <fencedevice agent="fence_wti" name="ips-rack9" passwd="wti" ipaddr="ips-rack9"/>
</fencedevices>

Example input given to a fence_agent

Given the previous cluster.conf example, the following is sent to the agent named fence_wti when the cluster decides to fence red.lab.boston.redhat.com:

agent=fence_wti
name=ips-rack9
passwd=wti
ipaddr=ips-rack9
port=1
option=reboot

Agent Operations and Return Values

Attribute Specifications

These attributes should be used when implementing new agents, but this is not an exhaustive list. Some agents may have other arguments which are not covered here.

Implementation Best-Practices

Currently, this project has a number of requirements which should be common to all agents (even if not currently):

None: FenceAgentAPI (last edited 2008-11-11 22:29:01 by LonHohberger)