Redis高可用架构

2024-10-04  本文已影响0人  王侦

1.主从模式

一个Master与若干Slave组成主从关系,当Slave与Master首次建立连接时,Master向Slave进行全量数据复制,复制结束后,再根据Master的最新数据变更进行增量数据复制。

Master向过多的Slave复制数据,则同样会出现“复制风暴”的问题。

在主从模式下,Master宕机后,需要手动把一台Slave服务器切换为主服务器。

2.哨兵模式

哨兵模式的核心还是主从模式,只不过它在相对于主从模式下Master宕机导致不可写的情况下,提供了一种自动竞选机制:所有的Slave竞选新的Master。

竞选机制的实现依赖于Sentinel服务器。在一个主从模式的Redis架构中会部署若干Sentinel节点,每个Sentinel节点都会与Master、Slave维持心跳。当超过N个Sentinel节点认为Master宕机时,Sentinel节点会协商选举出一个Slave担任新的Master。Sentinel节点会告知所选举出的Slave节点它已被提升为Master,其他的Slave则转而与这个新的Master建立连接,复制数据。引入Sentinel节点可以自动进行主从切换。

3.集群模式

无论是主从模式还是哨兵模式,都只有一个Master对外提供服务。实际上,互联网公司在应用Redis时会采用数据分片的方式:多个Master对外提供服务,全量数据分散在各个Master中。

集群模式使得Redis真正拥有了分布式存储能力。一个Redis集群由多个Redis节点组成,一个Master和若干Slave组成一个组,代表一个数据分片。每个数据分片都通过主从模式保证高可用。

Redis集群基于哈希槽进行数据分片:整个Redis数据库被划分为16384个哈希槽,这些Master把16384个槽位都瓜分了。

当向Redis集群中写入某个数据时,会基于数据Key进行CRC16算法,然后将结果与16384取模得到一个槽位。此数据会被归属到这个槽位上,会被存储到管理这个槽位的Master上。

Redis集群中每个节点都保存有各个节点的IP地址及其所负责的槽位信息,于是Redis客户端连接任意一个节点都能保证对数据的读写路由到正确的数据分片。

Gossip协议

4.中心化集群结构

Twemproxy代理

Codis项目

参考

上一篇 下一篇

猜你喜欢

热点阅读