<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=RU link=blue vlink=purple style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Hi Alexander,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>AFAIK, Pacemaker itself only have deal with XML-based configuration database, shared across all cluster. Each time you call pcs or any other tool it takes XML (or part of it) from pacemaker, tweaks it and then push it back to Pacemaker. Each time XML is pushed, Pacemaker completely rethink the new config, look to the current state and schedule changes from current state to target state. I can’t point you to exact place in the docs where this described, but this from Pacemaker docs.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Therefore, each use of pcs command triggering this process immediately. Seems that some async-driven side effects may happen from this. Then, you may do ANY count of changes in one <b>stroke if Pacemaker got the new config with all these changes</b>. So, you need to enforce management tools FIRST prepare all changes and THEN push it all at once. And then you have no need to complete separate changes in background because the preparation is very fast. And final application will be done at max possible speed too.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Miroslav exampled how to manage bulk delete, but this is the <b>common way to manage massive change</b>. Any operations could be done! You take the Pacemaker CIB to a file, complete all the changes against the file instead write each one to CIB and then push the total back, then Pacemaker will schedule all changes.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>You may put ANY commands in any mix: add, change, delete, but use -f <filename> option for changes to be done against file. You may keep original to push diff (as at Miroslav example), or you may just push whole changed config, AFAIK, there no difference.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>###########################<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'># Make a copy of CIB into local file<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>pcs cluster cib config.xml<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'># do changes against file<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>pcs -f config.xml resource add <blah-blah-blah><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>pcs -f config.xml constraint <blah-blah-blah>       <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>pcs -f config.xml resource disable <id><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>pcs -f config.xml resource remove <id><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'># And finally push the whole ‘configuration’ scope back (mind there no diff, but push only config scope)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>pcs cluster cib-push config.xml –config<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>############################<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>And Pacemaker apply all changes at once.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Miroslav’s example taken from <a href="https://manpages.ubuntu.com/manpages/jammy/man8/pcs.8.html">pcs man page</a> for command ‘cluster cib-push’. My example works too.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Have a good failover! Means no failover at all )))<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Alex<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US>From:</span></b><span lang=EN-US> Users <users-bounces@clusterlabs.org> <b>On Behalf Of </b></span>Александр Руденко<span lang=EN-US><br><b>Sent:</b> Friday, May 17, 2024 6:46 PM<br><b>To:</b> Cluster Labs - All topics related to open-source clustering welcomed <users@clusterlabs.org><br><b>Subject:</b> Re: [ClusterLabs] Disabled resources after parallel removing of group<o:p></o:p></span></p></div></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><div><div><p class=MsoNormal style='margin-bottom:12.0pt'>Miroslav, thank you! <br><br>It helps me understand that it's not a configuration issue.<o:p></o:p></p></div><p class=MsoNormal>BTW, is it okay to create new resources in parallel?<o:p></o:p></p></div><div><p class=MsoNormal style='margin-bottom:12.0pt'>On timeline it looks like:<o:p></o:p></p></div><div><p class=MsoNormal>pcs resource create resA1 .... --group groupA<o:p></o:p></p></div><div><p class=MsoNormal>pcs resource create resB1 .... --group groupB<br>resA1 Started<br>pcs resource create resA2 .... --group groupA<o:p></o:p></p></div><div><p class=MsoNormal>res B1 Started<br>pcs resource create resB2 .... --group groupB<o:p></o:p></p></div><div><p class=MsoNormal>res A2 Started<o:p></o:p></p></div><div><p class=MsoNormal>res B2 Started<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-bottom:12.0pt'>For now, it works okay)<o:p></o:p></p></div><div><p class=MsoNormal>In our case, cluster events like 'create' and 'remove' are generated by users, and for now we don't have any queue for operations. But now, I realized that we need a queue for 'remove' operations. Maybe we need a queue for 'create' operations to?<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>пт, 17 мая 2024 г. в 17:49, Miroslav Lisik <<a href="mailto:mlisik@redhat.com">mlisik@redhat.com</a>>:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal>Hi Aleksandr!<br><br>It is not safe to use `pcs resource remove` command in parallel because<br>you run into the same issues as you already described. Processes run by<br>remove command are not synchronized.<br><br>Unfortunately, remove command does not support more than one resource<br>yet.<br><br>If you really need to remove resources at once you can use this method:<br>1. get the current cib configuration:<br>pcs cluster cib > original.xml<br><br>2. create a new copy of the file:<br>cp original.xml new.xml<br><br>3. disable all to be removed resources using -f option and new<br>configuration file:<br>pcs -f new.xml resource disable <resource id>...<br><br>4. remove resources using -f option and new configuration file:<br>pcs -f new.xml resource remove <resource id><br>...<br><br>5. push new cib configuration to the cluster<br>pcs cluster cib-push new.xml diff-against=original.xml<br><br><br>On 5/17/24 13:47, Александр Руденко wrote:<br>> Hi!<br>> <br>> I am new in the pacemaker world, and I, unfortunately, have problems <br>> with simple actions like group removal. Please, help me understand when <br>> I'm wrong.<br>> <br>> For simplicity I will use standard resources like IPaddr2 (but we have <br>> this problem on any type of our custom resources).<br>> <br>> I have 5 groups like this:<br>> <br>> Full List of Resources:<br>>    * Resource Group: group-1:<br>>      * ip-11 (ocf::heartbeat:IPaddr2): Started vdc16<br>>      * ip-12 (ocf::heartbeat:IPaddr2): Started vdc16<br>>    * Resource Group: group-2:<br>>      * ip-21 (ocf::heartbeat:IPaddr2): Started vdc17<br>>      * ip-22 (ocf::heartbeat:IPaddr2): Started vdc17<br>>    * Resource Group: group-3:<br>>      * ip-31 (ocf::heartbeat:IPaddr2): Started vdc18<br>>      * ip-32 (ocf::heartbeat:IPaddr2): Started vdc18<br>>    * Resource Group: group-4:<br>>      * ip-41 (ocf::heartbeat:IPaddr2): Started vdc16<br>>      * ip-42 (ocf::heartbeat:IPaddr2): Started vdc16<br>> <br>> Groups were created by next simple script:<br>> cat groups.sh<br>> pcs resource create ip-11 ocf:heartbeat:IPaddr2 ip=10.7.1.11 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-1<br>> pcs resource create ip-12 ocf:heartbeat:IPaddr2 ip=10.7.1.12 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-1<br>> <br>> pcs resource create ip-21 ocf:heartbeat:IPaddr2 ip=10.7.1.21 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-2<br>> pcs resource create ip-22 ocf:heartbeat:IPaddr2 ip=10.7.1.22 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-2<br>> <br>> pcs resource create ip-31 ocf:heartbeat:IPaddr2 ip=10.7.1.31 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-3<br>> pcs resource create ip-32 ocf:heartbeat:IPaddr2 ip=10.7.1.32 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-3<br>> <br>> pcs resource create ip-41 ocf:heartbeat:IPaddr2 ip=10.7.1.41 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-4<br>> pcs resource create ip-42 ocf:heartbeat:IPaddr2 ip=10.7.1.42 <br>> cidr_netmask=24 nic=lo op monitor interval=10s --group group-4<br>> <br>> Next, i try to remove all of these group in 'parallel':<br>> cat remove.sh<br>> pcs resource remove group-1 &<br>> sleep 0.2<br>> pcs resource remove group-2 &<br>> sleep 0.2<br>> pcs resource remove group-3 &<br>> sleep 0.2<br>> pcs resource remove group-4 &<br>> <br>> After this, every time I have a few resources in some groups which were <br>> not removed. It looks like:<br>> <br>> Full List of Resources:<br>>    * Resource Group: group-2 (disabled):<br>>      * ip-21 (ocf::heartbeat:IPaddr2): Stopped (disabled)<br>>    * Resource Group: group-4 (disabled):<br>>      * ip-41 (ocf::heartbeat:IPaddr2): Stopped (disabled)<br>> <br>> In logs, I can see success stopping all resources, but after stopping <br>> some resources it looks like pacemaker just 'forgot' about deletion and <br>> didn't.<br>> <br>> Cluster name: pacemaker1<br>> Cluster Summary:<br>>    * Stack: corosync<br>>    * Current DC: vdc16 (version 2.1.0-8.el8-7c3f660707) - partition with <br>> quorum<br>>    * Last updated: Fri May 17 14:30:14 2024<br>>    * Last change:  Fri May 17 14:30:05 2024 by root via cibadmin on vdc16<br>>    * 3 nodes configured<br>>    * 2 resource instances configured (2 DISABLED)<br>> <br>> Node List:<br>>    * Online: [ vdc16 vdc17 vdc18 ]<br>> <br>> Host OS is CentOS 8.4. Cluster with default settings. vdc16,vdc17,vdc18 <br>> are VMs with 4 vCPU.<br>> <br>> <br>> _______________________________________________<br>> Manage your subscription:<br>> <a href="https://lists.clusterlabs.org/mailman/listinfo/users" target="_blank">https://lists.clusterlabs.org/mailman/listinfo/users</a><br>> <br>> ClusterLabs home: <a href="https://www.clusterlabs.org/" target="_blank">https://www.clusterlabs.org/</a><br><br>_______________________________________________<br>Manage your subscription:<br><a href="https://lists.clusterlabs.org/mailman/listinfo/users" target="_blank">https://lists.clusterlabs.org/mailman/listinfo/users</a><br><br>ClusterLabs home: <a href="https://www.clusterlabs.org/" target="_blank">https://www.clusterlabs.org/</a><o:p></o:p></p></blockquote></div></div></div></body></html>