redis主要有4种运行模式,分别为单机模式(standalone)、主从复制模式(replication)、哨兵模式(sentinel)、集群模式(cluster)。默认使用单机模式
一、单机模式(standalone)
1.1 简述
作为redis的默认运行模式,所有数据的读写、存储都在一个实例中,不支持故障转移(failover),适合小项目应用部署。
二、主从复制模式(replication)
2.1 简述
主从复制模式,支持一主节点(master),多从节点(slave)。读写分离,master节点负责数据写入,slave负责数据读取,slave通过异步复制方式进行同步master数据,slave节点一般不能进行数据写入
2.2 docker-compose配置
下面示例,使用docker-compose启动,一主两从
1 | services: |
2.3 状态查看
使用下面命令查看redis-replica1从节点replication状态
1 | docker exec -it redis-replica1 redis-cli info replication |
同步延迟判断:master_repl_offset与slave_repl_offset对比可判断是否完全同步

2.4 参考链接
三、哨兵模式(sentinel)
3.1 简述
sentinel分布式系统,在replication模式的基础上,提高了高可用性(HA),sentinel提供了自动故障转移(failover)、监控等功能。也就是在主从复制的架构下,增加了sentinel节点,专门监控主节点的健康状态,当多个sentinel节点认为当前主节点异常时,将选择从节点offset量最多的从节点作为新的主节点。
sentinel节点采用vote机制,多数节点检测到主节点异常时,才会执行自动故障转移。所以sentinel节点的数量推荐为奇数
运行sentinel必须使用配置文件的形式,sentinel默认监听26379端口
3.2 sentinel配置
1 | # 设置执行故障转移的vote数量为至少2台sentinel |
3.3 docker-compose配置
1 | services: |
3.4 注意点
在docker环境运行sentinel会有几个容易踩坑的点
- 如果节点设置了requirepass认证,sentinel也要设置连接
- 如果你monitor redis-master, sentinel无法自动解析这个host, 要设置sentinel resolve-hostnames yes,否则sentinel启动失败。或者手动指定master节点ip
- docker挂载配置,挂载目录映射,不然当你直接使用挂载文件启动时,会出现无操作权限。
- 节点redis-sentinel和slave节点在覆写启动配置文件,所以最好在command 启动命令cp一份挂载配置文件作为启动配置
3.5 sentinel节点正常启动输出信息
只有正确配置发现slave和sentinel节点,failover机制才会正常运转。
1 | ... |
3.6 主从切换输出信息
1 | ... |
3.7 参考链接
四、集群模式(cluster)
上面介绍的主从复制模式(replication)和哨兵模式(sentinel)都是单一主节点,而接下来要介绍的集群模式(cluster),是采用数据分片的模式,将所有数据根据键名计算hash,分布到16384个哈希槽(hash slot)中。
cluster模式每个集群节点都会监听两个端口,一个是6379端口,一个是16379端口。每个集群节点都拥有主从节点,可以有多个从节点。
4.1 哈希槽(hash slot)
- redis cluster一共有16384个哈希槽,从0开始到16383。
- 哈希槽计算,通过键名进行CRC16算法,计算后取模16384,得到分布槽位
- 假设有3个主节点,那么每个节点将分配到5641个哈希槽
4.2 cluster节点配置
nodes.conf不需要我们设置,由集群实例启动时生成和更新。
1 | port 6379 |
4.3 docker-compose配置
172.28.0.1是docker网关地址,redis-node从172.28.0.2开始
1 | services: |
4.4 启动redis-cluster
–cluster-replicas参数代表每个主节点有多少个从节点
1 | redis-cli --cluster create \ |

4.5 查看节点分布
1 | redis-cli -c -p 7001 cluster nodes |

4.6 参考链接
- 本文作者: 暮秋人
- 本文链接: https://muqiuren.pages.dev/2024/08/redis-server-mode/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!