Aarkam / Aarkam Wiki / Installation / Rokka.Coordinator Module Setup
Core Controller Installation

Rokka.Coordinator Module Setup

Deploying the distributed control plane, Raft MON consensus quorum, and topology resolver.

Last updated: Sep 23, 2026

Rokka.Coordinator is the stateless control plane of the storage fabric. It manages the consistent hash ring, orchestrates node placement policies across physical failure domains, and participates in the Raft MON consensus quorum.


1. Prerequisites & Cluster Sizing

  • Quorum Requirement: Production deployments require an odd number of coordinators (\(N = 3\) or \(N = 5\)) across independent physical hosts or availability zones to prevent split-brain conditions.
  • Ports: Port 7774 (HTTP) and 57774 (HTTPS / gRPC) open between all coordinator nodes and storage nodes.
  • Resource Footprint: 4 vCPUs, 8 GB RAM, and 50 GB fast SSD storage for Raft log persistence.

2. Configuration (appsettings.json)

On Coordinator Node 1 (192.168.1.11), create /opt/rokka-coordinator/appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "Kdouja": {
    "BaseDirectory": "/var/lib/rokka/metadata"
  },
  "Raft": {
    "NodeId": "coord-01",
    "HeartbeatIntervalMs": 150,
    "ElectionTimeoutMs": 300,
    "PeerCoordinators": [
      "https://192.168.1.12:57774",
      "https://192.168.1.13:57774"
    ]
  },
  "Kestrel": {
    "Endpoints": {
      "gRPC-Http": {
        "Url": "http://0.0.0.0:7774",
        "Protocols": "Http2"
      },
      "gRPC-Https": {
        "Url": "https://0.0.0.0:57774",
        "Protocols": "Http2",
        "Certificate": {
          "Path": "/etc/ssl/certs/rokka-coordinator.pfx",
          "Password": "CertPasswordHere"
        }
      }
    }
  }
}

Repeat on Node 2 (192.168.1.12) and Node 3 (192.168.1.13), updating NodeId and PeerCoordinators accordingly.


3. Systemd Service Configuration

Create /etc/systemd/system/rokka-coordinator.service:

[Unit]
Description=Rokka Distributed Coordinator (Raft MON Quorum)
After=network.target

[Service]
WorkingDirectory=/opt/rokka-coordinator
ExecStart=/usr/bin/dotnet /opt/rokka-coordinator/Rokka.Coordinator.dll
Restart=always
RestartSec=5
KillSignal=SIGINT
SyslogIdentifier=rokka-coordinator
User=rokka
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

Start the coordinator service across all 3 nodes:

sudo systemctl daemon-reload
sudo systemctl enable --now rokka-coordinator

4. Validating Raft Quorum Health

Verify that the 3 coordinators formed a healthy consensus group using the am CLI:

# Check Raft consensus and leader election
am mon status

# Inspect coordinator peer latencies
am mon peers

A healthy response confirms:

  • Quorum Status: Healthy (3/3 Online)
  • Leader: coord-01 (192.168.1.11:57774)
  • Term: 1
  • Replication Delay: < 1.2 ms