1. 环境准备
前置条件
安装 Docker 和 Docker Compose。
bash
复制代码
sudo yum install docker -y
sudo systemctl enable --now docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Redis 集群节点规划
Redis 集群需要至少 6 个节点(3 主 + 3 从)以满足高可用性(每主节点有一个从节点)。
2. 创建网络
Redis 集群节点需要运行在同一 Docker 网络中,以便它们可以相互通信。
bash
复制代码
docker network create redis-cluster
3. 编写 Redis 配置
在 Redis 集群中,每个节点需要一个专属配置文件。
配置文件模板(redis-cluster.conf)
创建一个模板 redis-cluster.conf
,内容如下:
conf
复制代码
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
requirepass <your-password>
masterauth <your-password>
cluster-announce-ip <宿主机的外部IP>
cluster-announce-port <节点暴露的端口>
cluster-announce-bus-port <节点的cluster bus端口>
cluster-enabled yes
:启用 Redis 集群模式。cluster-config-file nodes.conf
:定义节点配置文件。protected-mode no
:允许外部访问 Redis 节点。
4. 创建节点目录结构
为每个节点创建单独的目录,用于存放配置文件和数据。
bash
复制代码
mkdir -p ~/redis-cluster/{7000,7001,7002,7003,7004,7005}
复制配置文件到每个目录,并修改 port
参数为相应的端口号(7000-7005)。
bash
复制代码
for port in {7000..7005}; do
cp redis-cluster.conf ~/redis-cluster/$port/redis.conf
sed -i "s/port 6379/port $port/" ~/redis-cluster/$port/redis.conf
done
5. 启动 Redis 节点
为每个 Redis 节点启动一个 Docker 容器。
bash
复制代码
for port in {7000..7005}; do
docker run -d --name redis-$port \
--net redis-cluster \
-v ~/redis-cluster/$port/redis.conf:/usr/local/etc/redis/redis.conf \
-v ~/redis-cluster/$port/data:/data \
-p $port:$port -p 1$port:1$port \
--restart always \
redis:latest redis-server /usr/local/etc/redis/redis.conf
done
-p $port:$port
:映射 Redis 服务端口。-p 1$port:1$port
:映射集群通信端口(加1
是为了避免端口冲突,例如 17000、17001)。redis-server
:指定配置文件路径。
6. 配置 Redis 集群
启动容器后,需要初始化 Redis 集群。
进入任意容器
进入一个 Redis 容器以执行 redis-cli
命令:
bash
复制代码
docker exec -it redis-7000 redis-cli --cluster create \
172.18.0.2:7000 172.18.0.3:7001 172.18.0.4:7002 \
172.18.0.5:7003 172.18.0.6:7004 172.18.0.7:7005 \
--cluster-replicas 1 -a mypassword
--cluster-replicas 1
:为每个主节点创建一个从节点。IP 地址:使用
docker inspect
或docker network
确认容器的 IP 地址。
Redis 会提示是否继续创建集群,输入 yes
确认。
7. 测试集群
检查集群状态:
bash
复制代码
docker exec -it redis-7000 redis-cli cluster info
查看节点分布:
bash
复制代码
docker exec -it redis-7000 redis-cli cluster nodes
测试数据分片:
将数据存入集群,观察是否分布到不同节点:
bash
复制代码
docker exec -it redis-7000 redis-cli set key1 "value1"
docker exec -it redis-7000 redis-cli set key2 "value2"
8. 高级操作(可选)
备份数据:
定期备份每个节点的持久化文件(如 dump.rdb
或 appendonly.aof
):
bash
复制代码
cp ~/redis-cluster/7000/data/appendonly.aof /backup/redis-7000.aof
扩展集群:
可以动态添加更多节点到集群中:
bash
复制代码
docker exec -it redis-7000 redis-cli --cluster add-node <new_node_ip>:<port> <existing_node_ip>:<port>
评论区