redis为什么需要主从复制?

码界追光者
• 阅读 643
为什么要有主从复制,使redis具有高可用性!

多机情况下主从复制

同步文件和同步命令

同步文件

  • 客户端发送命令 slaveof 给从服务器
  • 从服务器发送 sync 命令给主服务器,主服务器收到以后,会执行bgsave命令 生成rdb文件,同时会使用缓冲区保存从现在开始执行的所有命令
  • 主服务器发送rdb文件给从服务器,从服务器同步状态,主服务器还会同步缓存区内的执行命令给从服务器

同步命令传播

当主从首次同步完全量数据后,此时主从数据是一致的,但是主服务器是可以一直接受命令的,所以主服务器执行完自己的命令,也需要发送相同的命令给从服务器的,来保证主从服务器的数据一致。

redis为什么需要主从复制?

旧版,新版复制功能对比

旧版复制流程(redis2.8版本之前)

redis为什么需要主从复制?

首先复制分两种:初次复制和断线复制

初次复制没什么好说的,就是利用从服务器发送sync命令 拿到rdb文件来同步自身的数据库数据,因为初次复制,从服务器是没有任何数据的,这也是最快最有效的方法。

断线复制:可以想象下,当在执行命令传播时,因为网络的原因,传播失败,从服务器重连主服务器的过程中,如果主服务器有新的命令需要执行时,那从服务器必然会丢失掉一些命令,也就是导致主从数据不一致的情况,而这时当从服务器重连成功后,就会向主服务器发送sync命令去重新同步主服务器的数据,这样就能达到主从服务器数据一致了。

弊端

每次主从断连,主服务器都要执行bgsave命令保存快照数据,非常耗内存,而从服务器也要恢复数据cpu也会上升。

redis为什么需要主从复制?

新版复制流程

主服务器内会有一个数据的偏移量,当发送传播命令时,偏移量会随着发送的数据字节增加,而从服务器接收到命令后,之成功后,也会将自身的偏移量增加,正常情况下主从服务器的偏移量是一致的。

最大的变化:断线重连后,会根据offset偏移量是不是处于复制积压缓冲区 ,runId判断是否是部分复制还是全量复制,减少复制的数据量。客户端发送的命令不是sync,而是psync.

部分同步功能的实现三个部分组成:

  1. 主从服务器的复制偏移量
  2. 主服务器的复制积压缓冲区(固定长度的先进先出队列)
  3. 服务器的运行id(runId)(服务器的唯一标识)

redis为什么需要主从复制?

redis为什么需要主从复制?

redis为什么需要主从复制?

主从建立连接的过程

redis为什么需要主从复制?

心跳检测

从服务器会默认以每秒的频率,向主服务器发送命令 replconf ack <reolication_offset>

reolication_offset是从服务器的复制偏移量

作用:

  1. 检测主从服务器的网络连接状态
  2. 辅助实现min-slaves
  3. 检查命令丢失

检测主从服务器的网络连接状态

命令 info replication 查看最近一次从服务器向主服务器发送 replconf ack命令距离现在过了多少秒

redis为什么需要主从复制?

辅助实现min-slaves

redis为什么需要主从复制?

检查命令丢失

redis为什么需要主从复制?

小记

  1. 为什么要读写分离?
避免资源竞争,增加开销
  1. 形成主从关系命令 (5.0之后,replicaof;5.0之前,salveof;)
  2. 主从级联模式分担全量复制时主库的压力

总结:学习主从连接过程,以及主服务器通过什么条件来判断进行部分复制还是全量复制。

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
Peter20 Peter20
4年前
redis的三种集群方式
redis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令;主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;从服务器收到
Stella981 Stella981
3年前
Redis主从自动切换原理
Redis主从自动切换原理复制原理1:当一个从数据库启动时,会向主数据库发送sync命令,2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。4:从数据库
Stella981 Stella981
3年前
Linux之sersync数据实时同步
sersync其实是利用inotify和rsync两种软件技术来实现数据实时同步功能的,inotify是用于监听sersync所在服务器上的文件变化,结合rsync软件来进行数据同步,将数据实时同步给客户端服务器。    工作过程:在同步主服务器上开启sersync,负责监听文件系统的变化,然后调用rsync命令把更新的文件同步到目标服务器上,主服务器上
Stella981 Stella981
3年前
Redis主从复制、读写分离
前言主从复制,即主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主。主要用于读写分离和容灾恢复一.如何使用1\.“一主二仆”1.1修改配置文件"一主二仆"是指一台主机,两台从机,我们在虚拟机中模拟这三台机器(即让re
Wesley13 Wesley13
3年前
mysql主从同步问题梳理
前言:MySQL主从复制故障机延迟原因有很多,之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常。以下梳理了几种主从同步中可能存在的问题:1)slave运行过慢不能与master同步,也就是MySQL数据库主从同步延迟MySQL数据库slave服务器延迟的现象是非常普遍的,MySQ
Stella981 Stella981
3年前
CanOpen学习笔记3
主机部分(Master):从机PDO发送发送或者接收需要SYNC信号,也就是从机接收到一个或者多个SYNC信号后发送一个PDO,也可以主机明确给出请求信号。SYNC同步信号产生设置:1、写0x40000080到index0x1005,subindex0位置(SYNCCOBID)。2、设置同步信号周期,在index0x1006,s
Stella981 Stella981
3年前
Linux之Redis
1、Sentinel哨兵    Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
Wesley13 Wesley13
3年前
MYSQL数据库之主从复制及读写分离
MYSQL数据库之主从复制及读写分离一、MySQL的主从复制1、概述  MySQLReplication俗称MySQLAB复制或主从复制,是MySQL官方推荐的数据同步技术。数据同步基本过程:从库会实时去读取主库的二进制日志文件,按照日志中记录对从座进行同样的操作,以达到数据同步效果。2、MySQLReplication优点
Wesley13 Wesley13
3年前
mysql数据库备份之主从同步配置
主从同步意义?主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据
Stella981 Stella981
3年前
Redis主从同步原理
Reids复制数据主要有2种场景:1\.从服务器从来第一次和当前主服务器连接,即初次复制2\.从服务器断线后重新和之前连接的主服务器恢复连接,即断线后重复制对于初次复制来说使用SYNC命令进行全量复制是合适高效的,但是对于断线后重复制来说效率就不太能接受了。举例来说:!Redis断线重连(https://oscimg.oschina.net/
Stella981 Stella981
3年前
Redis主从同步
主从架构主从架构设计的思路大概如下:只有一台主服务器,只负责写入数据,不负责读取数据。多台从服务器,不写入数据,只负责同步主服务器的数据,提供外部程序读取。主服务器写入数据后,将命令发送到从服务器,使主从数据同步。应用程序可以读取某一台从服务器的数据,负载均衡。当某些从服务器瘫痪时,系统影响不大