主从复制概述
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主机以写为主,从机以读为主,从而实现主从复制、读写分离。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
redis最大使用内存不应该超过20G。
主从复制的作用
主从复制的作用主要包括:
-
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
-
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
-
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
-
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础
如何使用主从复制
为了更直观的理解主从复制,在介绍其内部原理之前,先说明我们需要如何操作才能开启主从复制。
查看当前主机信息
搭建redis集群
复制配置文件
修改配置文件
复制三个配置文件,修改对应的配置信息
- 修改端口
- pid进程文件名称
- log日志文件名称
- dump.rdb文件名称
修改完成之后,启动redis三个服务,通过进程信息查看,启动成功:
默认情况下,每台Redis服务器都是主机,主从复制一般只配置从机 ;
建立从机
需要注意,主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情。
从节点开启主从复制,有3种方式:
(1)、配置文件
在从服务器的配置文件中加入:slaveof <masterip> <masterport>
(2)、启动命令
redis-server启动命令后加入 --slaveof <masterip> <masterport>
(3)、客户端命令
Redis服务器启动后,直接通过客户端执行命令:slaveof <masterip> <masterport>,则该Redis实例成为从节点。
上述3种方式是等效的,下面以客户端命令的方式为例,看一下当执行了slaveof后,Redis主节点和从节点的变化。
细节概述
- redis主从复制使用命令搭建,重启就会消失;采用配置文件配置,长久生效;
- redis主机可以写,从机不可以写,只能读;主机中所有的信息都会自动同步到从机中;
- 当主机断开连接,从机依旧可以读取到数据,但是没有写的操作了;如果主机突然恢复了,从机依旧可以获取到主机写进去的数据
- 如果使用命令行来配置主从,这个时候如果重启了,从机就会变成主机;如果变为从机,立马就会从主机中获取到信息;
主从复制原理
Slave启动成功后连接到master后发送一个sync同步命令
Master就收到命令,启动后台的存盘进程,同时收集所有接受到的用于修改数据集命令,在后台进程执行完毕后,Master讲传送整个数据文件集到Slave,并完成一次完全同步
全量复制:slave服务在接受到数据库文件数据后,将其存盘并加到内存中;
增量复制:Master继续讲新的所有收集到的修改命令一次传给Slave,完成同步;
但是只要重新连接Master,一次完全同步(全量复制)讲自动执行;我们数据一定可以在从机中看到
以上配置就是一主二从实现主从复制、读写分离;但是如果主机宕机或者掉了,那么redis就没有写的操作了;
给予以上情况的解决方案:
此时的MasterOrSalve依旧是从机,依旧无法执行写的操作;当主机宕机或者掉了的时候才充当主机
当主机宕机或者掉了之后,MasterOrSalve依旧是从机,想让它充当主机需要手动配置;
如果主机恢复了,当时MasterOrSalve依旧是主机,这个时候就需要重新配置了;