# redis_master_slave **Repository Path**: chuxin/redis_master_slave ## Basic Information - **Project Name**: redis_master_slave - **Description**: redis主从复制, docker-compose.yml部署 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-12 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Redis 高可用集群部署文档 本项目使用 Docker Compose 部署了一个包含主从复制和哨兵的 Redis 高可用集群。 ## 项目结构 ``` redis-ha/ ├── docker-compose.yml # Docker Compose 配置文件 ├── redis-master.conf # Redis 主节点配置 ├── redis-slave.conf # Redis 从节点配置 ├── sentinel.conf # Redis Sentinel 配置 ├── start.sh # 启动脚本 ├── data/ # 数据目录 │ ├── master/ # 主节点数据 │ ├── sentinel/ # 哨兵数据 │ └── slave/ # 从节点数据 └── sentinel/ # Sentinel Docker 构建目录 ├── Dockerfile └── sentinel.conf ``` ## 端口映射 - Redis 主节点: 6380 (容器内部 6379) - Redis 从节点: 6381 (容器内部 6379) - Redis Sentinel: 26379 ## 基本操作命令 ### 1. 启动集群 ```bash # 使用启动脚本 ./start.sh # 或者直接使用 docker compose docker compose up -d ``` ### 2. 检查集群状态 ```bash # 查看容器状态 docker ps # 检查主节点复制状态 docker exec -it redis-master redis-cli -a 123456 info replication # 检查从节点复制状态 docker exec -it redis-slave redis-cli -a 123456 info replication # 检查哨兵状态 docker exec -it redis-sentinel redis-cli -p 26379 info Sentinel ``` ### 3. 数据读写测试 ```bash # 在主节点写入数据 docker exec -it redis-master redis-cli -a 123456 > set test "hello" > get test # 在从节点读取数据 docker exec -it redis-slave redis-cli -a 123456 > get test ``` ### 4. 故障转移测试 ```bash # 模拟主节点故障 docker stop redis-master # 查看哨兵日志 docker logs -f redis-sentinel ``` #### 故障转移过程说明 当主节点发生故障时,哨兵会经历以下过程: 1. 主节点故障检测 ``` # 无法解析主节点主机名 Failed to resolve hostname 'redis-master' # 主观下线(Subjectively Down) +sdown master mymaster redis-master 6379 # 客观下线(Objectively Down)- 因为只有一个哨兵,所以立即触发 +odown master mymaster redis-master 6379 #quorum 1/1 ``` 2. 选举过程 ``` # 创建新的纪元(epoch) +new-epoch 1 # 尝试故障转移 +try-failover master mymaster redis-master 6379 # 投票选举leader +vote-for-leader 33e216d5f8058491bba67b9ece6424644547949b 1 # 选举完成 +elected-leader master mymaster redis-master 6379 ``` 3. 故障转移执行 ``` # 选择合适的从节点作为新主节点 +selected-slave slave 192.168.16.3:6379 192.168.16.3 6379 # 将选中的从节点升级为主节点 +promoted-slave slave 192.168.16.3:6379 192.168.16.3 6379 # 故障转移完成,切换主节点 +switch-master mymaster redis-master 6379 192.168.16.3 6379 ``` 要恢复原始主节点: ```bash # 启动原主节点 docker start redis-master # 等待几秒钟确保服务启动 sleep 5 # 确认容器状态 docker ps | grep redis-master # 检查原主节点现在的角色(应该变成从节点) docker exec -it redis-master redis-cli -a 123456 -h redis-master info replication # 检查当前主节点(原从节点)状态 docker exec -it redis-slave redis-cli -a 123456 -h redis-slave info replication ``` 注意:故障转移后,原主节点恢复时会自动变为从节点。如果要恢复原有的主从关系,需要手动执行故障转移。 ### 5. 关闭集群 ```bash docker compose down ``` ## 配置说明 ### 密码认证 - 主节点密码: 123456 - 从节点密码: 123456 - 主从复制认证密码: 123456 ### 持久化配置 所有节点都启用了 RDB 和 AOF 持久化: - RDB 持久化策略: ``` save 900 1 save 300 10 save 60 10000 ``` - AOF 持久化策略: ``` appendonly yes appendfilename "appendonly.aof" appendfsync everysec ``` ### 哨兵配置 - 仲裁数(quorum): 1 - 故障转移超时: 60000ms - 并行同步数: 1 ## 注意事项 1. 确保相关端口(6380, 6381, 26379)未被占用 2. 数据目录需要适当的权限 3. 生产环境建议使用更复杂的密码 4. 生产环境建议增加哨兵节点数量(至少3个) ## 常见问题处理 1. 如果遇到权限问题,检查数据目录权限: ```bash sudo chown -R 1001:1001 data/ ``` 2. 如果需要清理数据重新开始: ```bash rm -rf data/* docker compose down docker compose up -d ```