Redis主从以及Redis cluster(分布式相关)

(1) Redis 主从结构(主备)

主从复制:

1.当从服务器第一次启动时,
从服务器发送SYNC给主,主生成RDB文件,在过程中将一些新来的命令缓存,然后一起发送。
以上是复制初始化。

2.然后每次主接受新的命令,会增量同步给从数据库。

****乐观复制:
Redis采用的是容忍一定时间内的数据不一致情况;
==>在增量同步的过程中,主数据库不会等待从数据库完全写入成功才会返回。
==>所以有一段时间内数据是不一致的。
==>但是当然这不是绝对的,只要牺牲一点性能,是能避免这种情况的。
==>min-slave-write 3    ==>只有三个从数据库同步成功才能写入主,否则返回错误
==>min-slave-max-log 3  ==>允许从数据库最长失联时间

****.增量复制
基于以下四点实现:
1.主节点除了备份RDB文件之外,还维护一个环形积压队列,以及环形队列的写索引和复制时的offset。
2.从数据库会存储主数据库的id,每个Reids实例都拥有一个唯一的运行id,
当实例重启后,就会自动生成一个新的id。
3.主节点在复制同步阶段,每次发送一个命令给从数据库,都会存到积压队列中,并记录对应都偏移量。
4.从数据库接受到主数据库传来都命令时,也会记录偏移量

PSYNC id offset来增量同步

如果
1.从节点传递都runid和master都runid一致
2.主节点在环形队列上能找到对应都offset
才增量,否则全量

****.哨兵模式
哨兵都作用就是监控redis节点都运行状态
普通的Redis主从模式,如果主崩了,需要手动重启和恢复。
所以引入哨兵模式,哨兵作为一个独立的进程,多个哨兵互相以及监控主从,实现崩溃时的自动切换。

通过info命令,向主节点获得所有从节点的地址。
和主节点建立链接后,做三件事
1.每隔10s向主数据库和从数据库发送info命令
2.每隔2s向主数据库和从数据的_sentinel频道发送自己的信息
3.每隔1s向所有数据库节点和所有哨兵节点发送ping命令

 

(2) Redis cluster

 

Redis Cluster不使用一致的哈希,而是一种不同形式的分片,其中每个键在概念上都是我们所称的哈希槽的一部分。Redis集群中有16384个哈希槽,要计算给定密钥的哈希槽是什么,我们只需取密钥模16384的CRC16。Redis集群中的每个节点都负责哈希槽的一个子集,因此例如,您可能有一个包含3个节点的集群,其中:节点A包含从0到5500的哈希槽。节点B包含5501到11000的哈希槽。节点C包含从11001到16383的哈希槽。这样可以方便地添加和删除集群中的节点。例如,如果我想添加一个新的节点D,我需要将一些哈希槽从节点A、B、C移到D。同样,如果我想从集群中删除节点A,我可以将A服务的哈希槽移动到B和C。当节点A为空时,我可以将其从集群中完全移除。

==>上述有两个细节

1. CRC16能产生的槽量可以有2^16=6w,但是实际上使用的是2^14个槽,作者曾解释说,这个数量够了且为了心跳包的大小考虑。

2. 在扩容和缩容的时候,其实采用的是渐进式的,在扩容过程,会根据槽去查Old Node,发现不存在,才去New Node查。如果存在,帮忙迁移到New Node,然后返回。 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值