Redis进阶篇2

Redis进阶篇

本章主要介绍redis持久化、主从架构、复制原理、集群架构、数据分布式存储原理、哨兵原理、高可用架构.

2、redis主从架构

 单机的redis几乎不太可能说QPS超过10万+,除非一些特殊情况,比如你的机器性能特别好,配置特别高,物理机,维护做的特别好,而且你的整体的操作不是太复杂。

解决方案:redis主从架构 -> 读写分离架构 -> 可支持水平扩展的读高并发架构

 

2.1redisreplication基本的原理

(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量

(2)一个masternode是可以配置多个slave node的

(3)slavenode也可以连接其他的slave node

(4)slavenode做复制的时候,是不会block master node的正常工作的

(5)slavenode在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了

(6)slavenode主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量

 

 

2.2、master持久化对于主从架构的安全保障的意义

 

如果采用了主从架构,那么建议必须开启master node的持久化!

不建议用slavenode作为master node的数据热备,因为那样的话,如果你关掉master的持久化,可能在master宕机重启的时候数据是空的,然后可能一经过复制,salve node数据也丢了。

 

2.3主从架构的核心原理

当启动一个slave node的时候,它会发送一个psync命令给master node,如果这是slave node 重新连接masternode ,那么master node 仅仅会复制给slave部分缺失的数据;否则如果是slave node 第一次连接master node ,那么会触发一次full resynchronization。

开始fullresynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会从客户端收到的所有写命令缓存在内存中。RDB文件生成完毕之后,master会将这个RDB发送给slace,slave会先写入本地磁盘,然后在从本地磁盘加载到内存中。然后master会将内存缓存的写命令发送给slave,slave也会同步这些数据。

slave node如果跟master node有网络故障,断开了连接,会自动重连。master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slavenode。

 

2.3.1、主从复制的断点续传

 

从redis2.8开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份

master node会在内存中常见一个backlog,master和slave都会保存一个replica offset还有一个master id,offset就是保存在backlog中的。如果master和slave网络连接断掉了,slave会让master从上次的replica offset开始继续复制

但是如果没有找到对应的offset,那么就会执行一次resynchronization。

 

2.3.2、过期key处理

slave不会过期key,只会等待master过期key。如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。

 

2.4复制的完整流程

1、slave node启动,仅仅保存masternode 都信息,包括master node的host和id,但是复制流程还没有开始,只知道master host 和ip是从哪里来的,redis.confd里面的slaveof进行配置。

2、slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node简历socket网路连接。

3、slave node发送ping命令给master node。

4、口令认证,如果master设置了requirepass,那么salve node必须发送masterauth口令过去进行认证

5、master node第一次执行全量复制,将所有数据发给slave node

6、master node后续持续将写命令,一部复制给slave node。

 

2.5数据同步相关的核心机制

此处主要主要指的是第一次slave与master建立连接,进行全量复制的情况。

1、master和slave都会维护一个offset

master会在自身不断累加offset,slave也会在自身不断累加offset,slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset。无论是全复制还是部分复制都会进行此操作,主要目的是确认master和slave之间的数据是否一致。

2、backlog

Master node有一个backlog,默认大小1MB。Master node给slave node复制数据时,也会将数据在backlog中同步写一份backlog主要是用来做全量复制中断候的增量的复制的。

3、master run id

Info server,可以看到master run id如果根据host+id定位master node是不靠谱的,如果master 弄得重启或者数据出现变化,那么slave node应该根据不同的runid区分,run id不同就做全量复制,如果需要不更改run id重启redis,那么可以使用redis-cli debug reload命令。

4、psync

从节点使用psync从master node进行复制,psync runid offset master node 会根据自身情况返回响应信息,可能是fullresysnc runid offset 触发全量复制,可能是continue触发增量复制

 

 

 

3、读写分离架构

读写分离架构是基于主从复制架构,实现读写分离。

redis的slave node设置只读,默认开启slave-read-only,这样就会拒绝所有的写操作。这样就实现在主上写,在从上读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值