Docker 部署 Redis 集群防止数据丢失,核心是将容器内的 `/data` 目录挂载到宿主机的持久化卷,并开启 AOF 持久化模式。适用场景为生产环境 Docker 容器化部署,风险边界在于文件权限配置错误可能导致容器启动失败。
先说结论:必须通过卷挂载持久化 `/data` 目录,并配置 AOF 落盘策略。
- 适合:生产环境 Docker 容器化 Redis 集群部署。
- 先准备:宿主机挂载目录、redis.conf 配置文件、开启 appendonly 选项。
- 验收:重启容器后数据文件仍存在,redis-cli 查询 key 无误。
命令速用版
以下 Docker Compose 片段展示了挂载卷和开启 AOF 的核心配置:
version: '3.8'
services:
redis-node-1:
image: redis:7
command: redis-server `--appendonly` yes `--cluster-enabled` yes
volumes:
- ./data/node-1:/data
ports:
- "6379:6379"为什么会这样
容器重启后数据丢失是因为数据写在容器层,容器销毁后层数据随之消失。Redis 默认将数据存储在容器内的 `/data` 目录,该目录位于容器 writable layer,未挂载卷时不具备持久性。
分步处理
第一步,准备宿主机目录。在宿主机创建用于存储数据的文件夹,例如 mkdir -p ./redis-cluster/node-1/data。
第二步,配置持久化参数。在 redis.conf 中设置 appendonly yes,或在启动命令中追加 `--appendonly` yes 参数。
第三步,启动容器并挂载卷。使用 docker run -v 或 Docker Compose volumes 字段,将宿主机目录映射到容器内的 /data 路径。
第四步,初始化集群。使用 redis-cli `--cluster` create 命令建立集群关系,确保节点配置文件 cluster-config-file 也落在挂载目录内。
怎么验证是否生效
检查宿主机挂载目录内是否生成 appendonly.aof 或 dump.rdb 文件。执行 docker exec -it <container_id> redis-cli info persistence 查看持久化状态。
常见坑
权限问题:容器内 redis 用户 UID 通常为 1000,宿主机目录所有者需匹配,否则无法写入文件。
配置文件路径:cluster-config-file 默认名为 nodes.conf,需确保该文件也位于挂载卷内,否则重启后集群拓扑丢失。
常见问题
只挂载 /data 够吗?
够用,Redis 核心数据文件默认都在 /data 下。
AOF 和 RDB 选哪个?
生产环境建议同时开启,AOF 数据更安全,RDB 恢复更快。
重启后集群状态丢失怎么办?
检查 nodes.conf 文件是否持久化,该文件记录集群节点关系。
参考来源
Redis 官方文档:Persistence https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/
Docker Hub:Redis Image https://hub.docker.com/_/redis