插件窝 干货文章 Docker搭建redis集群的实现

Docker搭建redis集群的实现

Redis 集群 cluster 节点 604    来源:    2025-04-01

Docker搭建Redis集群的实现方案

Redis集群是Redis提供的分布式数据库解决方案,通过Docker可以方便地部署和管理Redis集群。以下是使用Docker搭建Redis集群的详细步骤。

方案概述

我们将使用Docker创建6个Redis节点(3主3从),配置它们组成一个Redis集群。

准备工作

  1. 确保已安装Docker和Docker Compose
  2. 确保服务器端口6379(Redis默认端口)和16379(集群总线端口)开放

方法一:使用Docker Compose快速搭建

1. 创建docker-compose.yml文件

version: '3'

services:
  redis-cluster:
    image: redis:latest
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    ports:
      - "6379-6384:6379"
      - "16379-16384:16379"
    environment:
      - "IP=0.0.0.0"
    volumes:
      - redis-data:/data
    deploy:
      replicas: 6

volumes:
  redis-data:

2. 启动容器

docker-compose up -d

3. 创建集群

docker-compose exec redis-cluster redis-cli --cluster create \
  172.20.0.2:6379 \
  172.20.0.3:6379 \
  172.20.0.4:6379 \
  172.20.0.5:6379 \
  172.20.0.6:6379 \
  172.20.0.7:6379 \
  --cluster-replicas 1

方法二:手动搭建(更灵活)

1. 创建自定义网络

docker network create redis-cluster-net

2. 启动6个Redis节点

for port in `seq 6379 6384`; do \
  docker run -d --name "redis-${port}" \
  --net redis-cluster-net \
  -p ${port}:6379 \
  -p $((port+10000)):16379 \
  redis:latest \
  redis-server --cluster-enabled yes \
  --cluster-config-file nodes.conf \
  --cluster-node-timeout 5000 \
  --appendonly yes \
  --bind 0.0.0.0; \
done

3. 获取容器IP地址

for port in `seq 6379 6384`; do \
  echo -n "redis-${port}: " && \
  docker inspect -f '{{ (index .NetworkSettings.Networks "redis-cluster-net").IPAddress }}' "redis-${port}"; \
done

4. 创建集群

使用上一步获取的IP地址替换下面的示例IP:

docker exec -it redis-6379 redis-cli --cluster create \
  172.18.0.2:6379 \
  172.18.0.3:6379 \
  172.18.0.4:6379 \
  172.18.0.5:6379 \
  172.18.0.6:6379 \
  172.18.0.7:6379 \
  --cluster-replicas 1

验证集群

1. 检查集群状态

docker exec -it redis-6379 redis-cli cluster nodes

2. 测试集群

docker exec -it redis-6379 redis-cli -c
> set foo bar
> get foo

管理集群

添加新节点

# 添加新主节点
redis-cli --cluster add-node new_node_ip:port existing_node_ip:port

# 添加新从节点
redis-cli --cluster add-node new_node_ip:port existing_node_ip:port --cluster-slave --cluster-master-id <master-id>

重新分片

redis-cli --cluster reshard existing_node_ip:port

注意事项

  1. 生产环境应考虑数据持久化和备份策略
  2. 集群节点数量建议至少6个(3主3从)以确保高可用
  3. 网络配置要确保所有节点间可以互相通信
  4. 考虑使用监控工具如RedisInsight监控集群状态

常见问题解决

问题1:创建集群时报错"Not all 16384 slots are covered by nodes."

解决:确保所有节点都已正确启动,并且网络配置允许节点间通信。

问题2:节点无法加入集群

解决:检查防火墙设置,确保集群总线端口(16379-16384)开放。

问题3:数据不一致

解决:检查集群状态,可能需要手动修复或重新同步从节点。

通过以上步骤,您应该能够成功使用Docker搭建一个Redis集群。根据实际需求调整节点数量和配置参数。