Files
upstream-centrifugo/misc/redis_sentinel/start.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

95 lines
2.6 KiB
Bash

#!/bin/bash
# Function to wait for Redis node to become available
wait_for_redis() {
local port=$1
while ! redis-cli -p "$port" ping > /dev/null 2>&1; do
echo "Waiting for Redis node on port $port to start..."
sleep 1
done
echo "Redis node on port $port is available."
}
# Array to hold PIDs of Redis server processes
declare -a redis_pids
# Function to start Redis Sentinel setup
start_redis_sentinel() {
local base_port=7000
local sentinel_port=26379
local data_dir="./sentinel_data"
# Clean up previous setup
rm -rf "$data_dir"
mkdir -p "$data_dir"
# Start the master node
local master_port=$((base_port))
local master_dir="$data_dir/master"
mkdir -p "$master_dir"
pushd "$master_dir" > /dev/null
redis-server --port "$master_port" --save "" --appendonly no --dbfilename "dump.rdb" --logfile "redis.log" &
local pid=$!
redis_pids+=($pid)
echo "Master started on port $master_port with PID $pid"
popd > /dev/null
# Start the replicas
for i in 1 2; do
local replica_port=$((base_port + i))
local replica_dir="$data_dir/replica_$i"
mkdir -p "$replica_dir"
pushd "$replica_dir" > /dev/null
redis-server --port "$replica_port" --slaveof 127.0.0.1 "$master_port" --save "" --appendonly no --dbfilename "dump.rdb" --logfile "redis.log" &
pid=$!
redis_pids+=($pid)
echo "Replica $i started on port $replica_port with PID $pid"
popd > /dev/null
done
# Wait for all nodes to become available
wait_for_redis "$master_port"
for i in 1 2; do
wait_for_redis $((base_port + i))
done
# Start Redis Sentinel
local sentinel_dir="$data_dir/sentinel"
mkdir -p "$sentinel_dir"
pushd "$sentinel_dir" > /dev/null
cat <<EOF > sentinel.conf
port $sentinel_port
sentinel monitor mymaster 127.0.0.1 $master_port 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
EOF
redis-server sentinel.conf --sentinel &
pid=$!
redis_pids+=($pid)
echo "Sentinel started on port $sentinel_port with PID $pid"
popd > /dev/null
}
# Function to shut down Redis nodes and Sentinel
shutdown_redis_sentinel() {
echo "Shutting down Redis nodes and Sentinel..."
for pid in "${redis_pids[@]}"; do
kill "$pid"
echo "Stopped process with PID $pid"
done
}
# Trap Ctrl+C (SIGINT) to call shutdown function
trap shutdown_redis_sentinel SIGINT
# Start the Redis Sentinel setup
start_redis_sentinel
# Wait until a keyboard interrupt (Ctrl+C) is detected
echo "Redis Sentinel setup is running. Press Ctrl+C to stop."
echo "All PIDs: ${redis_pids[*]}"
wait