携手创作,共同成长!这是我参与「日新计划 8 月更文挑战」的第7天,点击查看活动详情

1. 主从复制

Redis主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性

1.1 主从模式

  1. 一主一从

Redis 主从复制与哨兵机制

  1. 一主多从

Redis 主从复制与哨兵机制

  1. 树状主从

Redis 主从复制与哨兵机制

1.2 主从复制原理

Redis的主从同步分为两种,分为全量同步和增量同步。

  • 从机第一次连接上主机是全量同步。
  • 断线重连很有可能触发全量同步也有可能是增量同步。

全量同步主要是借助RDB持久化快找我实现的。

增量同步就复杂一些:

服务器和从服务器会分别维护一个复制偏移量,主服务器每次向从服务器传播N个字节的数据时,就将自己的复制偏移量的值加上N,从服务器每次收到主服务器传播来的N个字节的数据时,就将自己的复制偏移量值加上N。

复制积压缓冲区是由主服务器维护一个固定长度(fixed-size)先进先出(FIFO)队列,默认大小是1MB。它主要的作用就是当主服务器进行命令传播时,不仅将命令发送给所有从服务器,还会将命令入队到复制积压缓冲区。如果主服务器向从服务器传播数据时发生断线,主服务器会将复制积压缓冲区偏移量的所有数据都发送给从服务器(发送的是断线之后的的数据),如果在断线重连的过程中,复制积压缓冲区存储的数据量不够,那么就会从AOF日志中读取需要的数据。

2. 哨兵模式

当主节点宕机时,为了系统的可用性,就需要选取一个从节点晋升为主节点,哨兵机制的出现就是为了解决这个难度。

哨兵节点有以下作用:

  • 监控(Monitoring): sentinel会不断检查Master和Slave是否运行正常。

  • 提醒(Notification): 当被监控的某个Redis节点出现问题时, sentinel 可以通过 API向管理员或者其他应用程序发送通知。

  • 自动故障转移(Automatic failover): 当Master不能正常操作时哨兵会开始一次故障转移。

具体的选举流程如下所示: