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 inspectdocker 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.rdbappendonly.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>