Redis主从复制

本文介绍了Redis主从复制的概念及其实现方式,包括完整的数据复制和部分数据复制两种模式,并详细解释了这两种复制机制的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是主从复制

  Redis持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:


fd36c6cfc40adf5907b9d5016c3354b3d8c0e2c1


  说明:

  主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。

  主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。

  只有一个主redis,可以有多个从redis。

  主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求。

  一个redis可以即是主又是从,如下图:


b86a4678a82aa06a6c0d3880ecdb3a28a7552a60


2、主从配置

  redis配置

    无需特殊配置。

  从redis配置:

  修改从redis服务器上的redis.conf文件,添加slaveof 主redisip  主redis端口


6bd944248a3cf34f17441d0576c01d89f31d9eed


  上边的配置说明当前该从redis服务器所对应的主redis是192.168.101.3,端口是6379


3、主从复制过程

(1)完整复制

在redis2.8版本之前主从复制过程如下图:


f81d92e3754314cbbebb948f535cf878edfdcd49


  复制过程说明:

ãã1ã  slave 服务启动,slave 会建立和master 的连接,发送sync 命令。

  2、master启动一个后台进程将数据库快照保存到RDB文件中

  注意:此时如果生成RDB文件过程中存在写数据操作会导致RDB文件和当前主redis数据不一致,所以此时master 主进程会开始收集写命令并缓存起来。

  3、master 就发送RDB文件给slave

  4、slave 将文件保存到磁盘上,然后加载到内存恢复

  5、master把缓存的命令转发给slave

  注意:后续master 收到的写命令都会通过开始建立的连接发送给slave

  当master slave 的连接断开时slave 可以自动重新建立连接。如果master 同时收到多个slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有slave

 

  完整复制的问题:

  在redis2.8之前从redis每次同步都会从主redis中复制全部的数据,如果从redis是新创建的从主redis中复制全部的数据这是没有问题的,但是,如果当从redis停止运行,再启动时可能只有少部分数据和主redis不同步,此时启动redis仍然会从主redis复制全部数据,这样的性能肯定没有只复制那一小部分不同步的数据高。


(2)部分复制


ef3e61258d5a2bb3c42c768d5305e57590c34d0a

  部分复制说明:

  从机连接主机后,会主动发起 PSYNC(部分同步)命令,从机会提供 master的runid(机器标识,随机生成的一个串) 和 offset(数据偏移量,如果offset主从不一致则说明数据不同步),主机验证 runid 和 offset 是否有效, runid 相当于主机身份验证码,用来验证从机上一次连接的主机,如果runid验证未通过则,则进行全同步,如果验证通过则说明曾经同步过,根据offset同步部分数据。



85bc9a06ff590e31caf90c218979a787a497bcc6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值