概念
是指将一台redis服务器的数据,复制到其他redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower)
- 数据的复制是单向的,只能从主节点到从节点
- Master一写为主,Salve以读为主
- 默认一个主节点可以有多个从节点(或者没有),但是一个从节点只能有一个主节点
为什么要使用主从复制
单机服务器的限制:
- 出现单点故障,会导致服务器不可用
- 在存在高使用的情况下,一个服务器压力大
- 容量瓶颈。redis本身是有容量限制的(256G,一般可用内存20G)
主从复制的作用:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
命令
- info replication 获取当前服务器的信息
- salveof 【host】【port】 设置为哪一个主机的从机(认老大)
- salveof no one 解除从机身份,将自己变为主机
环境配置
只需要配置从机,不用配置主机,因为redis默认启动的服务器,就是默认的主机
因为本人没有那么多服务器,就先搭一个为集群(在一台服务器上启动三个redis服务)
启动三个redis服务器
-
1、最低搭建要求:一主二从。所以需要开四个窗口,其中一个用作测试
-
2、要启动三个redis服务首先要复制一下三个配置文件
(复制的文件名一端口命名,容易区分)
-
3、配置文件主要改动四个位置:改动主要原因:(同一个服务器内不能有相同的文件)
-
3.1 port 端口不能重复,就改为6380和6381吧!
-
3.2 pidfile进程文件:文件名后面加一个端口
-
3.3 日志文件logfile
-
3.4 rdb文件dump.rdb.
-
-
4、接下来启动三个redis 服务:
-
注意:所有的daemonize都必须为yes
主从复制配置
- 1、启动完三个redis服务器之后,现在还没有主从之分,都是主机(可以info replication一下)
- 2、79端口就当做主机不需要配置,只需要配置其他两个
- 3、salveof 【host】【port】 设置为哪一个主机的从机(认老大)
(例:salveof 127.0.0.1 6379) - 接下来在info一下,就可以看到他变成从机了,且主机也有从机的连接数了
- 4、上面那种方式是通过命令配置的,但是但是在真实情况下不可能用这种方式,因为这种方式是暂时的,真实情况中是在配置文件中配置的,这种方式才是永久的
- 配置文件配置
提示
- 从机只读不能写(想写就会报错)
- 主机写入数据,从机也有有数据
- 当主机宕机或者出现其他问题而退出时,从机依旧是从机(依旧不能写,只能手动变为主机才能写)
- 当主机宕机或者出现其他问题而退出时,再次重连
(如果是命令行配置,那么重现连接后会变成主机,就获取不到数据了)
可以获取到数据,包括在从机退出的的时间内写入的数据,重连之后依旧会同步所有数据
主从复制工作过程
全量复制:
- slave服务器向master发送psync命令(此时发送的是psync ? -1),告诉master我需要同步数据了。
- 主服务器接收到SYNC命令后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令
- 生成完后,会将RDB文件发送给slave。
- slave接收到文件会载入RDB快照,并且将数据库状态变更为master在执行BGSAVE时的状态一致。
- master会发送保存在缓冲区里的所有写命令,告诉slave可以进行同步了
- slave执行这些写命令。
增量复制:
- Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制的过程主要是主服务器依次向从节点发送每执行的一个写命令,从服务器接收并执行收到的写命令
每一次从机从新连接主机都会执行一次全量复制
缺陷
上述工作原理都是有缺陷的
- 当主机宕机时,只能手动设置其他从机为主机
- 当其他从机设置为主机后,原来的主机修复后,被修改的从机已经不会再变回来
预告
上述模式在实际中都不会被应用,学习只是为了更好地学习下一个章节
主从配置和集群都是为了哨兵模式