On 5/2/21 11:10 PM, Andrei Borzenkov wrote:
On 03.05.2021 06:27, Matthew Schumacher wrote:
On 4/30/21 12:08 PM, Matthew Schumacher wrote:
On 4/30/21 11:51 AM, Ken Gaillot wrote:
On Fri, 2021-04-30 at 16:20 +0000, Strahil Nikolov wrote:
Ken ment yo use 'Filesystem' resourse for mounting that NFS server
and then clone that resource.

Best Regards,
Strahil Nikolov
I'm currently working on understanding and implementing this
suggestion from Andrei:

Which is exactly what clones are for. Clone NFS mount and order
VirtualDomain after clone. Just do not forget to set interleave=true so
VirtualDomain considers only local clone instance.
I tried to use this config, but it's not working for me.

I have a group that puts together a ZFS mount (which starts an NFS
share), configures some iscsi stuff, and binds a failover IP address:

group IP-ZFS-iSCSI fence-datastore zfs-datastore ZFSiSCSI failover-ip

Then, I made a mount to that NFS server as a resource:

primitive mount-datastore-nfs Filesystem \
     params device="<ip>:/datastore" directory="/datastore" fstype=nfs op
monitor timeout=40s interval=20s

Then I made a clone of this:

clone clone-mount-datastore-nfs mount-datastore-nfs meta interleave=true
target-role=Started

So, in theory, the ZFS/NFS server is mounted on all of the nodes with
the clone config.  Now I define some orders to make sure stuff comes up
in order:

order mount-datastore-before-vm-testvm Mandatory:
clone-mount-datastore-nfs vm-testvm
order zfs-datastore-before-mount-datastore Mandatory: IP-ZFS-iSCSI
clone-mount-datastore-nfs

In theory, when a node comes on line, it should check to make sure
IP-ZFS-iSCSI is running somewhere in the cluster, then check the local
instance of mount-datastore-nfs to make sure he have the NFS mounts we
need, then start vm-testvm, however that doesn't work.  If I kill
pacemaker on one node, it's fenced, rebooted, and when it comes back I
note this in the log:


# grep -v  pacemaker /var/log/pacemaker/pacemaker.log
May 03 03:02:41  VirtualDomain(vm-testvm)[1300]:    INFO: Configuration
file /datastore/vm/testvm/testvm.xml not readable during probe.
May 03 03:02:41  VirtualDomain(vm-testvm)[1300]:    INFO: environment is
invalid, resource considered stopped
May 03 03:02:42  Filesystem(mount-datastore-nfs)[1442]:    INFO: Running
start for 172.25.253.110:/dev/datastore-nfs-stub on /datastore
May 03 03:02:45  VirtualDomain(vm-testvm)[2576]:    INFO: Virtual domain
testvm currently has no state, retrying.
May 03 03:02:46  VirtualDomain(vm-testvm)[2576]:    INFO: Domain testvm
already stopped.

It is impossible to comment basing on couple of random lines from log.
You need to provide full log from DC and the node in question from the
moment pacemaker was restarted.

But the obvious answer - pacemaker runs probes when it starts and these
probes run asynchronously. So this may be simply output of resource
agent doing probe. In which case the result is correct - probe found out
domain was not running.


You are right Andrei.  Looking at the logs:

May 03 03:02:41 node2 pacemaker-attrd     [1281] (attrd_peer_update)     notice: Setting #node-unfenced[node2]: (unset) -> 1620010887 | from node1 May 03 03:02:41 node2 pacemaker-execd     [1280] (process_lrmd_get_rsc_info)     info: Agent information for 'vm-testvm' not in cache May 03 03:02:41 node2 pacemaker-execd     [1280] (process_lrmd_rsc_register)     info: Cached agent information for 'vm-testvm' May 03 03:02:41 node2 pacemaker-controld  [1283] (do_lrm_rsc_op) info: Performing key=7:1:7:b8b0100c-2951-4d07-83da-27cfc1225718 op=vm-testvm_monitor_0 May 03 03:02:41 node2 pacemaker-controld  [1283] (action_synced_wait)     info: VirtualDomain_meta-data_0[1288] exited with status 0 May 03 03:02:41 node2 pacemaker-based     [1278] (cib_process_request)     info: Forwarding cib_modify operation for section status to all (origin=local/crmd/8) May 03 03:02:41 node2 pacemaker-execd     [1280] (process_lrmd_get_rsc_info)     info: Agent information for 'fence-datastore' not in cache May 03 03:02:41 node2 pacemaker-execd     [1280] (process_lrmd_rsc_register)     info: Cached agent information for 'fence-datastore' May 03 03:02:41 node2 pacemaker-controld  [1283] (do_lrm_rsc_op) info: Performing key=8:1:7:b8b0100c-2951-4d07-83da-27cfc1225718 op=fence-datastore_monitor_0 May 03 03:02:41  VirtualDomain(vm-testvm)[1300]:    INFO: Configuration file /datastore/vm/testvm/testvm.xml not readable during probe. May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: Diff: --- 0.1608.23 2 May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: Diff: +++ 0.1608.24 (null) May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: +  /cib:  @num_updates=24 May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: ++ /cib/status/node_state[@id='2']: <transient_attributes id="2"/> May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: ++ <instance_attributes id="status-2"> May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: ++                                       <nvpair id="status-2-.node-unfenced" name="#node-unfenced" value="1620010887"/> May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: ++ </instance_attributes> May 03 03:02:41 node2 pacemaker-based     [1278] (cib_perform_op)     info: ++ </transient_attributes> May 03 03:02:41 node2 pacemaker-based     [1278] (cib_process_request)     info: Completed cib_modify operation for section status: OK (rc=0, origin=node1/attrd/16, version=0.1608.24) May 03 03:02:41  VirtualDomain(vm-testvm)[1300]:    INFO: environment is invalid, resource considered stopped

When node2 comes back from being fenced (testing a hard failure), it checks the status of vm-testvm because I previously did a "crm resouce move vm-testvm node2" so it's trying to put the VirtualDomain resource back on node2, but calling monitor finds that the config file is missing because the NFS mount isn't up yet, so it assumes the resource is stopped (it's not), then its confused:

May 03 03:02:45  VirtualDomain(vm-testvm)[2576]:    INFO: Virtual domain testvm currently has no state, retrying. May 03 03:02:46  VirtualDomain(vm-testvm)[2576]:    INFO: Domain testvm already stopped.

Eventually it does end up stopped on node1 and started on node2.

Is there a way to configure the order so that we don't even run monitor until the dependent resource is running?

Is there a way to have a delayed start?

At the end of the day, the way VirtualDomain works has been very troublesome for me.  The second that the config file isn't available pacemaker thinks that the domain is down and starts kicking the stool from under things, even if the domain is running just fine. It seems to me that reading the config file is a poor way to test if it's working as it surely can be up even if the config file is missing, and because it's generated lots of false positives for me. I wonder why it was written this way.  Wouldn't it make more sense for monitor to get a status from virsh, and that we don't bother to look for the config file unless we are starting, and if its missing, we return failed to start?

Thanks for the help,
Matt



_______________________________________________
Manage your subscription:
https://lists.clusterlabs.org/mailman/listinfo/users

ClusterLabs home: https://www.clusterlabs.org/

Reply via email to