[ClusterLabs] Coming in 1.1.14: Fencing topology based on node attribute

Ken Gaillot kgaillot at redhat.com
Thu Sep 24 19:37:09 UTC 2015


An update: as of upstream commit 8940fca, the syntax has been tweaked as
Beekhof mentioned. To create a fencing topology on a node attribute, you
would use the following for the same example:

   <fencing-topology>
      <fencing-level id="rack-1-1" index="1"
          target-attribute="rack" target-value="1"
          devices="apc01,apc02" />
   </fencing-topology>

This avoids any additional restrictions or difficulties related to what
characters can be where.

Combined with the existing methods, this means a topology can be
targeted in one of these ways:

  By node name: target="node1"
  By regular expression matching node names: target-pattern="pcmk.*"
  By node attribute: target-attribute="rack" target-value="1"

On 09/09/2015 07:20 AM, Andrew Beekhof wrote:
> 
>> On 9 Sep 2015, at 7:45 pm, Kristoffer Grönlund <kgronlund at suse.com> wrote:
>>
>> Hi,
>>
>> Ken Gaillot <kgaillot at redhat.com> writes:
>>
>>> Pacemaker's upstream master branch has a new feature that will be part
>>> of the eventual 1.1.14 release.
>>>
>>> Fencing topology is used when a node requires multiple fencing devices
>>> (in combination or as fallbacks). Currently, topologies must be
>>> specified by node name (or a regular expression matching node names).
>>>
>>> The new feature allows topologies to specified by node attribute.
>>
>> Sounds like a really useful feature. :) I have implemented initial
>> support for this syntax in crmsh,
> 
> word of warning, i’m in the process of changing it to avoid overloading the ‘target’ attribute and exposing quoting issues stemming from people’s use of ‘='
> 
>    https://github.com/beekhof/pacemaker/commit/ea4fc1c
> 
> 
> 
>> so this will work fine in the next
>> version of crmsh.
>>
>> Examples of crmsh syntax below:
>>
>>> Previously, if node1 was in rack #1, you'd have to register a fencing
>>> topology by its name, which at the XML level would look like:
>>>
>>>   <fencing-topology>
>>>      <fencing-level id="node1-1" index="1" target="node1"
>>>          devices="apc01,apc02"/>
>>>   </fencing-topology>
>>>
>>
>> crm cfg fencing-topology node1: apc01,apc02
>>
>>>
>>> With the new feature, you could instead register a topology for all
>>> hosts that have a node attribute "rack" whose value is "1":
>>>
>>>   <fencing-topology>
>>>      <fencing-level id="rack-1-1" index="1" target="rack=1"
>>>          devices="apc01,apc02"/>
>>>   </fencing-topology>
>>>
>>
>> crm cfg fencing-topology rack=1: apc01,apc02
>>
>>>
>>> You would assign that attribute to all nodes in that rack, e.g.:
>>>
>>>   crm_attribute --type nodes --node node1 --name rack --update 1
>>>
>>
>> crm node attr node1 set rack 1
>>
>>>
>>> The syntax accepts either '=' or ':' as the separator for the name/value
>>> pair, so target="rack:1" would work in the XML as well.
>>
>> crm cfg fencing-topology rack:1: apc01,apc02
>>
>> (admittedly perhaps not as clean as using '=', but it works)
>>
>> Cheers,
>> Kristoffer





More information about the Users mailing list