Redis 默认使用异步复制,低延迟、高性能,是绝大多数 Redis 用例的自然复制模式。但是,Redis 副本会异步确认它们定期与主服务器接收的数据量。因此,master 不会每次都等待副本处理命令,但是如果需要,它知道哪个副本已经处理了哪个命令。这允许具有可选的同步复制。
命令
从节点发起复制主节点命令
注:已经复制切换也是一样用这个 ,切换会删除从节点当前所有数据
slaveof {host} {port}
断开复制命令
slaveof no one
查看主从关系,也可以从中查看复制偏移量
info replication
架构
一主一从
一个主节点一个从节点
一主多从
一个主节点多个从节点
树状多从
一个主节点多个从节点,从节点也有多个从节点
注意:建议从节点不必过多,减少从节点对主节点的压力,从节点只读
复制原理
偏移量
原理
replica连接master,会发送psync命令发送他们的旧主服务器复制ID和它们处理的偏移量,master可以只发送所需的增量部分(master会先写入复制缓存区,再从复制缓存区到replica节点 复制缓存区默认只有1M),如果主缓冲区没有足够的积压,或者如果副本引用不在已知的历史记录(复制ID),则会全量复制
全量复制:master启动后台生成RDB文件。同时他开始缓冲从客户端接收到的所有新命令。后台保存完成后master将数据库文件传输到replica,replica保存到磁盘然后加载到内存中
注:复制分为全量复制和部分复制,master会优先部分复制,如果发现没有达到部分复制要求才会实现完全同步
主从复制 master关闭持久化问题
假设我们设置一个master ,和两个replica ,replica 从master 复制
master崩溃,如果没有开启持久化,当他自动重启后,master节点的数据是空数据
如果这时replica 同步复制master ,master节点是空的,因此replica会将数据销毁
关闭master的持久性,则关闭master的自动重启,这样就必然会被 Redis Sentinel(高可用)检测到故障
建议:开启主动复制时,master和replica都开启持久化(replica为什么也要开启了?因为如果从节点数据没有,就会重新同步主节点会增加主节点压力)
注: Redis Sentinel(高可用) 在master快速重启有可能检测不到