美文网首页
redis主从复制

redis主从复制

作者: 绝色天龙 | 来源:发表于2019-05-24 00:38 被阅读0次

    复制

    旧版复制功能(2.8版本以前)

    • 同步
    • 命令传播

    旧版复制功能的缺陷

    • 初次复制

    从服务器从未进行过复制,或者当前要复制的主服务器和上一次复制的主服务器不同

    • 断线后重复制

    处于命令传播阶段的主从服务器因为网络中断了复制,从服务器自动重连成功继续复制

    旧版复制在断线重连后会重新执行一次同步操作,主服务器会将完整的RDB文件发送给从服务器

    新版复制功能的实现

    部分重同步实现

    • 复制偏移量(主从服务器都有)

    复制偏移量可以用来判断主从服务器状态是否一致

    • 复制积压缓冲区(主服务器有)

    由主服务器维护的一个固定长度的FIFO队列,默认大小为1MB

    从服务器重新连上主服务器后会通过PSYNC发送自己的offset,主服务器会进行判断:

    1. offset后的数据还在积压缓冲区,则执行部分重同步
    2. offset后的数据不在积压缓冲区,则执行完整同步

    复制积压缓冲区的设置:repl-backlog-size

    • 服务器运行ID(run ID)
    1. 每个服务器都有,服务启动自动生成,40位随机的16进制字符
    2. 初次复制,主服务发送本机run ID 给从服务器,从服务器保存
    3. 断线重连参考下图

    PSYNC命令实现

    复制的实现

    1. 从服务器设置主服务器的地址和端口
    • SLAVEOF是异步命令,设置完地址和端口后从服务器返回客户端OK,之后进行同步
    1. 从服务器与主服务器建立套接字连接
    • 从服务器可以视为主服务器的一个客户端
    1. 从服务器发送PING命令
    • 收到PONG,一切正常
    • 读取恢复超时或者主服务器返回错误,断开重连主服务器
    1. 身份验证
    • 根据masterauth配置决定是否进行身份验证


      image
    1. 发送端口信息
    2. 同步
    • 主从服务器互为客户端
    1. 命令传播

    心跳检测

    • 默认每个一秒发送心跳
    1. 检测网络连接状态
    2. 辅助实现min-slaves配置选项
    3. 检测命令丢失(心跳会携带复制偏移量)

    相关文章

      网友评论

          本文标题:redis主从复制

          本文链接:https://www.haomeiwen.com/subject/xpfwzqtx.html