Redis基础3-主从复制
Redis主从复制
主从复制简介
主从复制是为了达成高可用
-
为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服
务器上,连接在一起,并保证数据是同步的。 -
即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。
-
提供数据方:master
主服务器,主节点,主库
主客户端
- 接收数据方:slave
从服务器,从节点,从库
从客户端
- 需要解决的问题
数据同步
- 核心工作
master的数据复制到slave中
主从复制
-
主从复制即将master中的数据即时、有效的复制到slave中
-
一个master可以拥有多个slave,一个slave只对应一个master
-
职责
master:
写数据
执行写操作时,将出现变化的数据自动同步到slave
读数据(可忽略)
slave:
读数据
写数据(禁止)
主从复制的概念
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower) ; 数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
默认情况下,每台Redis服务器都是主节点 ;
且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制的作用
-
读写分离:主节点写,从节点读,提高服务器的读写负载能力
-
数据冗余︰主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
-
故障恢复︰当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复 ; 实际上是一种服务的冗余。
-
负载均衡︰在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载 ; 尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
-
高可用(集群)基石︰除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
基本操作(一主二从)
- 开启: daemonize yes
- 注释:bind 127.0.0.1
- 关闭:protected-mode no
- 指定端口: port 6379
- 指定当前工作目录: dir /myredis
- PID文件名默认: pidfile
- log文件名:logfile “/myredis/6379.log”
- requirepass密码
- dbfilename dump.rdb名字
- aof文件,appendfilename
- 从机
- 从机不能写入数据
-
预设的从机改换主机
SLAVEOF ip port
-
从机脱离主机
SLAVEOF no one
复制原理和工作流程
-
slve启动,同步初请
- slave启动成功连接到master后会发送一个sync命令
- slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除
-
首次连接,全量复制
-
master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),
同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,
master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
-
而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
-
-
心跳持续,保持通信
- 而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
-
进入平稳,增量复制
- 继续将新的所有收集到的修改命令自动依次传给
-
从机下线,重连续传
- master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,
缺点
-
复制延时,信号衰减
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
-
主机挂掉,从机只能读取数据
-
数据不一致
多个slave获取相同数据不同步
ter上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。 -
主机挂掉,从机只能读取数据
-
数据不一致
多个slave获取相同数据不同步