部分重同步(partial resynchronization)
有两种情况下是完整重同步:
slave连接上master第一次复制的时候;
如果当主从断线,重新连接复制的时候有可能是完整重同步
1从服务器连接主服务器,发送SYNC命令
2主服务器接收到SYNC命名后,开始执行bgsave命令生成RDB文件并使用缓冲区记录此后执行的所有写命令
3主服务器basave执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令
4从服务器收到快照文件后丢弃所有旧数据,载入收到的快照
5主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令
6从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令
用于处理断线后重复制的情况,先介绍几个用于部分重同步的部分
runid(replication ID),主服务器运行id,Redis实例在启动时,随机生成一个长度40的唯一字符串来标识当前节点
offset,复制偏移量。主服务器和从服务器各自维护一个复制偏移量,记录传输的字节数。当主节点向从节点发送N个字节数据时,主节点的offset增加N,从节点收到主节点传来的N个字节数据时,从节点的offset增加N
replication backlog buffer,复制积压缓冲区。是一个固定长度的FIFO队列,大小由配置参数repl-backlog-size指定,默认大小1MB。需要注意的是该缓冲区由master维护并且有且只有一个,所有slave共享此缓冲区,其作用在于备份最近主库发送给从库的数据
当slave连接到master,会执行PSYNC <runid> <offset>发送记录旧的master的runid(replication ID)和偏移量offset,这样master能够只发送slave所缺的增量部分。但是如果master的复制积压缓存区没有足够的命令记录,或者slave传的runid(replication ID)不对,就会进行完整重同步,即slave会获得一个完整的数据集副本
当slave断开重连后,会发送psync 命令给master。
master首先会对服务器运行进行判断,如果与自己相同就进行判断偏移量
master会判断自己的偏移量与slave的偏移量是否一致。
如果不一致,master会去缓冲区中判断slave的偏移量之后的数据是否存在。
如果存在就会返回+continue回复,表示slave可以执行部分同步了。
master发送断线后的写命令给slave
slave执行写命令
PSYNC命令执行完整重同步和部分重同步的流程图
命令传播
当完成数据同步之后,主从服务器的数据暂时达到一致状态,当主服务器执行了客户端的写命令之后,主从的数据便不再一致。为了能够使主从服务器的数据保持一致性,主服务器会对从服务器执行命令传播 *** 作,即 每执行一个写命令就会向从服务器发送同样的写命令
在命令传播阶段,从服务器会默认以每秒一次的频率向主服务器发送心跳检测REPLCONF ACK <replication_offset>其中replication_offset是当前从服务器的复制偏移量,该命令的作用有三个
检测主从服务器的网络连接状态
辅助实现min-slaves选项
检测命令丢失
>
1、这里,就用到了我们办公室必备办公软件WORD了(我以word2003演示,其他高版本word也是一个道理)。首先,打开一个word文档。
2、点击菜单栏中的编辑——office剪切板。
3、这时候,右侧就会显示出剪切板复制粘贴记录内容。可以看到刚才复制的内容了。
4、然后再看看右侧word剪切板历史记录,可以看到我复制的内容实时显示在这里了。
5、在网页中复制一段话。
6、然后再看看word剪切板查看器,可以看到仍然看到了刚才复制的最新内容。
比如服务器A的目录权限要复制到服务器B步骤1获取服务器A所有目录
cd /
执行find / >qxout
步骤2修改qxout
sed 's/^/ls -ld /g' qxout
步骤3生成qxls,获取所有目录权限
执行sh qxout>qxls
步骤4编写脚本chownqxsh,脚本内容如下:最后会生成dochownsh的文件
while read A B C D E F G H I
do
echo "chown $C:$D \"$I\"">>dochownsh
done<qxls
如果提示软链接找不到可以忽略,其中第一位的字母"l"即表示此文件为软链接文件,
软链接文件的真实权限取决于源文件的权限
步骤5拷贝到服务器B执行dochownsh,修改文件和目录属主
搞定这里如果是想获取指定的目录,把开头的/换成指定的就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)