KumoMTA scales horizontally by running multiple independent nodes. There's no built-in cluster — you shard at the upstream by hashing on tenant or campaign.
Typical layout:
[ Application / API ]
│
shard router (HAProxy with consistent hash on header)
│
┌────┼────┬────┬────┐
[node1] [node2] [node3] [node4]
│ │ │ │
IPs IPs IPs IPs
Why hash by tenant: all of a tenant's queues live on one node → consistent throttling and warming behavior. If a tenant grows large, move them to a dedicated pair.
HAProxy snippet:
backend kumo_pool
balance hdr(X-Kumo-Tenant)
hash-type consistent
server node1 10.0.0.11:587 check
server node2 10.0.0.12:587 check
server node3 10.0.0.13:587 check
Application sets X-Kumo-Tenant header at SMTP time (via XCLIENT or custom AUTH metadata).
Sign in to keep track of what you have read.