第一种方式
- 创建
redis
目录 - 在
redis
目录下分别创建docker-compose.yml
和setup-redis-cluster.sh
文件 - 给
setup-redis-cluster.sh
授权,然后执行脚本即可
chmod -x ./setup-redis-cluster.sh
./setup-redis-cluster.sh 10.242.82.32
- 10.242.82.32:本机IP
docker-compose.yml
version: "2"
services:
redis-cluster-node-0:
image: docker.io/bitnami/redis-cluster:6.2
ports:
- 9001:9001
- 19001:19001
restart: always
environment:
- 'REDIS_CLUSTER_ANNOUNCE_IP=${HOST_IP}'
- 'REDIS_PORT_NUMBER=9001'
- 'REDIS_CLUSTER_DYNAMIC_IPS=no'
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'REDIS_NODES=${HOST_IP}:9001 ${HOST_IP}:9002 ${HOST_IP}:9003 ${HOST_IP}:9004 ${HOST_IP}:9005 ${HOST_IP}:9000'
redis-cluster-node-1:
image: docker.io/bitnami/redis-cluster:6.2
ports:
- 9002:9002
- 19002:19002
restart: always
environment:
- 'REDIS_CLUSTER_ANNOUNCE_IP=${HOST_IP}'
- 'REDIS_PORT_NUMBER=9002'
- 'REDIS_CLUSTER_DYNAMIC_IPS=no'
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'REDIS_NODES=${HOST_IP}:9001 ${HOST_IP}:9002 ${HOST_IP}:9003 ${HOST_IP}:9004 ${HOST_IP}:9005 ${HOST_IP}:9000'
redis-cluster-node-2:
image: docker.io/bitnami/redis-cluster:6.2
ports:
- 9003:9003
- 19003:19003
restart: always
environment:
- 'REDIS_CLUSTER_ANNOUNCE_IP=${HOST_IP}'
- 'REDIS_PORT_NUMBER=9003'
- 'REDIS_CLUSTER_DYNAMIC_IPS=no'
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'REDIS_NODES=${HOST_IP}:9001 ${HOST_IP}:9002 ${HOST_IP}:9003 ${HOST_IP}:9004 ${HOST_IP}:9005 ${HOST_IP}:9000'
redis-cluster-node-3:
image: docker.io/bitnami/redis-cluster:6.2
ports:
- 9004:9004
- 19004:19004
restart: always
environment:
- 'REDIS_CLUSTER_ANNOUNCE_IP=${HOST_IP}'
- 'REDIS_PORT_NUMBER=9004'
- 'REDIS_CLUSTER_DYNAMIC_IPS=no'
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'REDIS_NODES=${HOST_IP}:9001 ${HOST_IP}:9002 ${HOST_IP}:9003 ${HOST_IP}:9004 ${HOST_IP}:9005 ${HOST_IP}:9000'
redis-cluster-node-4:
image: docker.io/bitnami/redis-cluster:6.2
ports:
- 9005:9005
- 19005:19005
restart: always
environment:
- 'REDIS_CLUSTER_ANNOUNCE_IP=${HOST_IP}'
- 'REDIS_PORT_NUMBER=9005'
- 'REDIS_CLUSTER_DYNAMIC_IPS=no'
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'REDIS_NODES=${HOST_IP}:9001 ${HOST_IP}:9002 ${HOST_IP}:9003 ${HOST_IP}:9004 ${HOST_IP}:9005 ${HOST_IP}:9000'
redis-cluster-node-5:
image: docker.io/bitnami/redis-cluster:6.2
ports:
- 9000:9000
- 19000:19000
restart: always
depends_on:
- redis-cluster-node-0
- redis-cluster-node-1
- redis-cluster-node-2
- redis-cluster-node-3
- redis-cluster-node-4
environment:
- 'REDIS_CLUSTER_ANNOUNCE_IP=${HOST_IP}'
- 'REDIS_PORT_NUMBER=9000'
- 'REDIS_CLUSTER_DYNAMIC_IPS=no'
- 'ALLOW_EMPTY_PASSWORD=yes'
- 'REDIS_CLUSTER_REPLICAS=1'
- 'REDIS_CLUSTER_CREATOR=yes'
- 'REDIS_NODES=${HOST_IP}:9001 ${HOST_IP}:9002 ${HOST_IP}:9003 ${HOST_IP}:9004 ${HOST_IP}:9005 ${HOST_IP}:9000'
setup-redis-cluster.sh
#!/bin/bash
# 待删除的容器名称列表
CONTAINER_NAMES=(
"redis-redis-cluster-node-0-1"
"redis-redis-cluster-node-1-1"
"redis-redis-cluster-node-2-1"
"redis-redis-cluster-node-3-1"
"redis-redis-cluster-node-4-1"
"redis-redis-cluster-node-5-1"
)
# 检查是否传入了 HOST_IP 参数
if [ -z "$1" ]; then
echo "Usage: $0 HOST_IP"
exit 1
fi
HOST_IP="$1"
# 遍历容器名称列表
for CONTAINER_NAME in "${CONTAINER_NAMES[@]}"; do
# 检查容器是否在运行中
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
# 停止容器
docker stop ${CONTAINER_NAME}
echo "已停止容器 ${CONTAINER_NAME}"
fi
# 检查容器是否存在
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
# 删除容器
docker rm ${CONTAINER_NAME}
echo "已删除容器 ${CONTAINER_NAME}"
else
echo "容器 ${CONTAINER_NAME} 不存在,无需删除."
fi
done
# 启动容器
HOST_IP=${HOST_IP} docker-compose up -d
echo "Redis 集群创建成功."
验证集群
redis-cli -h 192.168.103.50 -p 9001
第二种方式
为了体验Redis集群,并且为了便于部署所以直接使用docker部署了一个简单集群:
docker run -e "IP=0.0.0.0" -p 9000-9005:7000-7005 -d --name redis-cluster grokzen/redis-cluster:6.2.14 redis-server --protected-mode no
连接测试
redis-cli -c -p 9000
通过set 命令测试集群:
127.0.0.1:7000> set a 1
-> Redirected to slot [15495] located at 127.0.0.1:7002
OK