Three-Node Cluster Example¶
This TeskaLabs LogMan.io layout is a three-member cluster on three full-sized machines.
Install the first node like a single-node deployment. Join the second node using the data-node flow, then extend model.yaml with core cluster services and the rest of the stack, same as in the 2+1 example after the second node joins.
After the second node is in place, model.yaml should look like this:
model.yaml after installation of the second node
define:
type: rc/model
services:
zoonavigator:
instances: {1: {node: "node1"}}
mongo:
- node1
- node2
influxdb:
- node1
grafana:
- node1
telegraf:
- node1
- node2
kafka:
- node1
- node2
kafdrop:
- node1
kibana:
- node1
elasticsearch:
instances:
master-1:
node: node1
hot-1:
node: node1
warm-1:
node: node1
cold-1:
node: node1
master-2:
node: node2
hot-2:
node: node2
warm-2:
node: node2
cold-2:
node: node2
nginx:
- node1
- node2
seacat-auth:
- node1
- node2
asab-pyppeteer:
- node1
bs-query:
- node1
asab-iris:
- node1
- node2
lmio-installer:
- node1
lmio-receiver:
- node1
- node2
lmio-depositor:
- node1
- node2
lmio-elman:
- node1
lmio-alerts:
- node1
lmio-lookupbuilder:
- node1
- node2
lmio-ipaddrproc:
- node1
- node2
lmio-watcher:
- node1
lmio-correlator-builder:
- node1
lmio-collector-system:
- node1
- node2
lmio-feeds:
- node1
asab-discovery:
- node1
lmio-franz:
- node1
lmio-trex:
- node1
lmio-parser-builder:
- node1
lmio-chart:
- node1
- node2
params:
PUBLIC_URL: https://node1 # change this default to custom domain
applications:
- name: "ASAB Maestro"
version: v25.47.09
- name: "LogMan.io"
version: v25.47.09
webapps:
/: LogMan.io WebUI
/auth: SeaCat Auth WebUI
Do not leave the cluster in a two-node configuration for long; that risks split-brain. Add the third node soon after the second.
Join the third node with the same procedure as the second. After bootstrap, add node3 everywhere node2 appears for shared infrastructure and data-plane services, and add a full Elasticsearch instance set (master-3, hot-3, warm-3, cold-3) on node3, matching node2.
The finished model.yaml for a symmetric three-node cluster should look like this:
model.yaml of three-node cluster (third node mirrors the second)
define:
type: rc/model
services:
zoonavigator:
instances: {1: {node: "node1"}}
mongo:
- node1
- node2
- node3
influxdb:
- node1
grafana:
- node1
telegraf:
- node1
- node2
- node3
kafka:
- node1
- node2
- node3
kafdrop:
- node1
kibana:
- node1
elasticsearch:
instances:
master-1:
node: node1
hot-1:
node: node1
warm-1:
node: node1
cold-1:
node: node1
master-2:
node: node2
hot-2:
node: node2
warm-2:
node: node2
cold-2:
node: node2
master-3:
node: node3
hot-3:
node: node3
warm-3:
node: node3
cold-3:
node: node3
nginx:
- node1
- node2
- node3
seacat-auth:
- node1
- node2
- node3
asab-pyppeteer:
- node1
bs-query:
- node1
asab-iris:
- node1
- node2
- node3
lmio-installer:
- node1
lmio-receiver:
- node1
- node2
- node3
lmio-depositor:
- node1
- node2
- node3
lmio-elman:
- node1
lmio-alerts:
- node1
lmio-lookupbuilder:
- node1
- node2
- node3
lmio-ipaddrproc:
- node1
- node2
- node3
lmio-watcher:
- node1
lmio-correlator-builder:
- node1
lmio-collector-system:
- node1
- node2
- node3
lmio-feeds:
- node1
asab-discovery:
- node1
lmio-franz:
- node1
lmio-trex:
- node1
lmio-parser-builder:
- node1
lmio-chart:
- node1
- node2
- node3
params:
PUBLIC_URL: https://node1 # change this default to custom domain
applications:
- name: "ASAB Maestro"
version: v25.47.09
- name: "LogMan.io"
version: v25.47.09
webapps:
/: LogMan.io WebUI
/auth: SeaCat Auth WebUI