列表

详情


109. 如何实现Redis高可用

回答思路

得分点 哨兵模式、集群模式 标准回答 主要有哨兵和集群两种方式可以实现Redis高可用。 哨兵: 哨兵模式是Redis的高可用的解决方案,它由一个或多个Sentinel实例组成Sentinel系统,可以监视任意多个主服务器以及这些主服务器属下的所有从服务器。当哨兵节点发现有节点不可达时,会对该节点做下线标识。如果是主节点下线,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。 哨兵节点包含如下的特征:
 1. 哨兵节点会定期监控数据节点,其他哨兵节点是否可达;
 2. 哨兵节点会将故障转移的结果通知给应用方;
 3. 哨兵节点可以将从节点晋升为主节点,并维护后续正确的主从关系;
 4. 哨兵模式下,客户端连接的是哨兵节点集合,从中获取主节点信息;
 5. 节点的故障判断是由多个哨兵节点共同完成的,可有效地防止误判;
 6. 哨兵节点集合是由多个哨兵节点组成的,即使个别哨兵节点不可用,整个集合依然是健壮的;
 7. 哨兵节点也是独立的Redis节点,是特殊的Redis节点,它们不存储数据,只支持部分命令。 集群: Redis集群采用虚拟槽分区来实现数据分片,它把所有的键根据哈希函数映射到`0-16383`整数槽内,计算公式为`slot=CRC16(key)&16383`,每一个节点负责维护一部分槽以及槽所映射的键值数据。虚拟槽分区具有如下特点:。
 1. 解耦数据和节点之间的关系,简化了节点扩容和收缩的难度;
 2. 节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据;
 3. 支持节点、槽、键之间的映射查询,用于数据路由,在线伸缩等场景。

上一题