redis主从复制的原理及实现

 更新时间:2023年08月22日 09:43:15   作者:淘淘桃  
Redis主从复制是一种数据同步机制,它通过将一个Redis实例的数据复制到其他Redis,本文主要介绍了redis主从复制的原理及实现,具有一定的参考价值,感兴趣的可以了解一下

redis的四种模式:单例模式;主从模式;哨兵模式,集群模式 

一、主从模式

单例模式虽然操作简单,但是不具备高可用

缺点:

  • 单点的宕机引来的服务的灾难、数据丢失
  • 单点服务器内存瓶颈,无法无限纵向扩容

解决办法:

单节点宕机,可以由其他节点暂时接替,宕机的慢慢排查,也就是主从模式

 优点

有了主从,提高了Redis整体的可用性,当主节点(master)挂了,可以把从节点(slave)手动升级为主节点继续服务。 

缺点

master挂了整个Redis将失去写操作的能力,仅具备读操作,需要运维半夜爬起来手动升级,中间的请求失败数据丢失无法容忍。

解决办法

可以有一种方式自动升级slave为master      ------【哨兵模式】

1.1主从复制

从一台Redis服务器的数据(主节点master),复制到其他Redis服务器(从节点slave)。数据复制单向,只能由主节点到从节点,master可读可写,slave只可读不可写;默认每台Redis服务器都是主节点,从节点需要在配置文件中单独配置,才会从默认的主节点变成从节点。一个主节点可以有0个或多个从节点,但每个从节点只能有一个主节点。

1.1.1 复制原理

slave第一次连接master,一定会执行一次全量复制
全量复制数据量过大,会造成很大的网络开销,消耗CPU/内存/硬盘IO
增量复制用于处理在主从复制中因网络等数据丢失的场景,当slave再次连接上master,并且就是原来的master,如果条件允许,master补发数据给slave,补发数据量小,避免全量复制的开销(到底能不能复制还要看offset和buffer的情况)
如果slave再次连上的master是新选举的master,那么只能进行全量复制
早期的redis只有全量复制,增量复制是对全量复制的重大优化,尽量采用2.8以上版本

1.1.1.1 全量复制

  • slave给master发一个sync同步命令
  • master通过bgsave命令fork子进程,持久化生成RDB文件
  • master通过网络将RDB文件传给slave
  • slave清空老数据,载入新的RDB文件,此时slave阻塞,无法响应客户端,专心复制

1.1.1.2 增量复制

  • 主从节点各自维护自己的复制偏移量offset,主节点写入命令时,offset=offset+命令字节长度;从节点收到主节点命令也会相应增加自己的offset,并同步给主节点。主节点同时维护自己的offset和从节点的offset,以此来判断主从节点数据是否一致。
  • 主节点指令记录在本地buffer(缓冲区),异步将buffer同步给从节点
  • 若网络不好,同步速度慢了,buffer满了就会从头开始覆盖前面的内容,于是无法增量复制,必须全量复制

 # 主从原理
1. 副本库通过slaveof 127.0.0.1 6379命令,连接主库,并发送SYNC给主库 
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的

# 主库是否要开启持久化(一般情况要开启)
如果不开有可能,主库重启操作,造成所有主从数据丢失!

1.2 读写分离 ;  

大部分情况都是读操作,将读操作放在从节点,写操作放在主节点,减缓服务器压力;同时一些执行耗时比较久的操作也可以放在一台从节点完成,例如keys、sort。(什么时候连主节点写,什么时候连从节点读,由客户端自己控制)

最低配:一主二从,当主节点宕机后,其中一个从节点升级为主节点,还能剩一个从节点。

1.3 主要作用

  • 数据冗余:热备份,持久化另一种方式
  • 故障恢复:master宕机,快速升级slave为master
  • 读写分离:master写,slave,提高服务器负载能力,同时可以根据需求添加slave
  • 负载均衡:配合读写分离,读多写少场景,多个slave分担负载,大大提高并发
  • 高可用基石:是实现哨兵和集群的基础
     

二、主从的搭建具体操作         

# 前置条件1 :至少需要两台机器--》在一台机器运行两个redis实例
# 前置条件2:辅助配置(主从数据一致性配置)
min-slaves-to-write 1
min-slaves-max-lag 3
#那么在从服务器的数量少于1个,或者三个从服务器的延迟(lag)值都大于或等于3秒时,主服务器将拒绝执行写命令
# 方式一:
# 1 6380是从,6379是主
# 2 启动器两台实例
# 3 搭建主从关系
	-在从库上:slaveof ip port
  slaveof 127.0.0.1 6379
# 4 断开主从关系
	-在从库上:slaveof no one
# 方式二:配置文件方式
# 在从库的配置文件中:
slaveof 127.0.0.1 6379
slave-read-only yes
# 使用info查看主从关系

到此这篇关于redis主从复制的原理及实现的文章就介绍到这了,更多相关redis主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis使用布隆过滤器解决缓存雪崩的问题

    Redis使用布隆过滤器解决缓存雪崩的问题

    布隆过滤器可以帮助我们解决Redis缓存雪崩的问题,那什么是布隆过滤器、布隆过滤器又是如何使用如何解决缓存雪崩的问题的,让我们带着这一系列的问题去详细了解布隆过滤器,感兴趣的小伙伴跟着小编一起来看看吧
    2024-02-02
  • redis热key问题怎样解决

    redis热key问题怎样解决

    这篇文章主要介绍了redis热key问题怎样解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Redis BloomFilter实例讲解

    Redis BloomFilter实例讲解

    这篇文章主要介绍了Redis BloomFilter实例。BloomFilter不需要存储key,节省空间,在某些对保密要求非常严格的场合有优势。想要进一步了解BloomFilter运用实例的小伙伴可以了解一下这篇文章
    2021-09-09
  • redis 主从哨兵模式实现一主二从

    redis 主从哨兵模式实现一主二从

    本文主要介绍了redis 主从哨兵模式实现一主二从,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • redis击穿现象如何防止

    redis击穿现象如何防止

    本文主要介绍了redis击穿现象如何防止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 详解在Redis在Centos7上的安装部署

    详解在Redis在Centos7上的安装部署

    Redis是一种高级key-value数据库。这篇文章主要介绍了详解在Redis在Centos7上的安装部署,有兴趣的可以了解一下。
    2016-12-12
  • 基于session Redis实现登录

    基于session Redis实现登录

    这篇文章主要介绍了基于session Redis实现登录的相关资料,需要的朋友可以参考下
    2023-10-10
  • Redis数据库分布式设计方案介绍

    Redis数据库分布式设计方案介绍

    大家好,本篇文章主要讲的是Redis数据库分布式设计方案介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • redis通过lua脚本,获取满足key pattern的所有值方式

    redis通过lua脚本,获取满足key pattern的所有值方式

    这篇文章主要介绍了redis通过lua脚本,获取满足key pattern的所有值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 一起raid数据恢复及回迁成功的案例

    一起raid数据恢复及回迁成功的案例

    这篇文章主要介绍了一起raid数据恢复及回迁成功的案例,需要的朋友可以参考下
    2017-04-04

最新评论