<div class="zcontentRow"> <p>adding "sleep 5" before return in the stop func fixed the issue. so I suspect there must be concurrency bug somewhere in the code. just FYI.<br></p><p><br></p><div class="zMailSign"><p style="font-size: 7.0px; line-height: normal; widows: 1;"><span style="font-size:10px;color:#58595B;font-family:微软雅黑;font-size: 7.0px;"></span></p><span style="line-height: normal; widows: 1; font-size: 7.0px;;color:#58595b;font-size:10px"></span></div><div class="zMailFrom"></div><div><div class="zhistoryRow" style="display:block"><div class="zhistoryDes" style="width: 100%; height: 28px; line-height: 28px; background-color: #E0E5E9; color: #1388FF; text-align: center;" language-data="HistoryOrgTxt">原始邮件</div><div id="zwriteHistoryContainer"><div class="control-group zhistoryPanel"><div class="zhistoryHeader" style="padding: 8px; background-color: #F5F6F8;"><div><strong language-data="HistorySenderTxt">发件人:</strong><span class="zreadUserName"> <kgaillot@redhat.com>;</span></div><div><strong language-data="HistoryTOTxt">收件人:</strong><span class="zreadUserName" style="display: inline-block;">何海龙10164561;</span></div><div><strong language-data="HistoryCCTxt">抄送人:</strong><span class="zreadUserName" style="display: inline-block;"> <users@clusterlabs.org>;</span></div><div><strong language-data="HistoryDateTxt">日 期 :</strong><span class="">2017年02月15日 23:22</span></div><div><strong language-data="HistorySubjectTxt">主 题 :</strong><span class="zreadTitle"><strong>Re: 答复: Re: 答复: Re: [ClusterLabs] clone resource not get restarted on fail</strong></span></div></div><p class="zhistoryContent"><br></p><div>On 02/15/2017 03:57 AM, he.hailong5@zte.com.cn wrote:<br>> I just tried using colocation, it dosen't work.<br>> <br>> <br>> I failed the node paas-controller-3, but sdclient_vip didn't get moved:<br><br>The colocation would work, but the problem you're having with router and<br>apigateway is preventing it from getting that far. In other words,<br>router and apigateway are still running on the node (they have not been<br>successfully stopped), so the colocation is still valid.<br><br>I suspect that the return codes from your custom resource agents may be<br>the issue. Make sure that your agents conform to these guidelines:<br><br>http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html-single/Pacemaker_Explained/index.html#ap-ocf<br><br>In particular, "start" should not return until a monitor operation would<br>return success, "stop" should not return until a monitor would return<br>"not running", and "monitor" should return "not running" if called on a<br>host where the service hasn't started yet. Be sure you are returning the<br>proper OCF_* codes according to the table in the link above.<br><br>If the documentation is unclear, please ask here about anything you are<br>unsure of.<br><br>> <br>> Online: [ paas-controller-1 paas-controller-2 paas-controller-3 ]<br>> <br>> <br>>  router_vip     (ocf::heartbeat:IPaddr2):       Started paas-controller-1 <br>> <br>>  sdclient_vip   (ocf::heartbeat:IPaddr2):       Started paas-controller-3 <br>> <br>>  apigateway_vip (ocf::heartbeat:IPaddr2):       Started paas-controller-2 <br>> <br>>  Clone Set: sdclient_rep [sdclient]<br>> <br>>      Started: [ paas-controller-1 paas-controller-2 ]<br>> <br>>      Stopped: [ paas-controller-3 ]<br>> <br>>  Clone Set: router_rep [router]<br>> <br>>      router     (ocf::heartbeat:router):        Started<br>> paas-controller-3 FAILED <br>> <br>>      Started: [ paas-controller-1 paas-controller-2 ]<br>> <br>>  Clone Set: apigateway_rep [apigateway]<br>> <br>>      apigateway (ocf::heartbeat:apigateway):    Started<br>> paas-controller-3 FAILED <br>> <br>>      Started: [ paas-controller-1 paas-controller-2 ]<br>> <br>> <br>> here is the configuration:<br>> <br>> >crm configure show<br>> <br>> node $id="336855579" paas-controller-1<br>> <br>> node $id="336855580" paas-controller-2<br>> <br>> node $id="336855581" paas-controller-3<br>> <br>> primitive apigateway ocf:heartbeat:apigateway \<br>> <br>>         op monitor interval="2s" timeout="20s" on-fail="restart" \<br>> <br>>         op stop interval="0" timeout="200s" on-fail="restart" \<br>> <br>>         op start interval="0" timeout="9999h" on-fail="restart"<br>> <br>> primitive apigateway_vip ocf:heartbeat:IPaddr2 \<br>> <br>>         params ip="20.20.2.7" cidr_netmask="24" \<br>> <br>>         op start interval="0" timeout="20" \<br>> <br>>         op stop interval="0" timeout="20" \<br>> <br>>         op monitor timeout="20s" interval="2s" depth="0"<br>> <br>> primitive router ocf:heartbeat:router \<br>> <br>>         op monitor interval="2s" timeout="20s" on-fail="restart" \<br>> <br>>         op stop interval="0" timeout="200s" on-fail="restart" \<br>> <br>>         op start interval="0" timeout="9999h" on-fail="restart"<br>> <br>> primitive router_vip ocf:heartbeat:IPaddr2 \<br>> <br>>         params ip="10.10.1.7" cidr_netmask="24" \<br>> <br>>         op start interval="0" timeout="20" \<br>> <br>>         op stop interval="0" timeout="20" \<br>> <br>>         op monitor timeout="20s" interval="2s" depth="0"<br>> <br>> primitive sdclient ocf:heartbeat:sdclient \<br>> <br>>         op monitor interval="2s" timeout="20s" on-fail="restart" \<br>> <br>>         op stop interval="0" timeout="200s" on-fail="restart" \<br>> <br>>         op start interval="0" timeout="9999h" on-fail="restart"<br>> <br>> primitive sdclient_vip ocf:heartbeat:IPaddr2 \<br>> <br>>         params ip="10.10.1.8" cidr_netmask="24" \<br>> <br>>         op start interval="0" timeout="20" \<br>> <br>>         op stop interval="0" timeout="20" \<br>> <br>>         op monitor timeout="20s" interval="2s" depth="0"<br>> <br>> clone apigateway_rep apigateway<br>> <br>> clone router_rep router<br>> <br>> clone sdclient_rep sdclient<br>> <br>> colocation apigateway_colo +inf: apigateway_vip apigateway_rep:Started<br>> <br>> colocation router_colo +inf: router_vip router_rep:Started<br>> <br>> colocation sdclient_colo +inf: sdclient_vip sdclient_rep:Started<br>> <br>> property $id="cib-bootstrap-options" \<br>> <br>>         dc-version="1.1.10-42f2063" \<br>> <br>>         cluster-infrastructure="corosync" \<br>> <br>>         stonith-enabled="false" \<br>> <br>>         no-quorum-policy="stop" \<br>> <br>>         start-failure-is-fatal="false" \<br>> <br>>         last-lrm-refresh="1486981647"<br>> <br>> op_defaults $id="op_defaults-options" \<br>> <br>>         on-fail="restart"<br>> <br>> <br>> <br>> <br>> <br>> 原始邮件<br>> *发件人:*何海龙10164561<br>> *收件人:*<kgaillot@redhat.com>;<br>> *抄送人:*<users@clusterlabs.org>;<br>> *日 期 :*2017年02月15日 10:54<br>> *主 题 :**答复: Re: 答复: Re: [ClusterLabs] clone resource not get<br>> restarted on fail*<br>> <br>> <br>> Is there a reason not to use a colocation constraint instead? If X_vip<br>> is colocated with X, it will be moved if X fails.<br>> <br>> [hhl]: the movement should take place as well if X stopped (the start is<br>> on-going). I don't know if the colocation would satisfy this requirement.<br>> <br>> I don't see any reason in your configuration why the services wouldn't<br>> be restarted. It's possible the cluster tried to restart the service,<br>> but the stop action failed. Since you have stonith disabled, the cluster<br>> can't recover from a failed stop action.<br>> <br>> <br>> [hhl]: the ocf logs showed the pacemaker never entered the stop function<br>> in this case.<br>> <br>> Is there a reason you disabled quorum? With 3 nodes, if they get split<br>> into groups of 1 node and 2 nodes, quorum is what keeps the groups from<br>> both starting all resources.<br>> <br>> <br>> [hhl]: I enabled the quorum and had a retry, the same happens.<br>> <br>> b.t.w, I repeat sevaral times today, and found when I trigger the<br>> condition on one node that would fail all the clone resources, only one<br>> would get restared, the other two would fail to restart.<br>> <br>> <br>> > trigger the failure conditon on paas-controller-1<br>> <br>> <br>> Online: [ paas-controller-1 paas-controller-2 paas-controller-3 ]<br>> <br>> <br>>  router_vip     (ocf::heartbeat:IPaddr2):       Started paas-controller-2 <br>> <br>>  sdclient_vip   (ocf::heartbeat:IPaddr2):       Started paas-controller-3 <br>> <br>>  apigateway_vip (ocf::heartbeat:IPaddr2):       Started paas-controller-3 <br>> <br>>  Clone Set: sdclient_rep [sdclient]<br>> <br>>      Started: [ paas-controller-2 paas-controller-3 ]<br>> <br>>      Stopped: [ paas-controller-1 ]<br>> <br>>  Clone Set: router_rep [router]<br>> <br>>      router     (ocf::heartbeat:router):        Started<br>> paas-controller-1 FAILED <br>> <br>>      Started: [ paas-controller-2 paas-controller-3 ]<br>> <br>>  Clone Set: apigateway_rep [apigateway]<br>> <br>>      apigateway (ocf::heartbeat:apigateway):    Started<br>> paas-controller-1 FAILED <br>> <br>>      Started: [ paas-controller-2 paas-controller-3 ]<br>> <br>>  <br>> <br>> > trigger the failure conditon on paas-controller-3<br>> <br>> Online: [ paas-controller-1 paas-controller-2 paas-controller-3 ]<br>> <br>> <br>>  router_vip     (ocf::heartbeat:IPaddr2):       Started paas-controller-2 <br>> <br>>  sdclient_vip   (ocf::heartbeat:IPaddr2):       Started paas-controller-3 <br>> <br>>  apigateway_vip (ocf::heartbeat:IPaddr2):       Started paas-controller-3 <br>> <br>>  Clone Set: sdclient_rep [sdclient]<br>> <br>>      sdclient   (ocf::heartbeat:sdclient):      Started<br>> paas-controller-3 FAILED <br>> <br>>      Started: [ paas-controller-1 paas-controller-2 ]<br>> <br>>  Clone Set: router_rep [router]<br>> <br>>      Started: [ paas-controller-1 paas-controller-2 ]<br>> <br>>      Stopped: [ paas-controller-3 ]<br>> <br>>  Clone Set: apigateway_rep [apigateway]<br>> <br>>      apigateway (ocf::heartbeat:apigateway):    Started<br>> paas-controller-3 FAILED <br>> <br>>      Started: [ paas-controller-1 paas-controller-2 ]<br>> <br>> <br>> <br>> <br>> <br>> <br>> *发件人:*<kgaillot@redhat.com>;<br>> *收件人:*何海龙10164561;<br>> *抄送人:*<users@clusterlabs.org>;<br>> *日 期 :*2017年02月15日 06:14<br>> *主 题 :**Re: 答复: Re: [ClusterLabs] clone resource not get restarted<br>> on fail*<br>> <br>> <br>> On 02/13/2017 07:08 PM, he.hailong5@zte.com.cn wrote:<br>> > Hi,<br>> > <br>> > <br>> > > crm configure show<br>> > <br>> > + crm configure show<br>> > <br>> > node $id="336855579" paas-controller-1<br>> > <br>> > node $id="336855580" paas-controller-2<br>> > <br>> > node $id="336855581" paas-controller-3<br>> > <br>> > primitive apigateway ocf:heartbeat:apigateway \<br>> > <br>> >         op monitor interval="2s" timeout="20s" on-fail="restart" \<br>> > <br>> >         op stop interval="0" timeout="200s" on-fail="restart" \<br>> > <br>> >         op start interval="0" timeout="9999h" on-fail="restart"<br>> > <br>> > primitive apigateway_vip ocf:heartbeat:IPaddr2 \<br>> > <br>> >         params ip="20.20.2.7" cidr_netmask="24" \<br>> > <br>> >         op start interval="0" timeout="20" \<br>> > <br>> >         op stop interval="0" timeout="20" \<br>> > <br>> >         op monitor timeout="20s" interval="2s" depth="0"<br>> > <br>> > primitive router ocf:heartbeat:router \<br>> > <br>> >         op monitor interval="2s" timeout="20s" on-fail="restart" \<br>> > <br>> >         op stop interval="0" timeout="200s" on-fail="restart" \<br>> > <br>> >         op start interval="0" timeout="9999h" on-fail="restart"<br>> > <br>> > primitive router_vip ocf:heartbeat:IPaddr2 \<br>> > <br>> >         params ip="10.10.1.7" cidr_netmask="24" \<br>> > <br>> >         op start interval="0" timeout="20" \<br>> > <br>> >         op stop interval="0" timeout="20" \<br>> > <br>> >         op monitor timeout="20s" interval="2s" depth="0"<br>> > <br>> > primitive sdclient ocf:heartbeat:sdclient \<br>> > <br>> >         op monitor interval="2s" timeout="20s" on-fail="restart" \<br>> > <br>> >         op stop interval="0" timeout="200s" on-fail="restart" \<br>> > <br>> >         op start interval="0" timeout="9999h" on-fail="restart"<br>> > <br>> > primitive sdclient_vip ocf:heartbeat:IPaddr2 \<br>> > <br>> >         params ip="10.10.1.8" cidr_netmask="24" \<br>> > <br>> >         op start interval="0" timeout="20" \<br>> > <br>> >         op stop interval="0" timeout="20" \<br>> > <br>> >         op monitor timeout="20s" interval="2s" depth="0"<br>> > <br>> > clone apigateway_rep apigateway<br>> > <br>> > clone router_rep router<br>> > <br>> > clone sdclient_rep sdclient<br>> > <br>> > location apigateway_loc apigateway_vip \<br>> > <br>> >         rule $id="apigateway_loc-rule" +inf: apigateway_workable eq 1<br>> > <br>> > location router_loc router_vip \<br>> > <br>> >         rule $id="router_loc-rule" +inf: router_workable eq 1<br>> > <br>> > location sdclient_loc sdclient_vip \<br>> > <br>> >         rule $id="sdclient_loc-rule" +inf: sdclient_workable eq 1<br>> > <br>> > property $id="cib-bootstrap-options" \<br>> > <br>> >         dc-version="1.1.10-42f2063" \<br>> > <br>> >         cluster-infrastructure="corosync" \<br>> > <br>> >         stonith-enabled="false" \<br>> > <br>> >         no-quorum-policy="ignore" \<br>> > <br>> >         start-failure-is-fatal="false" \<br>> > <br>> >         last-lrm-refresh="1486981647"<br>> > <br>> > op_defaults $id="op_defaults-options" \<br>> > <br>> >         on-fail="restart"<br>> > <br>> > -------------------------------------------------------------------------------------------------<br>> > <br>> > <br>> > and B.T.W, I am using "crm_attribute -N $HOSTNAME -q -l reboot --name<br>> > <prefix>_workable -v <1 or 0>" in the monitor to update the<br>> > transient attributes, which control the vip location.<br>> <br>> Is there a reason not to use a colocation constraint instead? If X_vip<br>> is colocated with X, it will be moved if X fails.<br>> <br>> I don't see any reason in your configuration why the services wouldn't<br>> be restarted. It's possible the cluster tried to restart the service,<br>> but the stop action failed. Since you have stonith disabled, the cluster<br>> can't recover from a failed stop action.<br>> <br>> Is there a reason you disabled quorum? With 3 nodes, if they get split<br>> into groups of 1 node and 2 nodes, quorum is what keeps the groups from<br>> both starting all resources.<br>> <br>> > and also found, the vip resource won't get moved if the related clone<br>> > resource failed to restart.<br>> > <br>> > <br>> > 原始邮件<br>> > *发件人:*<kgaillot@redhat.com>;<br>> > *收件人:*<users@clusterlabs.org>;<br>> > *日 期 :*2017年02月13日 23:04<br>> > *主 题 :**Re: [ClusterLabs] clone resource not get restarted on fail*<br>> > <br>> > <br>> > On 02/13/2017 07:57 AM, he.hailong5@zte.com.cn wrote:<br>> > > Pacemaker 1.1.10<br>> > > <br>> > > Corosync 2.3.3<br>> > > <br>> > > <br>> > > this is a 3 nodes cluster configured with 3 clone resources, each<br>> > > attached wih a vip resource of IPAddr2:<br>> > > <br>> > > <br>> > > >crm status<br>> > > <br>> > > <br>> > > Online: [ paas-controller-1 paas-controller-2 paas-controller-3 ]<br>> > > <br>> > > <br>> > >  router_vip     (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-1 <br>> > > <br>> > >  sdclient_vip   (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-3 <br>> > > <br>> > >  apigateway_vip (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-2 <br>> > > <br>> > >  Clone Set: sdclient_rep [sdclient]<br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 paas-<br>> controller-3 ]<br>> > > <br>> > >  Clone Set: router_rep [router]<br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 paas-<br>> controller-3 ]<br>> > > <br>> > >  Clone Set: apigateway_rep [apigateway]<br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 paas-<br>> controller-3 ]<br>> > > <br>> > > <br>> > > It is observed that sometimes the clone resource is stuck to monitor<br>> > > when the service fails:<br>> > > <br>> > > <br>> > >  router_vip     (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-1 <br>> > > <br>> > >  sdclient_vip   (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-2 <br>> > > <br>> > >  apigateway_vip (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-3 <br>> > > <br>> > >  Clone Set: sdclient_rep [sdclient]<br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 ]<br>> > > <br>> > >      Stopped: [ paas-controller-3 ]<br>> > > <br>> > >  Clone Set: router_rep [router]<br>> > > <br>> > >      router     (ocf::heartbeat:router):        Started<br>> > > paas-controller-3 FAILED <br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 ]<br>> > > <br>> > >  Clone Set: apigateway_rep [apigateway]<br>> > > <br>> > >      apigateway (ocf::heartbeat:apigateway):    Started<br>> > > paas-controller-3 FAILED <br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 ]<br>> > > <br>> > > <br>> > > in the example above. the sdclient_rep get restarted on node 3, while<br>> > > the other two hang at monitoring on node 3, here are the ocf logs:<br>> > > <br>> > > <br>> > > abnormal (apigateway_rep):<br>> > > <br>> > > 2017-02-13 18:27:53 [23586]===print_log test_monitor run_func main===<br>> > > Starting health check.<br>> > > <br>> > > 2017-02-13 18:27:53 [23586]===print_log test_monitor run_func main===<br>> > > health check succeed.<br>> > > <br>> > > 2017-02-13 18:27:55 [24010]===print_log test_monitor run_func main===<br>> > > Starting health check.<br>> > > <br>> > > 2017-02-13 18:27:55 [24010]===print_log test_monitor run_func main===<br>> > > Failed: docker daemon is not running.<br>> > > <br>> > > 2017-02-13 18:27:57 [24095]===print_log test_monitor run_func main===<br>> > > Starting health check.<br>> > > <br>> > > 2017-02-13 18:27:57 [24095]===print_log test_monitor run_func main===<br>> > > Failed: docker daemon is not running.<br>> > > <br>> > > 2017-02-13 18:27:59 [24159]===print_log test_monitor run_func main===<br>> > > Starting health check.<br>> > > <br>> > > 2017-02-13 18:27:59 [24159]===print_log test_monitor run_func main===<br>> > > Failed: docker daemon is not running.<br>> > > <br>> > > <br>> > > normal (sdclient_rep):<br>> > > <br>> > > 2017-02-13 18:27:52 [23507]===print_log sdclient_monitor run_func<br>> > > main=== health check succeed.<br>> > > <br>> > > 2017-02-13 18:27:54 [23630]===print_log sdclient_monitor run_func<br>> > > main=== Starting health check.<br>> > > <br>> > > 2017-02-13 18:27:54 [23630]===print_log sdclient_monitor run_func<br>> > > main=== Failed: docker daemon is not running.<br>> > > <br>> > > 2017-02-13 18:27:55 [23710]===print_log sdclient_stop run_func main===<br>> > > Starting stop the container.<br>> > > <br>> > > 2017-02-13 18:27:55 [23710]===print_log sdclient_stop run_func main===<br>> > > docker daemon lost, pretend stop succeed.<br>> > > <br>> > > 2017-02-13 18:27:55 [23763]===print_log sdclient_start run_func main===<br>> > > Starting run the container.<br>> > > <br>> > > 2017-02-13 18:27:55 [23763]===print_log sdclient_start run_func main===<br>> > > docker daemon lost, try again in 5 secs.<br>> > > <br>> > > 2017-02-13 18:28:00 [23763]===print_log sdclient_start run_func main===<br>> > > docker daemon lost, try again in 5 secs.<br>> > > <br>> > > 2017-02-13 18:28:05 [23763]===print_log sdclient_start run_func main===<br>> > > docker daemon lost, try again in 5 secs.<br>> > > <br>> > > <br>> > > If I disable 2 clone resource, the switch over test for one clone<br>> > > resource works as expected: fail the service -> monitor fails -> stop<br>> > > -> start<br>> > > <br>> > > <br>> > > Online: [ paas-controller-1 paas-controller-2 paas-controller-3 ]<br>> > > <br>> > > <br>> > >  sdclient_vip   (ocf::heartbeat:IPaddr2):       Started paas-<br>> controller-2 <br>> > > <br>> > >  Clone Set: sdclient_rep [sdclient]<br>> > > <br>> > >      Started: [ paas-controller-1 paas-controller-2 ]<br>> > > <br>> > >      Stopped: [ paas-controller-3 ]<br>> > > <br>> > > <br>> > > what's the reason behind???? <br>> > <br>> > Can you show the configuration of the three clones, their operations,<br>> > and any constraints?<br>> > <br>> > Normally, the response is controlled by the monitor operation's on-fail<br>> > attribute (which defaults to restart).<br><br></div><p><br></p></div></div></div></div><p><br></p> </div>