Redis主从架构同步原理

主从复制概述

有了AOF和RDB,如果Redis发生了宕机,它们可以分别通过回放日志和重新读入RDB文件的方式恢复数据,从而保证尽量少丢失数据,提升可靠性。但是如果Redis实例宕机了,就无法提供服务了。

既然⼀台宕机了⽆法提供服务,那多台呢?是不是就可以解决了。Redis 提供了主从模式,通过主从复制,将数据冗余⼀份复制到其他 Redis 服务器。

前者称为主节点 (master),后者称为从节点 (slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台 Redis 服务器都是主节点;且⼀个主节点可以有多个从节点 (或没有从节点),但⼀个从节点只能有⼀个主节点。

Redis读写分离

多实例保存同一份数据,这么多副本,它们之间的数据如何保持一致呢?数据读写操作可以发给所有的实例吗?

实际上,Redis提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。

  • 读操作:主库、从库都可以接收;

  • 写操作:首先到主库执行,然后,主库将写操作同步给从库。

image-20240428222607797

我们可以假设主从库都可以执⾏写指令,假如对同⼀份数据分别修改了多次,每次修改发送到不同的主从实例上,就导致是实例的副本数据不⼀致了。如果为了保证数据⼀致,Redis 需要加锁,协调多个实例的修改,Redis 自然不能这么设计。

怎么搭建主从复制架构

可以通过 replicaof(Redis 5.0 之前使⽤ slaveof)命令形成主库和从库的关系。

在从节点开启主从复制,有 3 种⽅式:

  1. 配置⽂件在从服务器的配置⽂件中加⼊ replicaof <masterip> <masterport>

  2. 启动命令redis-server 启动命令后⾯加⼊ --replicaof <masterip> <masterport>

  3. 客户端命令启动多个 Redis 实例后,直接通过客户端执⾏命令: replicaof <masterip> <masterport> ,则该 Redis 实例成为从节点。⽐如假设现在有实例 1(171.18.88.1)、实例 2(171.18.88.2)和实例 3(171.18.88.3),在实例 2 和实例 3 上分别执⾏以下命令,实例 2 和 实例 3 就成为了实例 1 的从库,实例 1 成为 Master。

主从复制原理

复制分为三种情况:1. 第⼀次主从库全量复制;2. 主从正常运⾏期间的同步;3. 主从库间⽹络断开重连同步。

第⼀次主从库全量复制

主从库第⼀次复制过程⼤体可以分为 3 个阶段:连接建⽴阶段(即准备阶段)、主库同步数据到从库阶段、发送同步期间新写命令到从库阶段;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值