DEV Community

Clavin June
Clavin June

Posted on • Originally published at clavinjune.dev on

Bash Initiate Redis Cluster Using Docker

Sunday Snippet #11 bash initiate redis cluster using docker

#!/bin/sh
set -e

# get accessible docker bridge's IP
DOCKER_BRIDGE_IP=$(docker network inspect bridge | jq ".[0].IPAM.Config[0].Gateway" -r)
PORT_PREFIX="1700"
nodes=""

# create redis configuration for each node
for i in $(seq 1 6);do
    cat <<EOF > "/tmp/$i-redis.conf"
port $PORT_PREFIX$i
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
bind 0.0.0.0
cluster-announce-ip $DOCKER_BRIDGE_IP
cluster-announce-port $PORT_PREFIX$i
EOF

    # stop and remove existing redis
    docker container stop "myredis-$i" || true
    docker container rm "myredis-$i" || true

    # start new redis node containers
    docker run -v "/tmp/$i-redis.conf":/usr/local/etc/redis/redis.conf -d \
    --net=host --name "myredis-$i" redis:alpine3.15 redis-server /usr/local/etc/redis/redis.conf

    nodes="$DOCKER_BRIDGE_IP:$PORT_PREFIX$i $nodes"
done

# create cluster from existing containers
docker container exec myredis-1 redis-cli --cluster-yes --cluster create $nodes --cluster-replicas 1

printf "\n\n=> redis nodes:"

for node in $nodes; do
    echo "$node"
done
Enter fullscreen mode Exit fullscreen mode

Discussion (0)