#!/bin/bash
# Settings
REDIS_VERSION=${REDIS_VERSION:-"6.2.1"}
CLUSTER_HOST=${CLUSTER_HOST:-127.0.0.1}
PORT=${PORT:-30000}
TIMEOUT=${TIMEOUT:-2000}
NODES=${NODES:-6}
REPLICAS=${REPLICAS:-1}
ADDITIONAL_OPTIONS=${ADDITIONAL_OPTIONS:-""}
ADDITIONAL_CLI_OPTIONS=${ADDITIONAL_CLI_OPTIONS:-""}
# Version specific options
if [[ $REDIS_VERSION == 7* ]]; then
ADDITIONAL_OPTIONS="--enable-debug-command yes ${ADDITIONAL_OPTIONS}"
fi
if [ "$1" == "start" ]; then
FIRST_PORT=${PORT}
HOSTS=""
for i in $(seq $NODES); do
echo "Starting redis:${REDIS_VERSION} on port $PORT..."
docker run --name redis-${PORT} --net=host -d redis:${REDIS_VERSION} redis-server --cluster-enabled yes --port ${PORT} --cluster-node-timeout ${TIMEOUT} ${ADDITIONAL_OPTIONS}
HOSTS="$HOSTS $CLUSTER_HOST:$PORT"
PORT=$((PORT+1))
done
sleep 20
echo 'yes' | docker run --name redis-cli --net=host -i --rm redis:${REDIS_VERSION} redis-cli -p ${FIRST_PORT} ${ADDITIONAL_CLI_OPTIONS} --cluster create ${HOSTS} --cluster-replicas ${REPLICAS}
exit 0
fi
if [ "$1" == "stop" ]; then
for i in $(seq $NODES); do
echo "Stopping redis on port $PORT..."
docker rm -f redis-${PORT} &> /dev/null
PORT=$((PORT+1))
done
exit 0
fi
echo "Usage: $0 [start|stop]"
echo "start -- Start Redis Cluster instances."
echo "stop -- Stop Redis Cluster instances."