|
|
@@ -0,0 +1,73 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+# USAGE: $0 [NUMBER_OF_NODES, default: 9] [DATA_DIR, default: a new temp dir]
|
|
|
+#
|
|
|
+# ports are assigned from 7000 on
|
|
|
+#
|
|
|
+# NOTE: the cluster setup requires redis 5+
|
|
|
+
|
|
|
+set -ex
|
|
|
+
|
|
|
+COUNT=${1:-9}
|
|
|
+DATA=$2
|
|
|
+
|
|
|
+if [[ -z "$DATA" ]]; then
|
|
|
+ IS_TEMP=1
|
|
|
+ TEMP=`mktemp -d`
|
|
|
+ DATA="$TEMP"
|
|
|
+fi
|
|
|
+
|
|
|
+HAS_DATA=
|
|
|
+if [[ -e "$DATA/7000/node.conf" ]]; then
|
|
|
+ HAS_DATA=1
|
|
|
+fi
|
|
|
+
|
|
|
+PIDs=""
|
|
|
+
|
|
|
+cleanup() {
|
|
|
+ # ensure that we delete the temp dir, no matter how the kill cmd exists
|
|
|
+ set +e
|
|
|
+ # invoke kill with at least one PID
|
|
|
+ echo "$PIDs" | xargs -r kill
|
|
|
+ if [[ ! -z "$IS_TEMP" ]]; then
|
|
|
+ rm -rf "$TEMP"
|
|
|
+ fi
|
|
|
+}
|
|
|
+trap cleanup exit
|
|
|
+
|
|
|
+for NUM in `seq "$COUNT"`; do
|
|
|
+ PORT=`expr 6999 + "$NUM"`
|
|
|
+ CWD="$DATA/$PORT"
|
|
|
+ mkdir -p "$CWD"
|
|
|
+ pushd "$CWD"
|
|
|
+ redis-server \
|
|
|
+ --appendonly no \
|
|
|
+ --cluster-enabled yes \
|
|
|
+ --cluster-config-file node.conf \
|
|
|
+ --port "$PORT" \
|
|
|
+ --save "" \
|
|
|
+ > /dev/null \
|
|
|
+ &
|
|
|
+ PIDs="$PIDs $!"
|
|
|
+ popd
|
|
|
+done
|
|
|
+
|
|
|
+# initial nodes
|
|
|
+if [[ -z "$HAS_DATA" ]]; then
|
|
|
+ # confirm the setup
|
|
|
+ echo yes \
|
|
|
+ | redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
|
|
|
+fi
|
|
|
+
|
|
|
+# scale up as requested
|
|
|
+for NUM in `seq 4 "$COUNT"`; do
|
|
|
+ PORT=`expr 6999 + "$NUM"`
|
|
|
+ GUARD="$DATA/$PORT/.joined"
|
|
|
+ if [[ ! -e "$GUARD" ]]; then
|
|
|
+ redis-cli --cluster add-node "127.0.0.1:$PORT" 127.0.0.1:7000 --cluster-slave
|
|
|
+ touch "$GUARD"
|
|
|
+ fi
|
|
|
+done
|
|
|
+
|
|
|
+echo "CLUSTER IS READY" >&2
|
|
|
+wait
|