交互式网站设计怎么做,浏览有关小城镇建设的网站6,phpcms做视频网站首页,我被钓鱼网站骗了骗取建设信用卡建设银行会怎么处理钱会还回吗sync虽然解决了数据同步问题#xff0c;但是在数据量比较大情况下#xff0c;从库断线从来依然采用全量复制机制#xff0c;无论是从数据恢复、宽带占用来说#xff0c;sync所带来的问题还是很多的。于是redis从2.8开始#xff0c;引入新的命令psync。
psync有两种模式但是在数据量比较大情况下从库断线从来依然采用全量复制机制无论是从数据恢复、宽带占用来说sync所带来的问题还是很多的。于是redis从2.8开始引入新的命令psync。
psync有两种模式完整重同步和部分重同步。
部分重同步主要依赖三个方面来实现依次介绍。
offset复制偏移量
主库和从库分别各自维护一个复制偏移量可以使用info replication查看用于标识自己复制的情况
在主库中代表主节点向从节点传递的字节数在从库中代表从库同步的字节数。
每当主库向从节点发送N个字节数据时主节点的offset增加N
从库每收到主节点传来的N个字节数据时从库的offset增加N。
因此offset总是不断增大这也是判断主从数据是否同步的标志若主从的offset相同则表示数据同步量不通则表示数据不同步。
replication backlog buffer复制积压缓冲区 复制积压缓冲区是一个固定长度的FIFO队列大小由配置参数repl-backlog-size指定默认大小1MB。
需要注意的是该缓冲区由master维护并且有且只有一个所有slave共享此缓冲区其作用在于备份最近主库发送给从库的数据。 在主从命令传播阶段主节点除了将写命令发送给从节点外还会发送一份到复制积压缓冲区作为写命令的备份。 除了存储最近的写命令复制积压缓冲区中还存储了每个字节相应的复制偏移量由于复制积压缓冲区固定大小先进先出的队列所以它总是保存的是最近redis执行的命令。 所以重连服务器后从服务器会发送自己的复制偏移量offset给主服务器
如果offset偏移量之后的数据仍然存在于复制挤压缓冲区就执行部分重同步操作。
相反执行完整重同步操作。
run_id(服务器运行的唯一ID) 每个redis实例在启动时候都会随机生成一个长度为40的唯一字符串来标识当前运行的redis节点查看此id可通过命令info server查看。 当主从复制在初次复制时主节点将自己的runid发送给从节点从节点将这个runid保存起来,当断线重连时从节点会将这个runid发送给主节点。主节点根据runid判断能否进行部分复制
如果从节点保存的runid与主节点现在的runid相同说明主从节点之前同步过主节点会更具offset偏移量之后的数据判断是否执行部分复制如果offset偏移量之后的数据仍然都在复制积压缓冲区里则执行部分复制否则执行全量复制如果从节点保存的runid与主节点现在的runid不同说明从节点在断线前同步的redis节点并不是当前的主节点只能进行全量复制;psync流程 复制
客户端向服务器端发送SLAVEOF
1、设置主服务器的地址和端口
存到masterhost和mastterport两个属性里之后向客户端发送ok然后开始复制工作。
2、建立套接字链接
从服务器根据命令设置的地址和端口创建链接并且为这个套接字创建一个专门处理复制工作的文件事件处理器。
主服务器也会为套接字创建相应的客户端状态并且把从服务器当作一个客户端来对待。
3、发送ping命令检查
检查套接字状态是否正常
检查主服务器是否能正确处理请求。如果不能就重连
4、身份认证 5、发送端口信息
从服务器向主服务器发送信息主服务器记录。
6、同步
从服务器向主服务器发送psync命令。主服务器也成为从服务器的客户端因为主服务器会发送写命令给从服务器
7、命令传播
完成同步后进入传播阶段主服务器一直发送写命令从服务器一直接受保证和主服务器一致。
心跳检测
默认一秒一次从服务器向主服务器发送命令REPLCONF ACK offset
三个作用
检测网络连接状态如果主服务器一秒没收到命令就说明出问题了
辅助实现min-slaves配置min-slaves-to-write 3 min-slaves-max-log 10:当从服务器小于3个或延迟都大于10主服务器拒绝写命令。
检测命令丢失如果命令丢失主服务器会发现偏移量不一样然后它就会根据偏移量去积压缓冲区找到缺少的数据并发给从服务器。