集群
2024年06月16日
一、认识
Redis
三主三从方式, 为了同步备份, 主节点进行 slot
数据分片
二、操作
2.1 创建脚本
编辑运行多个 Redis
容器脚本文件
vim redis-cluster.sh
redis-cluster.sh
脚本如下
#!/usr/bin/env bash
# 使用 BASE_DIR 变量统一管理路径,便于维护
BASE_DIR=~/docker/redis-cluster
# 使用 ANNOUNCE_IP 变量统一管理 IP 地址,便于维护
# 注意: cluster-announce-ip 不能是127.0.0.1, 会被容器认为是自己, 而不是宿主, 需要写死宿主 IP, Mac 查看宿主 IP 方法 ifconfig | grep "inet " | grep -v 127.0.0.1
ANNOUNCE_IP=192.168.0.101
# 使用绝对路径来确保路径解析正确
BASE_DIR=$(cd ~ && mkdir -p docker/redis-cluster && cd docker/redis-cluster && pwd)
for port in $(seq 8001 8006); do
NODE_DIR=${BASE_DIR}/node-${port}
CONF_DIR=${NODE_DIR}/conf
CONF_FILE=${CONF_DIR}/redis.conf
DATA_DIR=${NODE_DIR}/data
mkdir -p "${CONF_DIR}" "${DATA_DIR}"
# 使用单引号和双引号混合,确保变量正确展开
cat <<EOF >"${CONF_FILE}"
port ${port}
bind 0.0.0.0
daemonize no
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip ${ANNOUNCE_IP}
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
EOF
# 使用绝对路径,以确保 Docker 能正确解析路径
docker run -d --name redis-${port} \
-p ${port}:${port} -p 1${port}:1${port} \
-v "${DATA_DIR}:/data" \
-v "${CONF_FILE}:/etc/redis/redis.conf" \
redis:latest redis-server /etc/redis/redis.conf
done
2.2 执行脚本
sh redis-cluster.sh
2.3 访问第一个容器
访问第一个 Redis
服务 redis-8001
, 通过以下命令来访问:
docker exec -it redis-8001 bash // 进入 redis-8001 容器
2.4 创建集群节点
执行以下命令:
redis-cli --cluster create 192.168.0.101:8001 192.168.0.101:8002 192.168.0.101:8003 192.168.0.101:8004 192.168.0.101:8005 192.168.0.101:8006 --cluster-replicas 1
紧接着,会提示是否接受
yes // 输入 yes 并回车
2.5 查看集群信息
ls // 列出容器文件
cat nodes.conf // 查看 nodes.conf
输出的信息就是 三主三从 的结构 、
2.6 进入 Redis 服务
redis-cli -c -h 192.168.0.101 -p 8001 // 连接 Redis 服务
set a 1 // 测试存储数据
get a // 测试访问数据