cghtom / someTips

log4j日志级别 shell操作手册 面试 总结
0 stars 0 forks source link

redis 遇到的一些问题 #30

Open cghtom opened 6 years ago

cghtom commented 6 years ago

redis slave保存的run id与master当前run id一致 此时会全量复制?

主节点掉线了,是否会全量复制? redis 数据迁移:https://cachecloud.github.io/2016/06/28/1.2.%20迁移工具使用说明/

cghtom commented 6 years ago

如果主节点掉线了,大多数的节点认为,主节点失联了,那么就会选举产生新的主节点,当前节点就自动为从节点了。复制要看是否满足offset,不满足就会全量复制。此时在当前主节点的读写数据就会失败,如果是集群,当前的slot的数据也不会保存,也会有数据的丢失。失联主节点,如果在选取产生新的主主节点前恢复服务,就不会存在全量复制。

cghtom commented 6 years ago

run id并不是pid,slave把它保存在内存中,重启就消失

cghtom commented 6 years ago
  1. redis什么时候会发生全量复制?

a) redis slave首启动或者重启后,连接到master时

b) redis slave进程没重启,但是掉线了,重连后不满足部分复制条件

  1. redis什么时候会发生部分复制?

先来看部分复制需要的条件

a) 主从的redis版本>=2.8

b) redis slave进程没有重启,但是掉线了,重连了master(因为slave进程重启的话,run id就没有了)

c) redis slave保存的run id与master当前run id一致 (注:run id并不是pid,slave把它保存在内存中,重启就消失)

d) redis slave掉线期间,master保存在内存的offset可用,也就是master变化不大,被更改的指令都保存在内存

  1. redis进程重启后会发生全量复制还是部分复制?

a) master重启时,run id会发生变化

b) slave重启时,run id会丢失

答:很显然,会发生全量复制,因为部分复制的条件之一run id已经不能满足

4.当全量复制或者同步复制完毕,增量是如何更新到slave的?

答:通过流式的命令更新,此时master就是slave的client,这样去理解。

  1. run id如何查看?

答:通过info server命令查看