Alan Robertson wrote:
> Daniel Bray wrote:
>> Hello List,
>>
>> I have been unable to get a 2 node active/passive cluster to
>> auto-failover using pingd.  I was hoping someone could look over my
>> configs and tell me what I'm missing.  I can manually fail the cluster
>> over, and it will even auto-fail over if I stop heartbeat on one of the
>> nodes.  But, what I would like to have happen, is when I unplug the
>> network cable from node1, everything auto-fails over to node2 and stays
>> there until I manually fail it back.
>>
>> #/etc/ha.d/ha.cf
>> udpport 6901
>> autojoin any
>> crm true
>> bcast eth1
>> node node1
>> node node2
>> respawn root /sbin/evmsd
>> apiauth evms uid=hacluster,root
>> ping 192.168.1.1
>> respawn root /usr/lib/heartbeat/pingd -m 100 -d 5s
>>
>> #/var/lib/heartbeat/crm/cib.xml
>>   <cib generated="true" admin_epoch="0" have_quorum="true"
>> ignore_dtd="false" ccm_transition="14" num_peers="2"
>> cib_feature_revision="1.3"
>> dc_uuid="e88ed713-ba7b-4c42-8a38-983eada05adb" epoch="14"
>> num_updates="330" cib-last-written="Mon Mar 26 10:48:31 2007">
>>    <configuration>
>>      <crm_config>
>>        <cluster_property_set id="cib-bootstrap-options">
>>          <attributes>
>>            <nvpair id="id-stonith-enabled" name="stonith-enabled"
>> value="True"/>
>>            <nvpair name="symmetric-cluster"
>> id="cib-bootstrap-options-symmetric-cluster" value="True"/>
>>            <nvpair id="cib-bootstrap-options-default-action-timeout"
>> name="default-action-timeout" value="60s"/>
>>            <nvpair
>> id="cib-bootstrap-options-default-resource-failure-stickiness"
>> name="default-resource-failure-stickiness" value="-500"/>
>>            <nvpair
>> id="cib-bootstrap-options-default-resource-stickiness"
>> name="default-resource-stickiness" value="INFINITY"/>
>>            <nvpair name="last-lrm-refresh"
>> id="cib-bootstrap-options-last-lrm-refresh" value="1174833528"/>
>>          </attributes>
>>        </cluster_property_set>
>>      </crm_config>
>>      <nodes>
>>        <node uname="node1" type="normal"
>> id="e88ed713-ba7b-4c42-8a38-983eada05adb">
>>          <instance_attributes
>> id="nodes-e88ed713-ba7b-4c42-8a38-983eada05adb">
>>            <attributes>
>>              <nvpair name="standby"
>> id="standby-e88ed713-ba7b-4c42-8a38-983eada05adb" value="off"/>
>>            </attributes>
>>          </instance_attributes>
>>        </node>
>>        <node uname="node2" type="normal"
>> id="f6774ed6-4e03-4eb1-9e4a-8aea20c4ee8e">
>>          <instance_attributes
>> id="nodes-f6774ed6-4e03-4eb1-9e4a-8aea20c4ee8e">
>>            <attributes>
>>              <nvpair name="standby"
>> id="standby-f6774ed6-4e03-4eb1-9e4a-8aea20c4ee8e" value="off"/>
>>            </attributes>
>>          </instance_attributes>
>>        </node>
>>      </nodes>
>>      <resources>
>>        <group ordered="true" collocated="true"
>> resource_stickiness="INFINITY" id="group_my_cluster">
>>          <primitive class="ocf" type="Filesystem" provider="heartbeat"
>> id="resource_my_cluster-data">
>>            <instance_attributes
>> id="resource_my_cluster-data_instance_attrs">
>>              <attributes>
>>                <nvpair name="target_role"
>> id="resource_my_cluster-data_target_role" value="started"/>
>>                <nvpair id="170ea406-b6e1-4aed-be95-70d3e7c567dc"
>> name="device" value="/dev/sdb1"/>
>>                <nvpair name="directory"
>> id="9e0a0246-e5cb-4261-9916-ad967772c80b" value="/data"/>
>>                <nvpair id="710cc428-ecc1-4584-93f3-92c2b4bb56c3"
>> name="fstype" value="ext3"/>
>>              </attributes>
>>            </instance_attributes>
>>          </primitive>
>>          <primitive id="resource_my_cluster-IP" class="ocf"
>> type="IPaddr" provider="heartbeat">
>>            <instance_attributes
>> id="resource_my_cluster-IP_instance_attrs">
>>              <attributes>
>>                <nvpair id="resource_my_cluster-IP_target_role"
>> name="target_role" value="started"/>
>>                <nvpair id="537511f7-2201-49ad-a76c-a0482e0aea8b"
>> name="ip" value="101.202.43.251"/>
>>              </attributes>
>>            </instance_attributes>
>>          </primitive>
>>          <primitive class="ocf" type="pingd" provider="heartbeat"
>> id="resource_my_cluster-pingd">
>>            <instance_attributes
>> id="resource_my_cluster-pingd_instance_attrs">
>>              <attributes>
>>                <nvpair name="target_role"
>> id="resource_my_cluster-pingd_target_role" value="started"/>
>>                <nvpair id="2e49245e-4d0d-4e9a-b1c8-27e4faf753f2"
>> name="host_list" value="node1,node2"/>
>>              </attributes>
>>            </instance_attributes>
>>            <operations>
>>              <op id="3f83f7d1-4f70-44b4-bba0-c37e17ec1779" name="start"
>> timeout="90" prereq="nothing"/>
>>              <op id="ef2b4857-d705-4f45-ad4e-3f1bed2cf57c"
>> name="monitor" interval="20" timeout="40" start_delay="1m"
>> prereq="nothing"/>
>>            </operations>
>>          </primitive>
>>          <primitive class="stonith" type="ssh" provider="heartbeat"
>> id="resource_my_cluster-stonssh">
>>            <instance_attributes
>> id="resource_my_cluster-stonssh_instance_attrs">
>>              <attributes>
>>                <nvpair name="target_role"
>> id="resource_my_cluster-stonssh_target_role" value="started"/>
>>                <nvpair id="841128d3-d3a3-4da9-883d-e5421040d399"
>> name="hostlist" value="node1,node2"/>
>>              </attributes>
>>            </instance_attributes>
>>            <operations>
>>              <op id="96e1f46c-0732-44a7-8b82-07460003cc67" name="start"
>> timeout="15" prereq="nothing"/>
>>              <op id="9ef4d611-6699-42a8-925d-54d82dfeca13"
>> name="monitor" interval="5" timeout="20" start_delay="15"/>
>>            </operations>
>>          </primitive>
>>        </group>
>>      </resources>
>>      <constraints>
>>        <rsc_location id="place_node1" rsc="group_my_cluster">
>>          <rule id="prefered_place_node1" score="100">
>>            <expression attribute="#uname"
>> id="c9adb725-e0fc-4b9c-95ee-0265d50d8eb9" operation="eq" value="node1"/>
>>          </rule>
>>        </rsc_location>
>>        <rsc_location id="place_node2" rsc="group_my_cluster">
>>          <rule id="prefered_place_node2" score="500">
>>            <expression attribute="#uname"
>> id="7db4d315-9d9c-4414-abd5-52969b14e038" operation="eq" value="node2"/>
>>          </rule>
>>        </rsc_location>
>>      </constraints>
>>    </configuration>
>>  </cib>
>>
>> #log file (relevant section)
>> Mar 26 08:15:29 node1 kernel: tg3: eth0: Link is down.
>> Mar 26 08:15:58 node1 pingd: [20230]: notice: pingd_nstatus_callback:
>> Status update: Ping node 192.168.1.1 now has status [dead]
>> Mar 26 08:15:58 node1 pingd: [20230]: info: send_update: 0 active ping
>> nodes
>> Mar 26 08:15:58 node1 pingd: [20230]: notice: pingd_lstatus_callback:
>> Status update: Ping node 192.168.1.1 now has status [dead]
>> Mar 26 08:15:58 node1 pingd: [20230]: notice: pingd_nstatus_callback:
>> Status update: Ping node 192.168.1.1 now has status [dead]
>> Mar 26 08:15:58 node1 pingd: [20230]: info: send_update: 0 active ping
>> nodes
>> Mar 26 08:15:58 node1 crmd: [20227]: notice: crmd_ha_status_callback:
>> Status update: Node 192.168.1.1 now has status [dead]
>> Mar 26 08:15:59 node1 crmd: [20227]: WARN: get_uuid: Could not calculate
>> UUID for 192.168.1.1
>> Mar 26 08:15:59 node1 crmd: [20227]: info: crmd_ha_status_callback: Ping
>> node 192.168.1.1 is dead
>> Mar 26 08:16:03 node1 attrd: [20226]: info: attrd_timer_callback:
>> Sending flush op to all hosts for: default_ping_set
>> Mar 26 08:16:04 node1 attrd: [20226]: info: attrd_ha_callback: flush
>> message from node1
>> Mar 26 08:16:04 node1 attrd: [20226]: info: attrd_ha_callback: Sent
>> update 13: default_ping_set=0
>> Mar 26 08:16:04 node1 cib: [20223]: info: cib_diff_notify: Update
>> (client: 20226, call:13): 0.6.182 -> 0.6.183 (ok)
>> Mar 26 08:16:04 node1 tengine: [20391]: info: te_update_diff: Processing
>> diff (cib_modify): 0.6.182 -> 0.6.183
>> Mar 26 08:16:04 node1 tengine: [20391]: info: extract_event: Aborting on
>> transient_attributes changes for e88ed713-ba7b-4c42-8a38-983eada05adb
>> Mar 26 08:16:04 node1 tengine: [20391]: info: update_abort_priority:
>> Abort priority upgraded to 1000000
>> Mar 26 08:16:04 node1 tengine: [20391]: info: te_update_diff: Aborting
>> on transient_attributes deletions
>> Mar 26 08:16:04 node1 haclient: on_event:evt:cib_changed
>> Mar 26 08:16:04 node1 haclient: on_event:evt:cib_changed
>> Mar 26 08:16:04 node1 crmd: [20227]: info: do_state_transition: node1:
>> State transition S_IDLE -> S_POLICY_ENGINE [ input=I_PE_CALC
>> cause=C_IPC_MESSAGE origin=route_message ]
>> Mar 26 08:16:04 node1 crmd: [20227]: info: do_state_transition: All 2
>> cluster nodes are eligable to run resources.
>> Mar 26 08:16:04 node1 cib: [3671]: info: write_cib_contents: Wrote
>> version 0.6.183 of the CIB to disk (digest:
>> 45a4ae385d9a4a9d448adb7f5d93baa7)
>> Mar 26 08:16:04 node1 pengine: [20392]: info: log_data_element:
>> process_pe_message: [generation] <cib generated="true" admin_epoch="0"
>> have_quorum="true" ignore_dtd="false" ccm_transition="6" num_peers="2"
>> cib_feature_revision="1.3"
>> dc_uuid="e88ed713-ba7b-4c42-8a38-983eada05adb" epoch="6"
>> num_updates="183"/>
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'stop' for cluster option 'no-quorum-policy'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'reboot' for cluster option 'stonith-action'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'true' for cluster option 'is-managed-default'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value '60s' for cluster option 'cluster-delay'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'true' for cluster option 'stop-orphan-resources'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'true' for cluster option 'stop-orphan-actions'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'false' for cluster option 'remove-after-stop'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value '-1' for cluster option 'pe-error-series-max'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value '-1' for cluster option 'pe-warn-series-max'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value '-1' for cluster option 'pe-input-series-max'
>> Mar 26 08:16:04 node1 pengine: [20392]: notice: cluster_option: Using
>> default value 'true' for cluster option 'startup-fencing'
>> Mar 26 08:16:04 node1 pengine: [20392]: info: determine_online_status:
>> Node node1 is online
>> Mar 26 08:16:04 node1 pengine: [20392]: info: determine_online_status:
>> Node node2 is online
>> Mar 26 08:16:04 node1 pengine: [20392]: info: group_print: Resource
>> Group: group_my_cluster
> 
> You're trying to start pingd by two ways - both by the respawn
> directive, and also as a resource.
> 
> You can't do that.
> 
> And, you're not using the attribute that pingd is creating in your CIB.
> 
> See http://linux-ha.org/pingd for a sample rule to use a pingd attribute
> - or you can see my linux-ha tutorial for similar information:
>       http://linux-ha.org/HeartbeatTutorials - first tutorial listed
>               starting at about slide 139...
> 
> Here's the example from the pingd page:
> 
> <rsc_location id="my_resource:not_connected" rsc="my_resource">
>     <rule id="my_resource:not_connected:rule" score="-INFINITY">
>        <expression id="my_resource:not_connected:expr"
>                    attribute="pingd_score" operation="not_defined"/>
>     </rule>
> </rsc_location>
> 
> In fact, I'm not 100% sure it's right...
> 
> 
> I think the example from the tutorial is a little more general...
> 
> <rsc_location id="my_resource:connected"  rsc="my_resource">
>   <rule id="my_resource:connected:rule"
>         score_attribute="pingd" >
>     <expression id="my_resource:connected:expr:defined"
>         attribute="pingd"
>         operation="defined"/>
>   </rule>
> </rsc_location>
> 
> 
> What this rule says is:
> 
>       For resource "my_resource", add the value of the pingd attribute
>               to the amount score for locating my_resource on a given
>               machine.
> 
> For your example flags to pingd, you use a multiplier (-m flag) of 100,
> so having access to 0 ping nodes is worth zero, 1 ping nodes is worth
> 100 points, 2 ping nodes is worth 200 points, and so on...
> 
> So, if one node has access to a ping node and the other one does not
> have access to a ping node, then the first node would get 100 added to
> its location score, and the second node would have an unchanged location
> score.
> 
> If the the second node scored as much as 99 points higher than the first
> node, it would locate the resource on the first node.  If you don't like
> that, you can change your ping count multiplier, write a different rule,
> or add a rule.
> 
> You can change how much ping node access is worth with the -m flag, or
> the "multiplier" attribute in the pingd resource.  Note that you didn't
> supply a multiplier attribute in your pingd resource - so it would
> default to 1 -- probably not what you wanted...
> 
> And, don't run pingd twice - especially not with different parameters...
> 


perhaps this is an unwarranted question, but here goes anyway.

if one wanted to combine the pingd score with the default score of a previously 
defined resource
location(based on node preference), would one just add the pingd clone to the 
cib, then add the
appropriate "rule" to the previously defined "rsc_location"?

so i would add something like the following to my cib:


<clone id="pingd">
  <instance_attributes id="pingd">
    <attributes>
      <nvpair id="pingd-clone_node_max" name="clone_node_max" value="1"/>
      <nvpair id="pingd-dampen"     name="dampen" value="5s"/>
      <nvpair id="pingd-multiplier" name="multiplier" value="100"/>
    </attributes>
  </instance_attributes>
  <primitive id="pingd-child" provider="heartbeat" class="OCF" type="pingd">
    <operations>
      <op id="pingd-child-monitor" name="monitor" interval="20s" timeout="40s" 
prereq="nothing"/>
      <op id="pingd-child-start" name="start" prereq="nothing"/>
    </operations>
  </primitive>
</clone>


<rsc_location id="my_rsc_location" rsc="my_resource_group">
     <rule id="my_rsc_pref_1" score="100">
        <expression id="my_rsc_loc_attr_1" attribute="#uname" operation="eq" 
value="HOSTNAME"/>
     </rule>
     <rule id="my_resource:connected:rule" score_attribute="pingd" >
        <expression id="my_resource:connected:expr:defined" attribute="pingd" 
operation="defined"/>
     </rule>
</rsc_location>










_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to