Skip to content

[controller] Disable quorum and auto-TieBreaker for single-replica StorageClasses#637

Draft
IvanOgurchenok wants to merge 1 commit into
mainfrom
fix/disable-quorum-for-r1
Draft

[controller] Disable quorum and auto-TieBreaker for single-replica StorageClasses#637
IvanOgurchenok wants to merge 1 commit into
mainfrom
fix/disable-quorum-for-r1

Conversation

@IvanOgurchenok

Copy link
Copy Markdown
Contributor

Description

Disable DRBD quorum and auto-TieBreaker for single-replica (ReplicationNone) StorageClasses.

Move quorum-related SC parameters (auto-quorum, auto-add-quorum-tiebreaker, on-no-quorum) from the common parameter block into per-replication-mode switch cases. For ReplicationNone set auto-add-quorum-tiebreaker=false and do not set auto-quorum or on-no-quorum. No changes for ReplicationAvailability (r2) and ReplicationConsistencyAndAvailability (r3).

Why do we need it, and what problem does it solve?

For ReplicationNone (placementCount=1) the controller sets auto-quorum=suspend-io and auto-add-quorum-tiebreaker=true — same as for r2/r3. This causes LINSTOR to create a diskless TieBreaker and enable quorum=majority on single-replica resources. When a diskless peer (TieBreaker or CSI remote-access replica) loses connectivity, DRBD cannot achieve majority (1 of 2) and blocks all I/O with SS_NO_QUORUM (state change failed -25 in dmesg), even though the single diskful replica is healthy and data is intact.

This effectively turns a harmless network blip into a complete volume outage for r1 workloads.

What is the expected result?

  • New ReplicationNone StorageClasses MUST NOT contain auto-quorum and on-no-quorum parameters and MUST have auto-add-quorum-tiebreaker=false.
  • New r1 DRBD resources MUST NOT have quorum=majority set by LINSTOR.
  • Losing connectivity to a diskless peer on r1 resources MUST NOT block I/O or cause SS_NO_QUORUM errors.
  • ReplicationAvailability (r2) and ReplicationConsistencyAndAvailability (r3) StorageClasses MUST NOT be affected — their quorum parameters remain unchanged.
  • Existing r1 resources with quorum=majority are not fixed by this change and require a manual fix or a separate watcher patch:
    linstor resource-definition set-property <rd-name> DrbdOptions/Resource/quorum off
    

Checklist

  • The code is covered by unit tests.
  • e2e tests passed.
  • Documentation updated according to the changes.
  • Changes were tested in the Kubernetes cluster manually.

…orageClasses

For ReplicationNone (placementCount=1) quorum is meaningless because
there is only one data copy and split-brain is impossible. Previously
auto-quorum=suspend-io and auto-add-quorum-tiebreaker=true were set
for all replication modes, causing LINSTOR to create a diskless
TieBreaker and enable quorum=majority even for r1 resources. When the
diskless peer lost connectivity, DRBD blocked I/O with SS_NO_QUORUM
(-25) despite the single diskful replica being perfectly healthy.
Move quorum-related SC parameters (auto-quorum, auto-add-quorum-tiebreaker,
on-no-quorum) from the common block into per-replication-mode cases and
set auto-add-quorum-tiebreaker=false for ReplicationNone.

Signed-off-by: Ivan Ogurchenok <ivan.ogurchenok@flant.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant