Ceph client Mandatory Exclusive Locks
Mandatory Exclusive Locks is a feature that locks an RBD to a single client, if multiple mounts are in place. Enabling this feature means that only one client can modify an RBD device at a time and provides protection for failed clients.
Mandatory Exclusive Locks helps address the write conflict situation when multiple mounted
clients try to write to the same object. This feature is built on
object-watch-notify explained in the previous section. So, when writing, if one
client first establishes an exclusive lock on an object, another mounted client will first check to
see if a peer has placed a lock on the object before writing.
With this feature enabled, only one client can modify an RBD device at a time, especially when
changing internal RBD structures during operations like snapshot create/delete. It
also provides some protection for failed clients. For instance, if a virtual machine seems to be
unresponsive and you start a copy of it with the same disk elsewhere, the first one will be
blacklisted in Ceph and unable to corrupt the new one.
Mandatory Exclusive Locks are not enabled by default. You have to explicitly enable it with
--image-feature parameter when creating an image.
Example
[root@mon ~]# rbd create --size 102400 mypool/myimage --image-feature 13
In this example, the numeral 13 is a summation of 1, 4, and 8, where 1 enables layering support, 4 enables exclusive locking support, and 8 enables object map support. So, the command creates a 100 GB RBD image, enable layering, exclusive lock, and object map.
Mandatory Exclusive Locks is also a prerequisite for object map. Without
enabling exclusive locking support, object map support cannot be enabled.
Mandatory Exclusive Locks also does some ground work for mirroring.