<div dir="ltr"><span style="font-size:12.8px">Message: 1</span><br style="font-size:12.8px"><span style="font-size:12.8px">Date: Wed, 11 Jul 2018 11:06:56 +0200</span><br style="font-size:12.8px"><span style="font-size:12.8px">From: Klaus Wenninger <</span><a href="mailto:kwenning@redhat.com" style="font-size:12.8px">kwenning@redhat.com</a><span style="font-size:12.8px">></span><br style="font-size:12.8px"><span style="font-size:12.8px">To: Cluster Labs - All topics related to open-source clustering</span><br style="font-size:12.8px"><span style="font-size:12.8px">        welcomed <</span><a href="mailto:users@clusterlabs.org" style="font-size:12.8px">users@clusterlabs.org</a><span style="font-size:12.8px">>, Andrei Borzenkov</span><br style="font-size:12.8px"><span style="font-size:12.8px">        <</span><a href="mailto:arvidjaar@gmail.com" style="font-size:12.8px">arvidjaar@gmail.com</a><span style="font-size:12.8px">></span><br style="font-size:12.8px"><span style="font-size:12.8px">Subject: Re: [ClusterLabs] What triggers fencing?</span><br style="font-size:12.8px"><span style="font-size:12.8px">Message-ID: <</span><a href="mailto:db834639-3f15-7861-ca62-d42971b93085@redhat.com" style="font-size:12.8px">db834639-3f15-7861-ca62-<wbr>d42971b93085@redhat.com</a><span style="font-size:12.8px">></span><br style="font-size:12.8px"><span style="font-size:12.8px">Content-Type: text/plain; charset=utf-8</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">On 07/11/2018 05:48 AM, Andrei Borzenkov wrote:</span><br style="font-size:12.8px"><span class="gmail-aBn" tabindex="0" style="font-size:12.8px"><span class="gmail-aQJ">> 11.07.2018 05:</span></span><span style="font-size:12.8px">45, Confidential Company ?????:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> Not true, the faster node will kill the slower node first. It is</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> possible that through misconfiguration, both could die, but it's rare</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> and easily avoided with a 'delay="15"' set on the fence config for the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> node you want to win.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>> Don't use a delay on the other node, just the node you want to live in</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> such a case.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>> **</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 1. Given Active/Passive setup, resources are active on Node1</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 2. fence1(prefers to Node1, delay=15) and fence2(prefers to</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> Node2, delay=30)</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 3. Node2 goes down</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 4. Node1 thinks Node2 goes down / Node2 thinks Node1 goes</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> down</span><br style="font-size:12.8px"><span style="font-size:12.8px">> If node2 is down, it cannot think anything.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">True. Assuming it is not really down but just somehow disconnected</span><br style="font-size:12.8px"><span style="font-size:12.8px">for my answer below.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 5. fence1 counts 15 seconds before he fence Node1 while</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> fence2 counts 30 seconds before he fence Node2</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 6. Since fence1 do have shorter time than fence2, fence1</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> executes and shutdown Node1.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>                 7. fence1(action: shutdown Node1)  will trigger first</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> always because it has shorter delay than fence2.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>> ** Okay what's important is that they should be different. But in the case</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> above, even though Node2 goes down but Node1 has shorter delay, Node1 gets</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> fenced/shutdown. This is a sample scenario. I don't get the point. Can you</span><br style="font-size:12.8px"><span style="font-size:12.8px">>> comment on this?</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">You didn't send the actual config but from your description</span><br style="font-size:12.8px"><span style="font-size:12.8px">I get the scenario that way:</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">fencing-resource fence1 is running on Node2 and it is there</span><br style="font-size:12.8px"><span style="font-size:12.8px">to fence Node1 and it has a delay of 15s.</span><br style="font-size:12.8px"><span style="font-size:12.8px">fencing-resource fence2 is running on Node1 and it is there</span><br style="font-size:12.8px"><span style="font-size:12.8px">to fence Node2 and it has a delay of 30s.</span><br style="font-size:12.8px"><span style="font-size:12.8px">If they now begin to fence each other at the same time the</span><br style="font-size:12.8px"><span style="font-size:12.8px">node actually fenced would be Node1 of course as the</span><br style="font-size:12.8px"><span style="font-size:12.8px">fencing-resource fence1 is gonna shoot 15s earlier that the</span><br style="font-size:12.8px"><span style="font-size:12.8px">fence2.</span><br style="font-size:12.8px"><span style="font-size:12.8px">Looks consistent to me ...</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">Regards,</span><br style="font-size:12.8px"><span style="font-size:12.8px">Klaus</span><div><br></div><div><br></div><div><br></div><div>*******<br>Yes, that is right Klaus. fence1 running on Node2 will fence Node1, fence1 will execute first whichever Node goes down because it has shorter delay. But if Node2 goes down or disconnected, how can it be fenced by Node1 using fence2, if fence2 cannot be triggered because fence1 always comes first.<br><br>My point here is that giving delay on fencing resolves the issue of double fencing, but it doesnt resolve or doesnt know who's Node should be fenced. Even though Node2 gets disconnected, Node1 will be fenced and the whole service totally goes down.<br><br>******Let me share you my actual config:<br><br>I have two ESXI hosts, 2 virtual machines, 2 interfaces on each (1=corosync interface, 1=interface for VM to contact ESXI host)</div><div><br><div>Pacemaker Nodes:</div><div> ArcosRhel1 ArcosRhel2</div><div><br></div><div>Resources:</div><div> Resource: ClusterIP (class=ocf provider=heartbeat type=IPaddr2)</div><div>  Attributes: cidr_netmask=32 ip=172.16.10.243</div><div>  Operations: monitor interval=30s (ClusterIP-monitor-interval-30s)</div><div>              start interval=0s timeout=20s (ClusterIP-start-interval-0s)</div><div>              stop interval=0s timeout=20s (ClusterIP-stop-interval-0s)</div><div><br></div><div>Stonith Devices:</div><div> Resource: Fence1 (class=stonith type=fence_vmware_soap)</div><div>  Attributes: action=off ipaddr=172.16.10.201 login=test passwd=testing pcmk_host_list=ArcosRhel1 pcmk_monitor_timeout=60s port=ArcosRhel1 ssl_insecure=1</div><div>  Operations: monitor interval=60s (Fence1-monitor-interval-60s)</div><div> Resource: fence2 (class=stonith type=fence_vmware_soap)</div><div>  Attributes: action=off ipaddr=172.16.10.202 login=test passwd=testing pcmk_delay_max=10s pcmk_host_list=ArcosRhel2 pcmk_monitor_timeout=60s port=ArcosRhel2 ssl_insecure=1</div><div>  Operations: monitor interval=60s (fence2-monitor-interval-60s)</div><div>Fencing Levels:</div><div><br></div><div>Location Constraints:</div><div>  Resource: Fence1</div><div>    Enabled on: ArcosRhel2 (score:INFINITY) (id:location-Fence1-ArcosRhel2-INFINITY)</div><div>  Resource: fence2</div><div>    Enabled on: ArcosRhel1 (score:INFINITY) (id:location-fence2-ArcosRhel1-INFINITY)</div><div>Ordering Constraints:</div><div>Colocation Constraints:</div><div>Ticket Constraints:</div><div><br></div><div>Alerts:</div><div> No alerts defined</div><div><br></div><div>Resources Defaults:</div><div> No defaults set</div><div>Operations Defaults:</div><div> No defaults set</div><div><br></div><div>Cluster Properties:</div><div> cluster-infrastructure: corosync</div><div> cluster-name: ARCOSCLUSTER</div><div> dc-version: 1.1.16-12.el7-94ff4df</div><div> have-watchdog: false</div><div> last-lrm-refresh: 1531300540</div><div> stonith-enabled: true</div><br></div><div>*****<br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>> Thanks</span><br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>> On Tue, Jul 10, 2018 at 12:18 AM, Klaus Wenninger <</span><a href="mailto:kwenning@redhat.com" style="font-size:12.8px">kwenning@redhat.com</a><span style="font-size:12.8px">></span><br style="font-size:12.8px"><span style="font-size:12.8px">>> wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> On 07/09/2018 05:53 PM, Digimer wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> On 2018-07-09 11:45 AM, Klaus Wenninger wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> On 07/09/2018 05:33 PM, Digimer wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> On 2018-07-09 09:56 AM, Klaus Wenninger wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>> On 07/09/2018 03:49 PM, Digimer wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> On 2018-07-09 08:31 AM, Klaus Wenninger wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> On 07/09/2018 02:04 PM, Confidential Company wrote:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> Hi,</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> Any ideas what triggers fencing script or stonith?</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> Given the setup below:</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> 1. I have two nodes</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> 2. Configured fencing on both nodes</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> 3. Configured delay=15 and delay=30 on fence1(for Node1) and</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> fence2(for Node2) respectively</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> *What does it mean to configured delay in stonith? wait for 15</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> seconds</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> before it fence the node?</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> Given that on a 2-node-cluster you don't have real quorum to make</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> one</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> partial cluster fence the rest of the nodes the different delays</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> are meant</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> to prevent a fencing-race.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> Without different delays that would lead to both nodes fencing each</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> other at the same time - finally both being down.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> Not true, the faster node will kill the slower node first. It is</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> possible that through misconfiguration, both could die, but it's rare</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> and easily avoided with a 'delay="15"' set on the fence config for</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> node you want to win.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>> What exactly is not true? Aren't we saying the same?</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>> Of course one of the delays can be 0 (most important is that</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>> they are different).</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> Perhaps I misunderstood your message. It seemed to me that the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> implication was that fencing in 2-node without a delay always ends up</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> with both nodes being down, which isn't the case. It can happen if the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> fence methods are not setup right (ie: the node isn't set to</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> immediately</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> power off on ACPI power button event).</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> Yes, a misunderstanding I guess.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> Should have been more verbose in saying that due to the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> time between the fencing-command fired off to the fencing</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> device and the actual fencing taking place (as you state</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> dependent on how it is configured in detail - but a measurable</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> time in all cases) there is a certain probability that when</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> both nodes start fencing at roughly the same time we will</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> end up with 2 nodes down.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> Everybody has to find his own tradeoff between reliability</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>> fence-races are prevented and fencing delay I guess.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> We've used this;</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> 1. IPMI (with the guest OS set to immediately power off) as primary,</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> with a 15 second delay on the active node.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> 2. Two Switched PDUs (two power circuits, two PSUs) as backup fencing</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> for when IPMI fails, with no delay.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> In ~8 years, across dozens and dozens of clusters and countless fence</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> actions, we've never had a dual-fence event (where both nodes go down).</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>> So it can be done safely, but as always, test test test before prod.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> No doubt about that this setup is working reliably.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> You just have to know your fencing-devices and</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> which delays they involve.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> If we are talking about SBD (with disk as otherwise</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> it doesn't work in a sensible way in 2-node-clusters)</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> for instance I would strongly advise using a delay.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> So I guess it is important to understand the basic</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> idea behind this different delay-based fence-race</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> avoidance.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> Afterwards you can still decide why it is no issue</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> in your own setup.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> If the delay is set on both nodes, and they are different, it will work</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> fine. The reason not to do this is that if you use 0, then don't use</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> anything at all (0 is default), and any other value causes avoidable</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>> fence delays.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> Don't use a delay on the other node, just the node you want to live</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> in</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> such a case.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> *Given Node1 is active and Node2 goes down, does it mean fence1</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> will</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>>> first execute and shutdowns Node1 even though Node2 goes down?</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> If Node2 managed to sign off properly it will not.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> If network-connection is down so that Node2 can't inform Node1 that</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> it</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> is going</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> down and finally has stopped all resources it will be fenced by</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> Node1.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> Regards,</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>>> Klaus</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> Fencing occurs in two cases;</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> 1. The node stops responding (meaning it's in an unknown state, so</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> it is</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> fenced to force it into a known state).</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> 2. A resource / service fails to stop stop. In this case, the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> service is</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> in an unknown state, so the node is fenced to force the service into</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> a</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> known state so that it can be safely recovered on the peer.</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> Graceful withdrawal of the node from the cluster, and graceful</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> stopping</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> of services will not lead to a fence (because in both cases, the</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>> node /</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>> service are in a known state - off).</span><br style="font-size:12.8px"><span style="font-size:12.8px">>>>>>>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>>></span><br style="font-size:12.8px"><span style="font-size:12.8px">>></span><br style="font-size:12.8px"><span style="font-size:12.8px">></span><br style="font-size:12.8px"></div></div>