mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-01 17:41:42 -05:00
74 lines
1.3 KiB
Bash
74 lines
1.3 KiB
Bash
|
#!/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
|