写点什么

Redis 复制的实现

作者:周杰伦本人
  • 2022 年 9 月 16 日
    贵州
  • 本文字数:677 字

    阅读完需:约 2 分钟

Redis 复制的实现

向从服务器发送 SLAVEOF 命令,可以让从服务器复制一个主服务器 命令格式 SLAVEOF 主服务器 ip 主服务器 port

1. 设置主服务器地址和端口

客户端向从服务器发送 SLAVEOF 命令后,从服务器会将客户端给定的主服务器的 ip 和 port 保存到 redisServe 的 masterhost 属性和 masterport 属性中


SLAVEOF 命令是异步命令,完成 masterhost 属性和 masterport 属性的设置工作后,从服务器向客户端返回 OK,实际的复制工作在 OK 返回之后才真正开始执行

2. 建立套接字连接

在 SLAVEOF 命令执行后,从服务器将根据命令设置的 IP 和 port 创建连向🔗主服务器的套接字,如果从服务器创建的套接字成功连接到主服务器,从服务器会为这个套接字关联一个文件事件处理器,这个处理器将负责执行后续的复制工作。主服务接受从服务器的套接字后,为该套接字创建客户端状态。

3. 发送 PING 命令

从服务器成为主服务器的客户端后,向主服务器发送 PING 命令,检查套接字的读写状态是否正常,检查主服务器是否正常处理命令请求。

4. 身份验证

从服务器收到主服务器返回的 PONG 后,如果从服务器设置了 masterauth 则需要进行身份验证,如果主从服务器设置的密码相同,则可以进行复制,否则进行重试

5. 发送端口信息

身份验证通过后从服务器执行命令 REPLCONF listening-port 端口号,向主服务器发送从服务器的监听端口号,主服务收到命令后记录 redisClient 的 slave_listening_port 属性中

6. 同步

从服务器向主服务器发送 PSYNC 命令,执行同步,将自己数据库更新和主服务器一样

7.命令传播

完成同步后,主从服务器进入命令传播阶段,主服务器将自己执行的写命令发送给从服务器,从服务器接收并执行写命令就可以保证数据一致。

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
Redis复制的实现_9月月更_周杰伦本人_InfoQ写作社区