Redis集群部署文档
2022-03-25 15:08:57概述
本指南将引导你完成以下步骤:
- 创建项目文件夹和必要的配置文件。
- 编写
docker-compose.yml
文件来定义一主两从三个 Redis 服务。 - 启动并验证 Redis 集群。
- 测试主从数据同步。
第一步:创建项目目录和文件
首先,在你电脑的任意位置(例如 D:\
盘)创建一个新的文件夹,用来存放本次项目的所有文件。我们将其命名为 redis-cluster
。
进入 redis-cluster
文件夹,在内部创建以下两个文件:
docker-compose.yml
(用于编排 Docker 容器)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
给主节点,6380
和6381
给从节点,这样可以避免端口冲突。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
相同。
第四步:启动并验证集群
现在所有文件都已准备就绪。
-
启动集群:
打开一个终端(推荐使用 Windows Terminal 或者 PowerShell),使用 cd 命令进入到你之前创建的 redis-cluster 文件夹。然后运行以下命令:
docker-compose up -d
-d
参数表示在后台(detached mode)运行容器。- 你会看到 Docker 开始拉取 Redis 镜像并创建和启动三个容器。
-
查看容器状态:
运行以下命令,确保三个容器都处于 Up 状态。
docker ps
你应该能看到
redis-master
,redis-slave1
, 和redis-slave2
三个正在运行的容器。 -
验证主节点:
连接到主节点的容器内部,并使用 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:master
和connected_slaves:2
的信息,表示它是一个主节点,并且有两个从节点已连接。 -
验证从节点:
新开一个终端,或退出上一个 (exit)。我们连接到其中一个从节点(例如 redis-slave1)进行验证:
docker exec -it redis-slave1 redis-cli -a 123456
同样,在 Redis 命令行中输入:
INFO replication
这次你会看到
role:slave
,以及master_host:redis-master
和master_port:6379
的信息,表明它已成功地成为了redis-master
的从节点。
第五步:测试主从数据同步
-
在 主节点 (
redis-master
) 的终端中,写入一条数据:SET my_test_key "Hello Redis Cluster!"
-
在 从节点 (
redis-slave1
或redis-slave2
) 的终端中,尝试读取这条数据:GET my_test_key
如果能够成功返回
"Hello Redis Cluster!"
,则证明主从复制已经正常工作。 -
注意:默认配置下,从节点是只读的。如果你尝试在从节点上写入数据,将会收到一个错误:
(error) READONLY You can't write against a read only replica.
这符合主从集群的预期行为。
如何停止和清理
当你不再需要这个集群时,可以在 redis-cluster
文件夹下,运行以下命令来停止并删除所有相关的容器、网络和数据卷:
docker-compose down
至此,你已经成功地在 Windows 11 上部署并测试了一个完整的 Redis 主从集群。