mirror of
https://github.com/php-win-ext/phpredis.git
synced 2026-03-26 18:12:19 +01:00
* Modified RedisArray to support IPv6 * Updated general test suite to take an override host * Updated make-cluster.sh to take an override host
143 lines
3.2 KiB
Bash
Executable File
143 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# make-cluster.sh
|
|
# This is a simple script used to automatically spin up a Redis cluster instance
|
|
# simplifying the process of running unit tests.
|
|
#
|
|
# Usage:
|
|
# ./make-cluster.sh start [host]
|
|
# ./make-cluster.sh stop [host]
|
|
#
|
|
|
|
BASEDIR=`pwd`
|
|
NODEDIR=$BASEDIR/nodes
|
|
MAPFILE=$NODEDIR/nodemap
|
|
|
|
# Host, nodes, replicas, ports, etc. Change if you want different values
|
|
HOST="127.0.0.1"
|
|
NODES=12
|
|
REPLICAS=3
|
|
START_PORT=7000
|
|
END_PORT=`expr $START_PORT + $NODES`
|
|
|
|
# Helper to determine if we have an executable
|
|
checkExe() {
|
|
if ! hash $1 > /dev/null 2>&1; then
|
|
echo "Error: Must have $1 on the path!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Run a command and output what we're running
|
|
verboseRun() {
|
|
echo "Running: $@"
|
|
$@
|
|
}
|
|
|
|
# Spawn a specific redis instance, cluster enabled
|
|
spawnNode() {
|
|
# Attempt to spawn the node
|
|
verboseRun redis-server --cluster-enabled yes --dir $NODEDIR --port $PORT \
|
|
--cluster-config-file node-$PORT.conf --daemonize yes --save \'\' \
|
|
--bind $HOST --dbfilename node-$PORT.rdb
|
|
|
|
# Abort if we can't spin this instance
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Can't spawn node at port $PORT."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Spawn nodes from start to end port
|
|
spawnNodes() {
|
|
for PORT in `seq $START_PORT $END_PORT`; do
|
|
# Attempt to spawn the node
|
|
spawnNode $PORT
|
|
|
|
# Add this host:port to our nodemap so the tests can get seeds
|
|
echo "$HOST:$PORT" >> $MAPFILE
|
|
done
|
|
}
|
|
|
|
# Check to see if any nodes are running
|
|
checkNodes() {
|
|
echo -n "Checking port availability "
|
|
|
|
for PORT in `seq $START_PORT $END_PORT`; do
|
|
redis-cli -p $PORT ping > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "FAIL"
|
|
echo "Error: There appears to be an instance running at port $PORT"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "OK"
|
|
}
|
|
|
|
# Create our 'node' directory if it doesn't exist and clean out any previous
|
|
# configuration files from a previous run.
|
|
cleanConfigInfo() {
|
|
verboseRun mkdir -p $NODEDIR
|
|
verboseRun rm -f $NODEDIR/*
|
|
}
|
|
|
|
# Initialize our cluster with redis-trib.rb
|
|
initCluster() {
|
|
TRIBARGS=""
|
|
for PORT in `seq $START_PORT $END_PORT`; do
|
|
TRIBARGS="$TRIBARGS $HOST:$PORT"
|
|
done
|
|
|
|
verboseRun redis-trib.rb create --replicas $REPLICAS $TRIBARGS
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Couldn't create cluster!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Attempt to spin up our cluster
|
|
startCluster() {
|
|
# Make sure none of these nodes are already running
|
|
checkNodes
|
|
|
|
# Clean out node configuration, etc
|
|
cleanConfigInfo
|
|
|
|
# Attempt to spawn the nodes
|
|
spawnNodes
|
|
|
|
# Attempt to initialize the cluster
|
|
initCluster
|
|
}
|
|
|
|
# Shut down nodes in our cluster
|
|
stopCluster() {
|
|
for PORT in `seq $START_PORT $END_PORT`; do
|
|
verboseRun redis-cli -p $PORT SHUTDOWN NOSAVE > /dev/null 2>&1
|
|
done
|
|
}
|
|
|
|
# Make sure we have redis-server and redis-trib.rb on the path
|
|
checkExe redis-server
|
|
checkExe redis-trib.rb
|
|
|
|
# Override the host if we've got $2
|
|
if [[ ! -z "$2" ]]; then
|
|
HOST=$2
|
|
fi
|
|
|
|
# Main entry point to start or stop/kill a cluster
|
|
case "$1" in
|
|
start)
|
|
startCluster
|
|
;;
|
|
stop)
|
|
stopCluster
|
|
;;
|
|
*)
|
|
echo "Usage $0 <start|stop> [host]"
|
|
;;
|
|
esac
|