主从架构的复制同步主要有两种,一种是全量复制,一种是增量复制。
(1)slave node启动,仅仅保存master node的信息,包括master node的host和ip,但是复制流程没开始
master host和ip是从哪儿来的,redis.conf里面的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
一般发生在slave
初始化的时候,也就是刚刚连接上master
,这个时候需要同步所有数据。
slave
启动的时候,第一次请求全量复制,会给master
发送一个PSNYC
msater
接收到PSYNC命令之后,由于是全量复制,所以是触发一次full resynchronization,使用BGSAVE命令(启动另一个后台线程)生成RDB文件,同时也会接收新的命令,把之后所有的写命令都放到缓冲区,也就是内存中。master
执行完BGSAVE命令之后,会将这个RDB快照文件发送给slave,如果rdb复制时间超过60秒(repl-timeout),那么slave node就会认为复制失败,可以适当调节大这个参数,对于千兆网卡的机器,一般每秒传输100MB,6G文件,很可能超过60s。发送期间继续接收数据,也是写到缓冲区。slave
接收到快照文件之后,会丢掉之前的旧数据,加载新的快照文件到内存中。master
发送完快照之后,会将内存中缓存的写命令发送给slave,slave也会同步这些数据。slave
加载完RDB快照文件之后,开始接收命令请求,同时会执行master
缓存区的写命令。如果slave node开启了AOF,那么会立即执行BGREWRITEAOF,重写AOFmaster如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slave node。
master node有一个backlog,默认是1MB大小
master node给slave node复制数据时,也会将数据在backlog中同步写一份
backlog主要是用来做全量复制中断的增量复制的
增量复制一般指slave和master已经稳定正常工作了,master会不断把自己的写操作,同步到slave上。
slave node如果跟master node有网络故障,断开了连接,会自动重连。重连会接着之前的地方继续复制,master直接从自己的backlog中获取部分丢失的数据,发送给slave node,默认backlog就是1MB,msater就是根据slave发送的psync中的offset来从backlog中获取数据的。
从redis 2.8开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份
master node会在内存中常见一个内存缓冲区(in-memory backlog),master和slave都会保存一个复制偏移量(replication offset)和master run id
,当连接断开时,slave会重新连接上master,然后请求继续复制,假如主从服务器的两个master run id
相同,并且指定的偏移量在内存缓冲区中还有效,复制就会从上次中断的点开始继续。如果其中一个条件不满足,就会进行完全重新同步(在2.8版本之前就是直接进行完全重新同步)。
因为主运行id不保存在磁盘中,如果从服务器重启了的话就只能进行完全同步了。
master会在自身不断累加offset,slave也会在自身不断累加offset
slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset
2.8.18版本以及之后,支持无磁盘复制,主要考虑有些磁盘速度比较慢,复制会给master造成很大压力,所以master在内存中直接创建rdb,然后发送给slave,不会在自己本地落地磁盘了。
repl-diskless-sync repl-diskless-sync-delay,等待一定时长再开始复制,因为要等更多slave重新连接过来
slave不会过期key,只会等待master过期key。如果master过期了一个key,或者通过LRU淘汰了一个key,那么会模拟一条del命令发送给slave。
主从节点互相都会发送heartbeat信息,master默认每隔10秒发送一次heartbeat,salve node每隔1秒发送一个heartbeat。
master每次接收到写命令之后,现在内部写入数据,然后异步发送给slave node。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算