0
点赞
收藏
分享

微信扫一扫

redis各集群模式原理及对比

东言肆语 2022-02-18 阅读 87
redis

一、Redis主从复制原理

原理:
  当启动一个Slave进程后,它会向Master发送一个SYNC命令,请求同步连接。无论是第一次连接还是重新连接,Master节点都会启动一个后台进程,将数据快照保存到数据文件中,同时Master会记录所有修改数据的命令并将其缓存在数据文件中。
后台进程完成缓存操作后,Master就会发送数据文件给Slave,Slave将数据文件保存到硬盘上,然后将其加载到内存中。接着Master就会把所有修改数据的命令发送给Slave。
若Slave出现故障导致宕机,那么恢复正常后会自动重新连接。Master收到Slave的连接请求后,将其完整的数据文件发送给Slave。如果Master同时收到多个Slave发来的同步请求,那么Master只会在后台启动一个进程保存数据文件,然后将其发送给所有的Slave,确保所有的Slave数据完整一致。
主从结构:
1、一主一从、一主多从:可以配置为读写分离(主节点负责写、从节点负责读),提高集群性能。
2、树状结构:
  相当于引入了中间层,可以有效降低主节点负载和需要传送给从节点的数据量。避免主节点挂载多个从节点时,对主节点的性能干扰。
3、主从节点间复制的大体步骤:
  ① 保存主节点信息(rdb/aof/混合)
  ② 主从建立socket连接
  ③ 发送ping命令
  ④ 权限验证
  ⑤ 同步数据集
  ⑥ 命令持续复制
主从复制模式弊端:
  ① 故障处理:一旦主节点由于故障不能提供服务,只能人工将从节点晋升为主节 点,同时还要通知应用更新主节点地址,这种故障处理方式无法接受。
  ② 主节点的写能力收到限制
  ③ 主节点的存储能力受到单机限制

二、Reids哨兵模式原理

原理:
1、监控(Monitoring):不断的监控Master和Slave是否运作正常
2、提醒(notification):被监控的节点出现问题时,哨兵进程通过API向管理员或者 其 他应用程序发送通知。
3、自动故障转移(Automatic Failover):针对Master节点,当一个Master节点不能 正常工作时,哨兵进程会开始一次自动故障转义操作,它会将失效Master的其中一个Slave 升级为新的Master,并让失效Master的其他Slave改为复制新的 Master。当客户端试 图连接失效的Master时,Redis集群也会向客户端返回新 Master的地址,使得Redis集 群可以使用现在的Master替换失效Master。
  1)多个Sentinel发现并确认Master有问题
  2)选出一个Sentinel作为领导
  3)选出一个Slave作为Master
  4)通知其余Slave成为新的Master的Slave
  5)通知客户端主从变化
  6)配置提供者:在哨兵模式下,客户端在初始化时连接的是哨兵节点集合,从中 获取主节点的信息。
哨兵模式弊端:
  哨兵模式基于主从模式,具有主从模式的所有有点。实现了自动化的故障恢复。但哨兵模式的缺点为无法实现在线扩容、配置繁琐

三、分布式集群(cluster)

原理:
  该模式是redis的分布式解决方案:在数据集层面是分散的(主从和哨兵模式中,任一节点都是全量数据),常见的分区有两种 哈希分区和顺序分区,redis采用了哈希分区。
  集群模式搭建时,会先将16384个槽点分配到所有节点中,然后根据循环冗余校验(Cyclic Rdundancy Check,CRC)算法和取模算法将已分配的槽数据存储到不同的Master节点。

集群特性
  由多个主从节点组成的分布式服务器群,具有复制、高可用和分布式特性。Redis集群将所有数据存储区域划分为16384个槽(solt),每个节点负责一部分槽,槽的信息存储于每个节点中。Redis集群要将每个节点设置成集群模式,它没有中心节点,可水平扩展,性能和高可用性均优于主从模式和哨兵模式,而且配置简单。
节点特性
  每个主节点提供读写能力,每个从节点异步复制主节点的数据,主节点故障时,从节点直接升级为主节点,也可以通过配置来增加从节点的读写功能。
相较于哨兵模式:提高了读写的并发率,分散了I/O,在保障高可用的前提下提高了性能。

开发人员需注意的分布式集群特性:
  ①key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key执行批量操作。对于映射为不同slot值的key,由于执行mset、mget等操作可能存在于多个节点上,因此不被支持。
  ③key事务操作支持有限。同理只支持多个key在同一个节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能。
  ④key作为数据分区的最小粒度,因此不能将一个大的键值对象如hash、list等映射到不同的节点。
  ⑤不支持多数据库空间。单机下的Redis可以支持16个数据库,集群模式下只能使用一个数据库空间,即db0。(单机中默认db0~15)
  ⑥复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构

举报

相关推荐

0 条评论