The votequorum library is delivered with the corosync project. It is the external interface to the vote-based quorum service. This service is optionally loaded into all nodes in a corosync cluster to avoid split-brain situations. It does this by having a number of votes assigned to each system in the cluster and ensuring that only when a majority of the votes are present, cluster operations are allowed to proceed.
The library provides a mechanism to:
* Query the quorum status
* Get a list of nodes known to the quorum service
* Receive notifications of quorum state changes
* Change the number of votes assigned to a node
* Change the number of expected votes for a cluster to be quorate
* Connect an additional quorum device to allow small clusters to remain quorate during node outages.
Votequorum is the only one service where communication with library is allowed during synchronization phase. This makes it possible for quorum device to react to membership change and decide to vote or not without timing hazard, because corosync stands in synchronization phase until qdevice on all nodes votes or timeout expires.
As a side effect, extended virtual synchrony is broken for the votequorum service. This means, that messages sent during synchronization phase can be delivered sooner then messages sent right before sync phase began. This applies also for local messages.
No known bugs at the time of writing. The authors are from outerspace. Deal with it.
corosync-quorumtool(8), votequorum(5), votequorum_initialize(3), votequorum_finalize(3), votequorum_getinfo(3), votequorum_trackstart(3), votequorum_trackstop(3), votequorum_fd_get(3), votequorum_dispatch(3), votequorum_context_set(3), votequorum_context_get(3), votequorum_setexpected(3), votequorum_setvotes(3)
corosync(8), corosync-quorumtool(8), votequorum(5), votequorum_context_get(3), votequorum_context_set(3), votequorum_dispatch(3), votequorum_fd_get(3), votequorum_finalize(3), votequorum_getinfo(3), votequorum_initialize(3), votequorum_qdevice_master_wins(3), votequorum_qdevice_poll(3), votequorum_qdevice_register(3), votequorum_qdevice_unregister(3), votequorum_qdevice_update(3), votequorum_setexpected(3), votequorum_setvotes(3), votequorum_trackstart(3), votequorum_trackstop(3).