Skip to content

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