概念
以一台redis服务器作为主机(master/leader),将其数据复制到其他的redis服务器(从机/slave/follower)。数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。 主机负责写操作,从机负责读操作。大大减轻服务器压力。
主从复制的作用:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
一般来说,单个redis服务器是不能满足我们的需求的。
- 单个服务器可能会发生单点故障(宕机),而且服务器压力大
- 一般来说一个redis服务器不应该使用超过20g的内存
复制模拟
环境搭建
- 查看信息
info replication
- 复制多个配置文件,修改对应的属性
port 6380
pidfile /var/run/redis_6382.pid
logfile "/usr/local/bin/redis-log82.log"
dbfilename dump82.rdb
3. 设置从机
这里我们设置一主(80)二从(81.82)
redis默认都是主机,我们需要手动配置从机
slaveof host port # 认老大
slaveof no one # 从从机变为主机,在主机宕机后可让其他从机来连接 (手动)
这只是通过命令修改,是暂时的,我们需要修改配置文件中的replicaof
属性
此时我们在主机的所有都会被复制到从机,并且之后更改数据从机的数据也会跟着变
注意 主机可以写,从机只能读。主机的信息会被从机自动保存
- 主机宕机后,从机的主机依旧不变(非哨兵模式)
- 主机重启后,从机自动重连。
全量同步:
Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份
增量同步
Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
Redis主从同步策略
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。
当然,如果有需要,slave 在任何时候都可以发起全量同步。
redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。