主从复制
是指将一台Redis服务器的数据,复制到其他Redis服务器。前者称为主节点,后者称为从节点;数据复制是单向的,只能由主节点复制到从节点;主节点以写为主,从节点以读为主。
特点
1.使用异步复制,每次接收到写命令之后,先在内部写入数据,然后异步发送给从节点服务器
2.主从复制不阻塞主节点服务器。多个从服务器在进行初始同步时,主服务器仍然可以处理外界请求
3.主从复制不阻塞从节点服务器。当主节点服务器进行初始同步时,从节点服务器返回的是以前旧版本的数据
4.主从复制提高了redis服务的扩展性
5.使用主从复制可以为主节点服务器免除把数据写入磁盘的消耗,可以配置让主节点服务器不再将数据持久化到磁盘,而是通过连接让一个配置的从节点类型的Redis服务器及时将相关数据持久化到磁盘
作用
1.数据冗余:实现数据备份
2.故障恢复:当主节点出现问题,可以由从节点提供服务,实现快速故障恢复
3.负载均衡:在主从复制的基础上,配合读写分离;主节点复制写,从节点复制读,分担服务器负载
4.集群的基石:主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基
读写分离模式
读操作:主节点、从节点都可以接收
写操作:写入主节点,再将写操作同步到从节点
主从复制配置
首先安装3个redis(80、81、82),并启动(刚开始默认都是主节点)
进行配置从机,一主(80)二从(81,82),在配置文件中配置
replication 主机pi 主机端口 #配置主结点
masterauth password #主机的密码(没有密码不用写)
注意:真正的主从结点配置应该在配置文件中配置才是永久的,使用命令行配置重启数据库它就不见了。
主从复制原理
在2.8版本之前只有全量复制,而2.8版本后有全量和增量复制
全量复制
当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系,之后会按照三个阶段完成数据的第一次同步
阶段:
1、主从库间建立连接、协商同步的过程(主要是为全量复制做准备)
2、主库将所有数据同步给从库(从库收到数据后,在本地完成数据加载。这个过程依赖于内存快照生成的 RDB 文件)
3、主库会把第二阶段执行过程中新收到的写命令,再发送给从库(当主库完成 RDB 文件发送后,就会把此时 replication buffer 中的修改操作发给从库,从库再重新执行这些操作。这样一来,主从库就实现同步)
增量复制
如果主从库在命令传播时出现了网络闪断,那么,从库就会和主库重新进行一次全量复制,开销非常大。从 Redis 2.8 开始,网络断了之后,主从库会采用增量复制的方式继续同步
主从复制过程
- 从服务器连接主服务器,发送PSYNC命令。
- 当主服务器接收到PSYNC命令后,开始执行BGSAVE命令生成RDB快照文件并使用缓冲区记录此后执行的所有写命令。
- 当主服务器BGSAVE执行完后,向所有从服务器发送RDB快照文件,并在发送期间继续记录被执行的写命令。
- 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照至内存。
- 主服务器快照发送完毕后,开始向从服务器发送缓冲区中的写命令。
- 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令。
- 后期同步会先发送自己slave_repl_offset位置,只同步新增加的数据,不再全量同步
缺点
1.延迟:因为主节点需要广播数据给从节点,所以会有一定的网络传输延迟
2.容灾能力:如果所有从节点挂掉,那么这个集群的容灾能力就很差了
3.一致性问题:由于Redis的异步复制机制,当主节点数据有修改而还未同步到从节点时,此时主节点宕机,数据可能会出现不一致的情况
总之,Redis主从复制是一种非常流行的数据备份、读写分离和高可用方案,但也需要仔细考虑其适用场景和可能存在的缺陷