Redis的三种集群模式

  1. 主从模式
  2. 哨兵模式
  3. Cluster模式

主从模式

Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制根据是否全量复制,分为全量复制和增量复制。

全量复制:

在slave启动的初始化阶段,slave需要将master的全量数据都复制一份,全量复制步骤:

  1. slave连接master,发送SYNC命令
  2. master接收到SYNC命令后,开始执行bgsave生成rdb文件,并使用缓冲区接受所有写命令
  3. master执行完bgsave之后,向slave发送快照,并继续将写命令记录在缓冲区
  4. slave接收到快照之后,载入收到的数据
  5. master发送完快照之后,向slave发送缓冲区的写命令
  6. slave载入快照之后,重放写命令

增量复制:

在slave初始化之后,将master上的写命令同步到slave,保证slave和master数据一致

采用主从复制架构时,必须在master开启持久化,否则可能在master当机重启时,因为master的数据为空导致复制之后slave的数据也丢失

主从复制的特点:

  1. 采用异步复制
  2. 一主可以多从
  3. 从服务器可以接受其他从服务器的连接
  4. 主从复制对于master、slave都是非阻塞的

主从复制的优点:

实现了读写分离,提高了可用性,解决了单点故障

缺点是当master节点宕机时,需要手动进行切换主机,进行故障转移,不容易扩容

哨兵模式

哨兵(Sentinel)是Redis中的一个组件,主要有以下功能:

  • 集群监听:监听master、slave是否正常工作
  • 消息通知:如果某个slave发生了故障,哨兵负责通知给管理员
  • 故障转移:一个master挂掉了,会自动转移到slave上
  • 配置中心:当故障发生了之后,通知client新的master地址

哨兵用于实现redis的高可用,本身也是分布式的,作为一个哨兵集群与运行

哨兵的核心知识:

  • 至少需要3个哨兵,来保证哨兵集群的健壮性
  • 哨兵+主从的架构,主要用于保证redis集群的高可用,不保证不会丢失数据

哨兵主要用来监控Redis集群,来保证Redis的高可用,但是还有一个缺点,就是不易扩容

Cluster模式

Redis Cluster是一种服务端芬片技术,采用了槽(slot)的概念,实现了分布式存储

分片原理:

redis将集群划分为16384个槽,存取数据的时候,对key进行hash来决定放在那个槽上,而redis集群的每一个槽都存放了所有槽的路由信息,当定位到槽后,可以直接从配置中获取到所处的节点,再去对应节点获取数据,扩容时只要将槽迁移到新的节点上,再更新槽的路由信息即可

Cluster模式下,每个节点需要开放两个端口,一个用于客户端请求命令,一个用于进行节点之间的通信,用于故障检测、配置更新、故障转移

优点是:

  • 分布式架构便于动态扩容
  • 节点不需要存放所有数据,节省资源
  • 具备哨兵模式的故障监控和转移能力
  • 无proxy,客户端直接访问redis服务

但缺点是运维更复杂,迁移数据需要人工操作,只能使用0号库,不能使用SELECT

标签: none

添加新评论