Data Plane
Installation
Rokka.StorageNode & Kdouja Engine Setup
Setting up raw data nodes, attaching NVMe block devices, and tuning Direct I/O segment storage.
Rokka.StorageNode is the high-performance data daemon that executes on every storage host in the cluster. It embeds the Kdouja LSM Engine, receiving streaming chunk uploads over gRPC and writing them to raw NVMe disk segments via unbuffered Direct I/O.
1. Physical Disk Preparation
Every physical storage host must designate dedicated raw NVMe or enterprise SSD partitions for Kdouja segment storage:
# Identify NVMe block devices
lsblk -d -o NAME,SIZE,MODEL,ROTA
# Create dedicated mount point
sudo mkdir -p /mnt/aarkam/data01
# Format partition with 4KB sector alignment
sudo mkfs.ext4 -F -b 4096 /dev/nvme0n1p1
# Add persistent mount in /etc/fstab with noatime option
echo '/dev/nvme0n1p1 /mnt/aarkam/data01 ext4 defaults,noatime,nodiratime 0 2' | sudo tee -a /etc/fstab
sudo mount -a
2. Configuration (appsettings.json)
Configure /opt/rokka-storagenode/appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"StorageNode": {
"NodeId": "storage-node-01",
"FailureDomain": "Rack-A1",
"DataDirectory": "/mnt/aarkam/data01",
"MaxStorageBytes": 10995116277760,
"EnableDirectIo": true,
"SegmentSizeMb": 256
},
"Kdouja": {
"MemTableSizeMb": 64,
"WalSyncMode": "DirectWriteThrough",
"CompactionThreads": 4
},
"Kestrel": {
"Endpoints": {
"gRPC-Http": {
"Url": "http://0.0.0.0:7775",
"Protocols": "Http2"
},
"gRPC-Https": {
"Url": "https://0.0.0.0:57775",
"Protocols": "Http2",
"Certificate": {
"Path": "/etc/ssl/certs/rokka-storage.pfx",
"Password": "CertPasswordHere"
}
}
}
}
}
3. Systemd Service Setup
Create /etc/systemd/system/rokka-storagenode.service:
[Unit]
Description=Rokka Storage Node Daemon (Embedded Kdouja LSM)
After=network.target local-fs.target
[Service]
WorkingDirectory=/opt/rokka-storagenode
ExecStart=/usr/bin/dotnet /opt/rokka-storagenode/Rokka.StorageNode.dll
Restart=always
RestartSec=5
KillSignal=SIGINT
SyslogIdentifier=rokka-storagenode
User=rokka
# Storage Direct I/O Permissions
LimitNOFILE=1048576
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
Start the storage service:
sudo systemctl daemon-reload
sudo systemctl enable --now rokka-storagenode
4. Registering the Node into the Hash Ring
Once the daemon is online, register the node into the active cluster topology using the am CLI:
# Register storage node with failure domain
am node add storage-node-01 \
--address "https://192.168.1.21:57775" \
--rack "Rack-A1" \
--capacity 10TB
# Verify the node appears in the cluster ring
am node list
Aarkam Sovereign Data Fabric — https://aarkam.io
Aarkam Wiki • Enterprise Technical Documentation