| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/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
|