Redis学习笔记二 主从复制

Redis 默认使用异步复制,低延迟、高性能,是绝大多数 Redis 用例的自然复制模式。但是,Redis 副本会异步确认它们定期与主服务器接收的数据量。因此,master 不会每次都等待副本处理命令,但是如果需要,它知道哪个副本已经处理了哪个命令。这允许具有可选的同步复制。

 
命令
从节点发起复制主节点命令   

注:已经复制切换也是一样用这个 ,切换会删除从节点当前所有数据

slaveof  {host} {port}
 
断开复制命令
slaveof no one
 
查看主从关系,也可以从中查看复制偏移量
info replication
 
 
架构
一主一从

   一个主节点一个从节点

一主多从

   一个主节点多个从节点

树状多从

   一个主节点多个从节点,从节点也有多个从节点

注意:建议从节点不必过多,减少从节点对主节点的压力,从节点只读

 

复制原理
偏移量
每个master使用一个偏移量,该偏移量随着它生成的要发送到副本的复制流而增加,用来副本同步指标。即使没有实际连接副本,复制偏移也会增加
 
原理

replica连接master,会发送psync命令发送他们的旧主服务器复制ID和它们处理的偏移量,master可以只发送所需的增量部分(master会先写入复制缓存区,再从复制缓存区到replica节点 复制缓存区默认只有1M),如果主缓冲区没有足够的积压,或者如果副本引用不在已知的历史记录(复制ID),则会全量复制

全量复制:master启动后台生成RDB文件。同时他开始缓冲从客户端接收到的所有新命令。后台保存完成后master将数据库文件传输到replica,replica保存到磁盘然后加载到内存中

                主从复制时需要注意当生成RDB文件超过6GB(6GB 至少需要60秒)以上时要格外小心 repl-timeout默认设置为60s 超过则导致全量复制失败
 

注:复制分为全量复制和部分复制,master会优先部分复制,如果发现没有达到部分复制要求才会实现完全同步

 
主从复制 master关闭持久化问题

假设我们设置一个master ,和两个replica  ,replica 从master 复制

master崩溃,如果没有开启持久化,当他自动重启后,master节点的数据是空数据

如果这时replica 同步复制master ,master节点是空的,因此replica会将数据销毁

 

关闭master的持久性,则关闭master的自动重启,这样就必然会被 Redis Sentinel(高可用)检测到故障

建议:开启主动复制时,master和replica都开启持久化(replica为什么也要开启了?因为如果从节点数据没有,就会重新同步主节点会增加主节点压力)

注: Redis Sentinel(高可用) 在master快速重启有可能检测不到

 

 

posted on 2022-07-28 10:14  ausions  阅读(24)  评论(0编辑  收藏  举报