Spiga

Redis集群部署文档

2022-03-25 15:08:57

概述

本指南将引导你完成以下步骤:

  1. 创建项目文件夹和必要的配置文件。
  2. 编写 docker-compose.yml 文件来定义一主两从三个 Redis 服务。
  3. 启动并验证 Redis 集群。
  4. 测试主从数据同步。

第一步:创建项目目录和文件

首先,在你电脑的任意位置(例如 D:\ 盘)创建一个新的文件夹,用来存放本次项目的所有文件。我们将其命名为 redis-cluster

进入 redis-cluster 文件夹,在内部创建以下两个文件:

  1. docker-compose.yml (用于编排 Docker 容器)
  2. redis.conf (Redis 实例的配置文件)

创建完成后,你的文件夹结构应该如下所示:

redis-cluster/
├── docker-compose.yml
└── redis.conf

第二步:编写 docker-compose.yml 文件

用文本编辑器打开 docker-compose.yml 文件,并将以下内容复制进去。

version: '3.8'

services:
  # 主节点服务
  redis-master:
    image: redis
    container_name: redis-master
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf # 挂载配置文件
    command: redis-server /usr/local/etc/redis/redis.conf # 使用该配置启动
    networks:
      - redis-net

  # 第一个从节点服务
  redis-slave1:
    image: redis
    container_name: redis-slave1
    restart: always
    ports:
      - "6380:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf --slaveof redis-master 6379 # 关键:声明主节点
    depends_on:
      - redis-master # 依赖主节点,保证启动顺序
    networks:
      - redis-net

  # 第二个从节点服务
  redis-slave2:
    image: redis
    container_name: redis-slave2
    restart: always
    ports:
      - "6381:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf --slaveof redis-master 6379
    depends_on:
      - redis-master
    networks:
      - redis-net

# 定义网络
networks:
  redis-net:
    driver: bridge

文件说明:

  • services: 定义了三个服务:redis-master, redis-slave1, 和 redis-slave2
  • image: 我们使用了 redis 镜像,它是一个轻量且稳定的版本。
  • ports: 将容器的 6379 端口映射到宿主机(你的 Windows 电脑)的不同端口上,6379 给主节点,63806381 给从节点,这样可以避免端口冲突。
  • command: 这是最关键的部分。
    • 在两个从节点中,--slaveof redis-master 6379 命令告诉从节点去复制名为 redis-master 的容器的数据。
  • networks: 我们创建了一个名为 redis-net 的自定义桥接网络。这使得容器之间可以通过容器名(如 redis-master)直接通信,这是 slaveof 命令能正常工作的关键。

第三步:编写 redis.conf 配置文件

接下来,用文本编辑器打开 redis.conf 文件,并将以下内容复制进去。这个配置文件将被所有三个 Redis 实例共享。

# ---- 网络设置 ----
# 允许来自任何 IP 的连接。Docker 环境下必须设置为 0.0.0.0
bind 0.0.0.0

# ---- 安全设置 ----
# 设置连接密码,请将 "123456" 替换为你自己的强密码
requirepass 123456

# 设置主节点认证密码。当从节点连接主节点时,需要使用此密码
masterauth 123456

# ---- 持久化 ----
# 开启 AOF (Append Only File) 持久化,数据更安全
appendonly yes

重要提示

  • 请务必将 123456 替换为你自己的密码。
  • requirepass 是客户端连接 Redis 时需要输入的密码。
  • masterauth 是从节点连接主节点时用于身份验证的密码。在这里,它们必须与 requirepass 相同。

第四步:启动并验证集群

现在所有文件都已准备就绪。

  1. 启动集群:

    打开一个终端(推荐使用 Windows Terminal 或者 PowerShell),使用 cd 命令进入到你之前创建的 redis-cluster 文件夹。然后运行以下命令:

    docker-compose up -d
    
    • -d 参数表示在后台(detached mode)运行容器。
    • 你会看到 Docker 开始拉取 Redis 镜像并创建和启动三个容器。
  2. 查看容器状态:

    运行以下命令,确保三个容器都处于 Up 状态。

    docker ps
    

    你应该能看到 redis-master, redis-slave1, 和 redis-slave2 三个正在运行的容器。

  3. 验证主节点:

    连接到主节点的容器内部,并使用 redis-cli 工具查看其复制信息。

    docker exec -it redis-master redis-cli -a 123456
    
    • docker exec -it redis-master 表示进入 redis-master 容器。
    • redis-cli -a 123456 是 Redis 的命令行客户端,-a 参数用于提供密码。
    • 请记得替换为你自己的密码。

    成功连接后,在 Redis 命令行中输入:

    INFO replication
    

    你会看到 role:masterconnected_slaves:2 的信息,表示它是一个主节点,并且有两个从节点已连接。

  4. 验证从节点:

    新开一个终端,或退出上一个 (exit)。我们连接到其中一个从节点(例如 redis-slave1)进行验证:

    docker exec -it redis-slave1 redis-cli -a 123456
    

    同样,在 Redis 命令行中输入:

    INFO replication
    

    这次你会看到 role:slave,以及 master_host:redis-mastermaster_port:6379 的信息,表明它已成功地成为了 redis-master 的从节点。

第五步:测试主从数据同步

  1. 主节点 (redis-master) 的终端中,写入一条数据:

    SET my_test_key "Hello Redis Cluster!"
    
  2. 从节点 (redis-slave1redis-slave2) 的终端中,尝试读取这条数据:

    GET my_test_key
    

    如果能够成功返回 "Hello Redis Cluster!",则证明主从复制已经正常工作。

  3. 注意:默认配置下,从节点是只读的。如果你尝试在从节点上写入数据,将会收到一个错误:

    (error) READONLY You can't write against a read only replica.
    

    这符合主从集群的预期行为。

如何停止和清理

当你不再需要这个集群时,可以在 redis-cluster 文件夹下,运行以下命令来停止并删除所有相关的容器、网络和数据卷:

docker-compose down

至此,你已经成功地在 Windows 11 上部署并测试了一个完整的 Redis 主从集群。