redis

h7ml
  • redis
  • redis
大约 3 分钟

何谓主从复制

  1. redis 的主从复制就是我们设置一个 master 服务器,然后设置多个 slave 从服务器,主服务器存储着最新的数据,每次主服务器的数据出现变化的时候,都会将对应的命令传输到各个 slave 服务器,这样,我们就可以实现主服务器和从服务器的数据的同步了。
  2. 为什么需要?在企业的开发中,主从复制可以避免单机故障导致的数据和服务的丢失,保障了数据安全和服务的稳定运行。
  3. 一个 master 可以有多个 slave,一个 slave 也可以有多个 slave,这样,最终可以构成一棵树的结构。

基本原理

  1. Redis 的复制分为同步和命令传播阶段。同步操作作用于从服务器将从服务器的数据状态更新为主服务器的数据状态。
  2. 命令传播则相反,他的命令主要是在主数据库发生数据变化的时候,导致主从服务器的数据不一致的时候,让主从回到一致的过程

同步

  1. 客户端先向从服务器发送 slaveof 命令,判断是否是第一次复制,如果是第一次复制一般都是刚开始组建主从关系
  2. 如果是第一次复制,从服务器会向主服务器发送 PSYNC 命令,请求主服务器会执行完整的重同步操作。
  3. 主服务器接到完整的请求之后,将在后台执行 BGSAVE 命令,后台生成一个 RDB 文件,同时会有一个积压缓冲区记录从现在开始执行的所有的写命令。
  4. BGSAVE 命令执行之后,从服务器会接受到主服务器发送的 RDB 文件,同时主服务器还会向从服务器返回一个偏移量。
  5. 如果不是第一次复制,那么说明从服务器可能是断线的,导致了主从数据库状态不一样,需要同步主服务器的数据。这个时候从服务器就会向主服务器发送一个之前记录得到的偏移量,这样主服务器就会知道最后一次同步的是在哪个地方,从这个地方开始进行同步即可。
  6. 由于之前从服务器可能出现断线的情况,所以主服务器需要发送 CONNECT 命令,表示将和从服务器执行同步部分数据的操作。但是,假如从服务器将偏移量丢失了呢?那么主服务器将会发起一个全量同步的操作
  7. 主服务器接到 CONNECT 命令之后,会将积压缓冲区中的命令全部执行,然后将偏移量发送给从服务器,从服务器接到偏移量之后,就会开始执行同步操作。

命令传播阶段

  1. 执行完同步之后,主从并不会一直保持着这个状态,加入主服务器执行了写的命令,那么就会将命令传输给从服务器,从服务器拿到了命令之后就会执行对应的操作。最后保持主从一致的状态。
  2. 在命令传播阶段,从服务器会以每秒一次的频率,向从服务器发送命令。作用主要是检测主从服务器的网络状态,辅助实现 min-slaves,检测命令丢失。