目录结构
redis-cluster/
├── config/
│ ├── master.conf
│ ├── slave1.conf
│ └── slave2.conf
└── docker-compose.yml
配置文件内容
1. config/master.conf
# Redis主节点配置
port 6379
bind 0.0.0.0
protected-mode no
logfile "redis-master.log"
dir /data
save 900 1
save 300 10
save 60 10000
2. config/slave1.conf
# Redis从节点1配置
port 6380
bind 0.0.0.0
protected-mode no
logfile "redis-slave1.log"
dir /data
slaveof redis-master 6379
3. config/slave2.conf
# Redis从节点2配置
port 6381
bind 0.0.0.0
protected-mode no
logfile "redis-slave2.log"
dir /data
slaveof redis-master 6379
docker-compose.yml
version: '3.8'services:# Redis主节点redis-master:image: redis:7.0container_name: redis-masterports:- "6379:6379"volumes:- ./config/master.conf:/usr/local/etc/redis/redis.conf- redis-data-master:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]healthcheck:test: ["CMD", "redis-cli", "ping"]interval: 5stimeout: 5sretries: 5networks:- redis-network# Redis从节点1redis-slave1:image: redis:7.0container_name: redis-slave1ports:- "6380:6380"volumes:- ./config/slave1.conf:/usr/local/etc/redis/redis.conf- redis-data-slave1:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]healthcheck:test: ["CMD", "redis-cli", "-p", "6380", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-masternetworks:- redis-network# Redis从节点2redis-slave2:image: redis:7.0container_name: redis-slave2ports:- "6381:6381"volumes:- ./config/slave2.conf:/usr/local/etc/redis/redis.conf- redis-data-slave2:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]healthcheck:test: ["CMD", "redis-cli", "-p", "6381", "ping"]interval: 5stimeout: 5sretries: 5depends_on:- redis-masternetworks:- redis-networkvolumes:redis-data-master:redis-data-slave1:redis-data-slave2:networks:redis-network:driver: bridge
部署步骤
-
创建目录结构并添加上述配置文件
-
设置正确的文件权限(避免之前的权限问题)
chmod -R 644 config/
- 启动容器
docker-compose up -d
- 验证部署
# 检查容器状态
docker-compose ps# 连接到主节点查看信息
docker exec -it redis-master redis-cli info replication# 连接到从节点1查看信息
docker exec -it redis-slave1 redis-cli -p 6380 info replication# 连接到从节点2查看信息
docker exec -it redis-slave2 redis-cli -p 6381 info replication
测试主从复制
- 在主节点设置一个键值
docker exec -it redis-master redis-cli
127.0.0.1:6379> SET mykey "Hello from master"
OK
- 在从节点读取该键值
# 从节点1
docker exec -it redis-slave1 redis-cli -p 6380
127.0.0.1:6380> GET mykey
"Hello from master"# 从节点2
docker exec -it redis-slave2 redis-cli -p 6381
127.0.0.1:6381> GET mykey
"Hello from master"