精品博文《Redis主从复制学习》https://zhuanlan.zhihu.com/p/47719810
精讲Redis主从全量、增量复制的原理。

1.Redis主从复制

Redis主从复制原理

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

  • 从服务器连接主服务器,发送SYNC命令;
  • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

Redis主从的理解

  • 一个Master可以有多个Slaves
  • 默认配置下,master节点可以进行读和写,slave节点只能进行读操作,写操作被禁止
  • 不要修改配置让slave节点支持写操作,没有意义,原因一,写入的数据不会被同步到其他节点;原因二,当master节点修改同一条数据后,slave节点的数据会被覆盖掉
  • slave节点挂了不影响其他slave节点的读和master节点的读和写,重新启动后会将数据从master节点同步过来
  • master节点挂了以后,不影响slave节点的读,Redis将不再提供写服务,master节点启动后Redis将重新对外提供写服务。

对有密码的情况说明一下,当master节点设置密码时:

  • 客户端访问master需要密码
  • 启动slave需要密码,在配置中进行配置即可
  • 客户端访问slave不需要密码

2.Redis主从搭建

配置文件配置

1
2
3
# 从库配置
slaveof 192.168.xx.xx 6379 # master ip port
masterauth 123456 # 若主库有设置密码

只有写入到配置文件,重启redis,主从配置才不会丢失,建议也是用这种方式,其他方式重启,主从配置会丢失。

Redis命令行配置

1
slaveof 192.168.xx.xx 6379

并不想重启redis服务进行主从配置

Redis启动加参数

1
在redis-server启动命令后加上--slaveof 启动生效。

3.断开主从

1
2
# 在从库断开主从
slaveof no one