Consensus

Configuration

Config reference, YAML example, and options for Consensus

YAML Configuration Example

config.yaml
extensions:
  consensus:
    nodeID: "node-1"                 # required, must be unique
    clusterID: "default"
    bindAddr: "0.0.0.0"
    bindPort: 7000

    raft:
      heartbeatInterval: "1s"
      electionTimeoutMin: "5s"
      electionTimeoutMax: "10s"
      snapshotInterval: "30m"
      snapshotThreshold: 10000

    transport:
      type: "grpc"

    discovery:
      type: "static"                 # "static" or "dynamic"
      peers:
        - "node-2:7000"
        - "node-3:7000"

    storage:
      type: "badger"
      path: "./data/consensus"

    election:
      enabled: true

    health:
      enabled: true

    adminAPI:
      enabled: true
      pathPrefix: "/consensus"

    events:
      enabled: true

Programmatic Configuration

ext := consensus.NewExtension(
    consensus.WithNodeID("node-1"),
    consensus.WithClusterID("my-cluster"),
    consensus.WithBindAddr("0.0.0.0", 7000),
    consensus.WithPeers("node-2:7000", "node-3:7000"),
    consensus.WithSnapshotInterval(15*time.Minute),
)

Config Struct Reference

Core

FieldTypeDefaultDescription
NodeIDstring"" (required)Unique node identifier
ClusterIDstring"default"Cluster identifier
BindAddrstring"0.0.0.0"Raft bind address
BindPortint7000Raft bind port

Raft

FieldTypeDefaultDescription
HeartbeatIntervaltime.Duration1sLeader heartbeat interval
ElectionTimeoutMintime.Duration5sMinimum election timeout
ElectionTimeoutMaxtime.Duration10sMaximum election timeout
SnapshotIntervaltime.Duration30mSnapshot creation interval
SnapshotThresholdint10000Log entries before snapshot

Transport

FieldTypeDefaultDescription
Typestring"grpc"Transport protocol

Discovery

FieldTypeDefaultDescription
Typestring"static""static" or "dynamic"
Peers[]string[]Peer addresses (static mode)

Storage

FieldTypeDefaultDescription
Typestring"badger"Storage backend
Pathstring"./data/consensus"Data directory

Feature Flags

FieldTypeDefaultDescription
Election.EnabledbooltrueEnable leader election
Health.EnabledbooltrueEnable health checks
AdminAPI.EnabledbooltrueEnable admin API
AdminAPI.PathPrefixstring"/consensus"Admin API path prefix
Events.EnabledbooltrueEmit events via events extension

How is this guide?

On this page