02_redis主从架构与复制原理
2020-02-22 21:54:01 60 举报
redis主从架构与复制原理
作者其他创作
大纲/内容
5、slave会先将RDB文件写入本地磁盘,然后再将RDB中的数据从本地磁盘加载到内存中。
redis replication的核心机制(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量(2)一个master node是可以配置多个slave node的(3)slave node也可以连接其他的slave node(4)slave node做复制的时候,是不会block master node的正常工作的(5)slave node在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了,时间在毫秒到秒之间,取决数据量的大小。(6)slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量slave,高可用性,有很大的关系
说明:master持久化对于主从架构的安全保障的意义如果采用了主从架构,那么建议必须开启master node 的持久化!不建议用 slave node 作为 master node 的数据热备,因为那样的话,如果你关掉master的持久化,可能在master宕机重启的时候数据是空的,然后可能一经过复制,salve node数据也丢了master -> RDB和AOF都关闭了 -> 全部在内存中master宕机,重启,是没有本地数据可以恢复的,然后就会直接认为自己的数据是空的master就会将空的数据集同步到slave上去,所有slave的数据全部清空
生成
redis
redis主从实现读写分离实现10万+的高并发
replication基本原理
slave node
RDB快照文件
核心思想:异步复制
master node
问题:第6步是怎么知道 要发送缓存给slave的
说明:slave node如果跟master node有网络故障,断开了连接,会自动重连。master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slave node。
磁盘
3、如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
说明:单机redis能承载的qps在上万到几万不等
client
异步同步数据
redisslave
3、slave发送请求过来,发现run id 变化了,就触发一次全量复制
内存
redis进程
返回结果
说明:架构做成主从架构,一主多从,主负责写,并将数据同步复制到slave节点,从负责读,所有的从节点全部走从节点。拓展性:设定单机redis读操作到5万QPS现架构能达到10SPS。如果系统需要做到20万QPS再加2台slave节点就可以。优点:可以进行水平扩容,QPS增加,继续增加slave即可。主要是读高并发的场景下用 主从架构,假如是写高并发的话就需要做异步之类的。
2、返回操作结果
复制的完整基本流程
拓画布者
redismaster
master node100W条数据
阿里云ODPS
2、主从复制的断点续传从redis 2.8开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份master node会在内存中常见一个backlog,master和slave都会保存一个replica offset还有一个master id,offset就是保存在backlog中的。如果master和slave网络连接断掉了,slave会让master从上次的replica offset开始继续复制但是如果没有找到对应的offset,那么就会执行一次full resynchronization3、无磁盘化复制master在内存中直接创建rdb,然后发送给slave,不会在自己本地落地磁盘了repl-diskless-syncrepl-diskless-sync-delay,等待一定时长再开始复制,因为要等更多slave重新连接过来4、过期key处理slave不会过期key,只会等待master过期key。如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。
说明:redis突然挂掉了,进程死了,或者所在的机器没了,或者其它灾难性的故障。
1、slave node启动,仅仅保存master node的信息,包括master node的host和ip,但是复制流程没开始master host和ip是从哪儿来的?redis.conf里面的slaveof配置的
说明:如里redis挂掉之后,新建一个redis,把阿里云上的备份拷下来,放到磁盘中,启动redis即可。
写操作
thread
1、上千万、上亿用户同时访问redis,qps到10万
2、请求过来,单机redis直接死了。系统的瓶颈就出现在redis单机问题上。
读操作
1、slave node启动发送一个PSYNC命令
1、假设 master node 里的数据有错误,要把数据恢复到之前的一段时间里的。直接取到20小时之前的一份rdb的备份,然后恢复到master中,此时master中的数据就完全不一样了。而且run id也变化了
4、RDB文件生成完毕之后,master会将这个RDB发送给slave
slave node100W条数据
1、写操作
run id 的作用
3、异步同步数据
2、slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
4、master node第一次执行全量复制,将所有数据发给slave node
说明:redis如果单单把数据存在内存中,是没有作何办法应对灾难性的故障的,比如很奇葩的,支付宝的case,电缆被工人给挖断了,导致大型机房停电。
socket网络连接
6、master将内存中缓存的写命令发送给slave,slave也会同步这些数据。
可以备份一份到阿里云上面
2、如果是slave node第一次连接master node,那么会触发一次full resynchronization。如果这是slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据。
2、说明:如果slave拿着旧的offset等信息,来要求数据同步,这样其实是有问题了
RDB持久化方案
5、master node 异步发送增量数据
redis单机瓶颈
口令认证
redis主从复制原理
0 条评论
下一页