Files
nats_server_cluster/docker-compose.yml
T
2026-09-22 06:16:30 +07:00

88 lines
2.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
services:
nats-server1:
image: nats:latest
container_name: nats-server1
command: ["-c", "/etc/nats/nats-server.conf", "--server_name", "nats-server1"]
ports:
- "4222:4222" # Client Traffic
- "9222:9222" # Websockets (Julia/Web UI)
- "6222:6222" # Cluster Routing Mesh
volumes:
- ./nats-server.conf:/etc/nats/nats-server.conf:ro
- ./data/nats-jetstream:/data/nats-jetstream
restart: unless-stopped
# ==========================================
# NATS UI Management
# ==========================================
# You only need the UI running on one of your machines
nats-ui:
image: ghcr.io/nats-nui/nui:latest
volumes:
- ./nats_ui_db:/db
ports:
- "31311:31311"
restart: unless-stopped
# to make 3-node nats. copy docker-compose.yml and nats-server.conf to PC2 and PC3
# Important Architectural Notes for Scaling Later
# When you eventually uncomment nats-server2 and nats-server3, keep these structural behaviors in mind:
# The Quorum Rule (Raft): JetStream requires a strict majority to achieve quorum and allow stream writes.
# With 1 node running, your cluster size is effectively 1, so quorum is met.
# If you bring up a second node, your cluster size becomes 2, meaning you need both nodes online to function. Never run a 2-node JetStream cluster in production.
# When you decide to scale up, uncomment both nats-server2 and nats-server3 at the same time to establish a stable 3-node cluster (where 2 out of 3 nodes must be alive).
# Stream Replicas: When you create a Stream using the CLI or code in a 3-node cluster, you can specify --replicas 3. This instructs NATS to automatically mirror that stream’s data chunks across all 3 underlying storage engines over the internal 6222 mesh network.
# How Your Applications Connect Now
# When your application workers (like your Julia or Rust processes) connect to a multi-node cluster, you should provide all three host IPs in the client connection string:
# nats://192.168.1.101:4222,nats://192.168.1.102:4222,nats://192.168.1.103:4222
# If PC 1 goes down completely, your application client will automatically reconnect to PC 2 or PC 3 within milliseconds, and JetStream data processing will continue without losing a single message.