确实,只需要备份主节点的数据即可。从节点的数据会自动从主节点同步,因此不需要单独备份从节点的数据。下面是简化后的 Docker Compose 文件和 Redis 配置文件,仅对主节点进行数据持久化。
项目结构
redis_cluster/
├── docker-compose.yml
├── master/
│ └── redis.conf
└── slave/
└── redis.conf
1. 简化后的 docker-compose.yml
version: "3.0"
services:
redis-master:
image: redis:latest
container_name: redis-master
volumes:
- ./master/redis.conf:/usr/local/etc/redis/redis.conf
- masterData:/data
command:
- redis-server
- /usr/local/etc/redis/redis.conf
networks:
- redisNet
ports:
- "13001:6379"
restart: "no"
deploy:
resources:
limits:
cpus: "0.5"
memory: "400MB"
redis-slave:
image: redis:latest
container_name: redis-slave
ports:
- "13002:6379"
volumes:
- ./slave/redis.conf:/usr/local/etc/redis/redis.conf
networks:
- redisNet
restart: "no"
command: redis-server /usr/local/etc/redis/redis.conf
depends_on:
- redis-master
environment:
- REDIS_MASTER_HOST=redis-master
deploy:
resources:
limits:
cpus: "0.5"
memory: "400MB"
volumes:
masterData:
driver: local
networks:
redisNet:
driver: bridgee
2. master/redis.conf
bind 0.0.0.0
port 6379
requirepass yourpassword
dir /data
dbfilename dump.rdb
appendonly yes
maxmemory 400mb
maxmemory-policy allkeys-lru
- bind 0.0.0.0:这意味着 Redis 将接受来自任何网络接口的连接,这对开发和测试环境很有用,但在生产环境中应谨慎使用,并配合防火墙或其他安全措施使用。
- port 6379:默认端口号 6379 是 Redis 服务器的标准监听端口。如果需要运行多个 Redis 实例,可能需要更改此端口号。
- requirepass yourpassword:设置访问控制密码。所有客户端连接 Redis 时需要提供这个密码,确保 Redis 服务器的安全性。
- dir /data:Redis 将其数据文件保存到这个目录。确保这个目录有足够的空间,并且对 Redis 进程具有写权限。
- dbfilename dump.rdb:RDB 文件名,存储 Redis 数据库的快照。在某些情况下,重启 Redis 可以从这个快照文件恢复数据。
- appendonly yes:启用 AOF 持久化,每次写操作都会被记录到 AOF 文件中,确保更高的持久化可靠性。
- maxmemory 400mb:限制 Redis 的内存使用量,防止 Redis 消耗过多内存,影响系统的其他进程。
- maxmemory-policy allkeys-lru:当内存达到限制时,Redis 将根据 LRU 算法删除最近最少使用的键。其他可选策略包括
volatile-lru、volatile-random、allkeys-random等。
3. slave/redis.conf
bind 0.0.0.0
port 6379
requirepass yourpassword
masterauth yourpassword
slaveof redis-master 6379
步骤
- 创建项目目录结构:
在项目根目录下创建上述目录结构和文件。 - 启动服务:
在项目根目录下运行以下命令:
docker-compose up -d
- 验证 Redis 主从设置:
-
- 连接到 Redis 主节点:
docker exec -it redis-master redis-cli -a yourpassword
然后在 Redis CLI 中运行以下命令:
INFO replication
你应该会看到类似以下输出:
# Replication
role:master
connected_slaves:1
slave0:ip=<slave_ip>,port=6379,state=online,offset=0,lag=1
-
- 连接到 Redis 从节点:
docker exec -it redis-slave redis-cli -a yourpassword
然后在 Redis CLI 中运行以下命令:
INFO replication
你应该会看到类似以下输出:
# Replication
role:slave
master_host:redis-master
master_port:6379
解释
- 持久化:只对主节点的数据进行持久化,将主节点的数据目录映射到本地目录。
- 资源限制:对主从节点都设置 CPU 和内存的使用限制。
- 密码设置:通过
requirepass和masterauth设置 Redis 密码,确保安全性。 - Redis 配置:在主节点的
redis.conf中设置持久化、最大内存限制和内存策略。从节点的redis.conf设置从属关系和认证信息。
通过这个示例项目,你可以学习如何使用 Docker Compose 来设置和管理具有数据持久化、资源限制和密码保护的 Redis 主从架构,仅对主节点进行数据持久化。