目錄結構
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"