Redis的复制功能分为 在两种情况下需要执行数据库同步: Redis2.8以前的版本,使用 部分重同步功能由以下三个部分构成: 主服务器接收到运行ID后,执行判断: 复制积压缓存区是由主服务器维护的一个固定长度的先进先出的队列,默认大小是1MB; 执行复制的主服务器和从服务器都会分别维护一个复制偏移量 通过对比主从服务器的复制偏移量,程序可以很容易地知道主从服务器是否处于一致状态; PSYNC命令的格式 从服务器发送的 主服务器接收到 复制主要由 从服务器成为主服务器的客户端后(成功创建套接字连接后),做的第一件事就是向主服务器发送一个 从服务器发送完 所有错误情况都会令从服务器中止目前的复制工作,并从创建套接字开始重新执行复制,直到身份验证通过,或者从服务器放弃执行复制为止; 在身份验证步骤后,从服务器将执行命令 主服务器在接收到命令后,会将端口号记录在从服务器所对应的客户端状态的 在这一步,从服务器将向主服务器发送 注意:在同步操作执行之前,只有从服务器是主服务器的客户端(即,只有从服务器向主服务器发送命令),但是在执行同步操作之后,主服务器也会成为从服务器的客户端,因为: 当完成了同步之后,主从服务器就会进入命令传播阶段,这时主服务器只要一直将自己执行的写命令发送给从服务器,而从服务器只要一直接收并执行主服务器发送来的写命令,就能保证主从服务器的一致; 在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送 如果主服务器超过1秒钟没有收到从服务器发来的 如果因为网络故障,主服务器传播给从服务器的写命令在半路丢失,那么从服务器向主服务器发送 补发缺少数据和部分重同步的操作原理非常相似,区别在于,补发缺少数据是在主从服务器没有断线的情况下执行,而部分重同步则是在主从服务器断线并重连之后执行。 主服务器可以在不安全的情况下拒绝执行写命令。当从服务器的个数小于设置值,或从服务器的延迟都大于或等于设置值时,主服务器认为不安全,将拒绝写命令;从服务器发送的心跳检测可以帮助主服务器统计从服务器的数量和各个从服务器的延迟;文章目录
引言
同步和传播两个过程:
同步:将从服务器的数据库状态更新至主服务器当前所处的状态;传播:在主服务器的数据库状态被修改导致主从服务器数据库状态出现不一致时(如,主服务器执行写命令后),让主从服务器的数据库重新达到一致状态;1. 相关命令
slaveof host port
host:port的服务器,当前服务器被称为从服务器,被复制的服务器称为主服务器;
slaveof no one
info replication
2. 同步
2.1 两种需要同步的情况
初次复制和断线后复制;
slaveof no one也认为没有复制过任何主服务器,即当前服务器状态是master)
2.2 两种同步方法
SYNC命令,在两种情况下都实行完整同步,Redis2.8版本开始使用PSYNC命令代替SYNC命令,支持两种同步方式:完整重同步和部分重同步
SYNC或PSYNC);BGSAVE命令,在后台生成RDB文件,同时使用一个缓冲区记录生成RDB文件期间,主服务器执行的新的写命令;BGSAVE命令执行完毕后,主服务器将生成的RDB文件发送给从服务器;BGSAVE命令时的状态;
2.3
SYNC和PSYNC命令SYNC
SYNC命令是Redis2.8以前使用的同步命令;在初次复制和断线后重复制时都使用完整同步;
BGSAVE命令来生成RDB文件,这个生成操作会耗费主服务器大量的CPU、内存和磁盘I/O资源;
PSYNC
PSYNC命令代替SYNC命令来执行复制时的同步操作;PSYNC支持完整同步和部分同步,在初次复制时,执行完整同步,在断线重复制时,根据情况执行完整重同步(full resynchronization)或部分重同步(partial resynchronization);2.4 部分重同步的实现
服务器运行ID
复制积压缓冲区
offset不在缓冲区的几率越大,越可能需要执行完整重同步,可以通过配置参数适当调高缓冲区大小:# repl-backlog-size 1mb
PSYNC命令将自己的复制偏移量offset发送给主服务器,主服务器会根据这个复制偏移量决定对从服务器执行何种同步操作:
offset偏移量之后的数据仍然存在于复制积压缓冲区中,那么主服务器对从服务器执行部分重同步;offset偏移量之后的数据已经不存在于复制积压缓冲区,那么主服务器将对从服务器执行完整重同步;复制偏移量
2.5 PSYNC命令的实现
PSYNC <runid> <offset>
runid是主服务器的运行ID;offset是从服务器的复制偏移量;PSYNC命令,分为两种情况:
slaveof no one,从服务器知道要开始一次新的复制,这时需要执行完整重同步,所以向服务器发送PSYNC ? -1命令
runid:是?号,表示需要主服务器发送offset:复制偏移量-1;
PSYNC <runid> <offset>命令
runid:是上一次复制的主服务器的运行ID;offset:是从服务器当前的复制偏移量;PSYNC命令后,三种回复:
runid是当前主服务器的运行ID,并且offset偏移之后的数据还在复制积压缓冲区里,则回复+CONTINUE,表示主服务器将与从服务器执行部分重同步,从服务器只要等着主服务器将自己缺少的那部分数据发送过来就可以了;runid不是自己的运行ID,或者offset偏移之后的数据已经不在复制积压缓冲区了,则回复+FULLRESYNC <runid> <offset>,表示主服务器将与从服务器执行完整重同步:
runid是主服务器的运行ID,从服务器会把这个ID保存起来,在下一次发送PSYNC命令时使用;offset是主服务器当前的复制偏移量,从服务器会将这个值作为自己的初始化偏移量;
PSYNC命令,则回复-ERR,从服务器将向主服务器发送低版本使用的SYNC命令,与主服务器执行完整重同步。3. 命令传播
4. 复制的实现
同步和命令传播组成,但是在进行这两步之前,还有其他一些操作,当从服务器执行了slaveof <master_ip> <master_port>后,都执行了哪些操作呢?主要有以下步骤:
PING命令4.1 步骤1:设置主服务器的地址和端口
<master_ip>)和端口(<master_port>)保存到服务器状态的masterhost和masterport属性里struct redisServer{ // ... // 主服务器的地址 char *masterhost; // 主服务器的端口号 int masterport; // ... }; // 通过字段属性可以看出,一个从服务器只能指向一个主服务器; 4.2 步骤2:建立套接字连接
4.3 步骤3:发送PING命令
PING命令,这个命令的作用:
PING命令后,会遇到三种情况的回复:
PONG,表示主从服务器连接正常,可以继续执行复制工作的后续步骤;4.4 步骤4:身份验证
PONG回复后,下一步要做的就是决定是否进行身份验证:
masterauth选项,那么进行身份验证;masterauth选项,那么不进行身份验证;# masterauth后跟的是主服务器的密码 # masterauth <master-password>
AUTH命令,命令的参数为从服务器masterauth选项的值。# requirepass foobared
requirepass,并且从服务器也没有设置masterauth,那么不进行身份验证,继续执行复制工作后续的步骤;requirepass和从服务器AUTH命令携带的masterauth值相同,则身份认证通过,继续执行复制工作后续的步骤;requirepass和从服务器AUTH命令携带的masterauth值不相同,则身份认证不通过,主服务器返回一个invalid password错误;requirepass,但是从服务器设置了masterauth,则主服务器接收到AUTH命令后身份验证不通过,会返回no password is set错误;requirepass,但是从服务器没有设置masterauth,则身份验证不通过;4.5 步骤5:发送端口信息
REPLCONF listening-port <port-number>向主服务器发送从服务器的监听端口号;slave_listening_port属性中;4.6 步骤6:同步
PSYNC命令,执行同步操作,并将自己的数据库更新至主服务器当前所处的状态。
PSYNC命令执行的是完整重同步,那么主服务器需要成为从服务器的客户端,才能将后台生成RDB文件过程中,保存在缓冲区里的写命令发送给从服务器执行;PSYNC命令执行的是部分重同步,那么主服务器需要成为从服务器的客户端,才能向从服务器发送保存在复制积压缓冲区里面的写命令;4.7 步骤7:命令传播
5. 心跳检测
RELCONF ACK <replication_offset>命令,其中replication_offset是从服务器当前的复制偏移量。发送心跳检测的作用有三个:
min slaves选项检测主从服务器的网络连接状态
REPLCONF命令,那么主服务器就知道主从服务器之间的连接出现问题了检测命令丢失
REPLCONF ACK命令时,主服务器就会发觉当前从服务器的偏移量少于自己的复制偏移量,然后主服务器就会根据从服务器提交的偏移量在复制积压缓存区里找到服务器缺少的数据,并将这些数据重新发送给从服务器,这称为补发缺少数据;辅助实现
min slaves选项min-slaves-to-write 3 min-slaves-max-lag 10
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)