标签:导致 set nc命令 初始 端口 利用 接受 在服务器 没有
在从服务器上执行 slave masterIP masterPort;
在配置文件中配置 slaveof <masterip> <masterport>;除了IP和端口信息外,还可以配置其他主从信息;
slave 向 master 发送 slaveof 命令后,slave先进行同步操作,再进行命令传播;
Redis的复制功能主要分为同步(sync)和命令传播(command propagate)两个操作;
先通过同步将master和slave的数据库状态达到一致,然后通过命令传播实时的将master的变化同步到slave;
同步:将 slave 的状态更新为和 master 一样的状态;
命令传播:master 被修改时将变化实时的同步到 slave;
同步操作执行完毕后,master将自己执行的写命令发送给slave,slave执行命令,master和slave保持一致;
复制的两种情况:
初次复制:slave没有复制过任何主服务器,或者复制的主服务器和上次的不同;
断线后复制:命令传播阶段的master和slave断连,重新连接后重新复制(先进行同步,再进行命令传播),效率较低;
为了解决断线后复制的低效问题,Redis2.8版本开始使用PSYNC命令代替SYNC命令;
部分重同步主要由以下三个部分构成:
重连后slave将自己的偏移量发送给master,master就知道slave需要同步哪些数据。至于是完整重同步还是部分重同步则根据slave的复制偏移量和积压缓冲区的关系进行选择;
master和slave各自维持一个复制偏移量。根据偏移量即可判断master和slave是否一致。
master每次想slave传播N个字节,就将自己的复制偏移量+N;
slave每次收到N个字节,就将自己的复制偏移量+N;
复制积压缓冲区是由master维护的一个固定长度的先进先出队列,默认在1MB。用于保存一定数量最新的写命令。
master将命令传播给slave时,还会将命令写入复制积压缓冲区里面;
重连后master收到的slave的复制偏移量在复制积压缓冲区中,表明需要同步的数据全部可以再复制积压缓冲区中取到,则进行部分重同步;否则进行完全重同步。
合理的设置复制积压缓冲区的大小可以有效的利用部分重同步模式;
大小公式:缓冲区大小 = 断连时间秒数 * 每秒的写命令;
每个Redis服务器都有自己的运行ID,它在服务器启动时生成,由40个随机的16进制字符组成。
初次复制时,master将自己的运行ID发送给slave并保存;
master和slave断线重连后,slave将保存的master运行ID发送给当前连接的主服务器。
发送的ID和当前主服务器ID一致则尝试进行部分重同步,否则进行完整重同步;
标签:导致 set nc命令 初始 端口 利用 接受 在服务器 没有
原文地址:https://www.cnblogs.com/virgosnail/p/9858662.html