Files
upstream-centrifugo/misc/nats_cluster/create_cluster.sh
upstream-mirror b352a9a30d
Some checks failed
test / Lint (push) Failing after 3s
test / Test with Go 1.26.8 (push) Failing after 2s
snapshot of https://github.com/centrifugal/centrifugo.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 01:17:21 +05:00

71 lines
1.7 KiB
Bash

#!/bin/bash
# Function to check if a NATS node is up
wait_for_nats() {
local port=$1
while ! nc -z localhost "$port" > /dev/null 2>&1; do
echo "Waiting for NATS node on port $port to start..."
sleep 1
done
echo "NATS node on port $port is available."
}
# Array to hold PIDs of NATS server processes
declare -a nats_pids
# Function to start NATS cluster nodes
start_nats_cluster() {
local nodes=$1
local base_port=4222
local cluster_port_base=5222
local log_dir="./nats_logs"
local cluster_nodes=()
# Create log directory, clean previous
rm -rf "$log_dir"
mkdir -p "$log_dir"
# Start NATS nodes
for ((i=0; i<nodes; i++)); do
local port=$((base_port + i))
local cluster_port=$((cluster_port_base + i))
local log_file="$log_dir/nats_node_${port}.log"
# Start a NATS server
nats-server --port "$port" --config server.conf --cluster nats://localhost:"$cluster_port" \
--routes nats://localhost:"$cluster_port_base" \
> "$log_file" 2>&1 &
nats_pids[i]=$!
cluster_nodes+=("localhost:$port")
done
# Wait for all nodes to become available
for port in "${cluster_nodes[@]}"; do
wait_for_nats "${port##*:}"
done
}
# Function to shut down NATS cluster nodes
shutdown_nats_cluster() {
echo "Shutting down NATS cluster nodes..."
for pid in "${nats_pids[@]}"; do
kill "$pid"
done
}
# Trap Ctrl+C (SIGINT) to call shutdown function
trap shutdown_nats_cluster SIGINT
# Check if the number of nodes is provided
if [ -z "$1" ]; then
echo "Usage: $0 <number_of_nodes>"
exit 1
fi
# Start the NATS cluster
start_nats_cluster "$1"
# Wait until a keyboard interrupt (Ctrl+C) is detected
echo "NATS cluster is running. Press Ctrl+C to stop."
wait