Redis_06_主从复制

主从复制

主从复制:将主节点的数据复制至从节点(异步复制)

1)从节点只能有一个主节点,但主节点可拥有多个从节点;

2)主从节点的内存相关配置必须完成相同(保证数据安全性);

3)数据的复制流是单向的(只能由主节点传至从节点);

4)主从节点连接默认无验证环境(均可访问);

//可通过参数“requirepass”参数指定密码验证

//若主节点开启密码验证,从节点需配置参数“masterauth”指定密码


主节点(Master):主从复制中被复制的数据Redis

1)Redis均默认本身为主节点(可通过参数和命令更改)

2)可配置参数“repl-disable-tcp-nodelay=yes或no”是否开启TCO_NODELAY

//开启后主节点发送数据的间隔时间由Linux内核决定(适用于高延迟网络环境)


从节点(Slvae):主从复制中接收复制数据的Redis

1)从节点可切换主节点,但切换前会先重置从节点(清空Redis数据);

2)当主从节点断开时,从节点中的数据仍保留(不能再获取新数据);

3)对于接收到的复制数据,从节点默认为只读模式;

//可通过参数“slave-read-only=yes或no”修改是否为只读模式


复制实现

主从复制实现分为:配置参数命令触发

1)两者均在从节点中执行(需提前得知主节点的IP和端口);

2)通过客户端连接从节点可执行相关操作;


(1)配置参数:slaveof 主节点IP 主节点端口

1)可在配置文件或启动Redis时指定该命令;

2)本质:周期性调用SLAVEOF命令


(2)命令触发:SLAVEOF 主节点IP 主节点端口

1)若该从节点已存在主节点,则会执行切主(切换主节点);

2)SLAVEOF命令属于异步命令,执行后直接返回(内部执行流程);


SLAVEOF命令执行流程:

1)从节点执行SLAVEOF命令(保存主节点信息);

2)从节点通过定时任务与主节点建立网络连接(Socket);

3)从节点发送ping验证Socket连接是否可用(主节点回复pong则可用);

4)主节点的验证从节点的masterauth参数是否相等requirepass参数;

5)若通过验证,主节点根据连接从节点选择全量复制或部分复制;

6)主节点持续将写命令发送至从节点(保持主从数据一致性);


如:SLAVEOF命令流程图
在这里插入图片描述
//“SLAVEOF NO ONE”命令断开主从复制


复制结构

一主一从

一主一从:仅有一个主节点和一个从节点

1)功能:支持高并发写命令,同时保证数据安全性

2)可只在从节点开启AOF,实现主节点的高性能同时保证数据安全

3)当主节点关闭后再次连接,需先断开主从复制(避免从节点被重置)

//也可在主节点故障修复后,将其作为从节点的从节点(从节点变为主节点)


如:一主一从复制结构
在这里插入图片描述


一主多从

一主多从(星形拓扑):仅有一个主节点,但有多个从节点

1)功能:实现读写分离(主节点负责写,从节点负责读)

2)当写命令较多时,会导致主节点频繁发送数据导致网络宽带不足


如:一主多从复制结构(不建议在多写环境下使用)
在这里插入图片描述

树状主从

树状主从(树状拓扑):只有一个绝对主节点

1)除绝对主节点外,其他节点可同时为主节点和从节点(根据参考对象)

2)功能:保证绝对主节点的性能(由中间复制层负责数据的处理)


如:树状主从复制结构
在这里插入图片描述


心跳机制

心跳机制:主从节点连接后保证连接的不中断


心跳机制的实现方式分为以下3种:

(1)主从节点分别模拟成对象的客户端尝试通信;


(2)主节点默认每隔10秒发送ping命令以判断是否连接;

1)可通过参数“repl-ping-slave-period”指定主节点的发送频率


(3)从节点默认每隔1秒发送“replconf ack 偏移量”命令至主节点

1)功能:检测网络状态和上报自身偏移量

2)主节点根据字段lag判断是否断开连接(超过60则断开);

//可通过参数“repl-timeout”指定lag可容忍的值


全量/部分复制

运行ID(run_id):Redis启动后动态分配40位的十六进制字符串

1)可通过运行ID识别每个Redis节点(具有唯一性);

2)Redis重启后其运行ID会改变(主节点运行ID改变会导致全量复制);

3)“debug reload”命令重新加载RDB运行Redis可保持其运行ID不变;

//该命令会阻塞主线程(删除本地RDB文件,并加载指定的)


偏移量:主从节点在复制过程中均记录已复制数据大小(字节长度)

1)从节点以秒为周期将自身的偏移量传至主节点(主节点保留);

2)可通过对比主从节点的偏移量判断数据是否一致和实现部分复制;

//主从节点的偏移量分别记录在字段master_repl_offset和字段slave_repl_offset


复制积压缓冲区(repl-back-log-buffer):主节点中用于存储最近复制数据

1)该缓冲区为固定长度的队列,默认为1MB;

2)主节点将写命令发送至从节点的同时,也会发送一份至该缓冲区;

3)可实现从节点断开连接后,实现部分复制以保持主从数据一致性;

//无法确定从节点一定能接收到最新数据,在该缓冲区中以作备份


全量复制

全量复制:主节点将节点中所有数据均发送至从节点

1)用于初次复制(数据量较大,主节点和网络开销很大);


如:主从节点执行全量复制流程
在这里插入图片描述


sync命令:实现全量复制

sync


部分复制

部分复制:主节点根据偏移量发送部分数据至从节点


如:从节点断开后,主从节点执行部分复制流程
在这里插入图片描述


psync命令:实现全量/部分复制

psync 主节点运行ID 从节点数据偏移量

1)若未指定主节点运行ID,则默认为“”;

2)若数据偏移量为“-1”,则达标执行全量复制;

3)若从节点第一次执行该命令,则偏移量强制为“-1”;


根据psync的参数和主节点自身偏移量有以下3种回复:

回复值说明
+FULLRESYNC 运行ID 偏移量执行全量复制
+CONTINUE执行部分复制
+ERR执行全量复制 (无法识别psync命令)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值