2 + 1 Cluster Example¶
This TeskaLabs LogMan.io layout uses two full-sized core nodes plus one Arbiter node. You need two production-class machines and a smaller host for the Arbiter. That is often a compact VM on your existing virtualization platform, or an installation colocated with a hardware collector.
Each node follows a different install path: you are forming a three-member cluster, not three isolated installs.
Install and stabilize the first node using the same steps as for a single-node deployment. Then join the second node to that cluster. After bootstrap, the second member is in the cluster but still minimal; you assign core cluster services and remaining LogMan.io services through model.yaml.
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. Plan to add the Arbiter (third node) soon after the second node joins.
The third member is the Arbiter. Install it per the Arbiter section of the installation guide. After bootstrap, attach it to the cluster and declare the consensus and monitoring services in the model.
The finished model.yaml for a 2+1 cluster should look like this:
model.yaml of 2+1 cluster
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
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
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
- node3
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