主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制作用
- 故障恢复:当主节点宕机,其他节点依然可以提供服务;
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:是哨兵和 cluster 实施的基础,是高可用的基石。
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
Redis主从节点如何保证数据一致性
为了保证副本数据的一致性,主从架构采用了读写分离的方式。
- 读操作:主、从库都可以执行;
- 写操作:主库先执行,之后将写操作同步到从库;
Redis读写分离,为了保证对同一份数据进行多次修改造成的数据不一致性,如果为了保证数据一致,Redis 需要加锁,协调多个实例的修改,Redis 自然不会这么干!
Redis主从工作原理
如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。当slave ping socket连接上Master且通过身份认证(如果从节点中设置了masterauth选项),将会开始进行数据同步阶段。
master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久