重新认识Redis之Redis集群搭建模式

上篇文章也提到过, Redis 单节点存在单点故障问题, 为了解决单点问题,一般都需要对 Redis 配置从节点, 那么Redis集群模式有几种呢?
答案是三种,我们慢慢聊~

1. 主从复制

主从配置结合了哨兵模式能解决单点故障问题,提高Redis可用性.

从节点仅提供读操作, 主节点提供写操作. 对于读多写少的状况, 可给主节点配置多个从节点, 从而提高响应效率. 那么复制过程是什么样的呢?

1.1 复制过程

  • 从节点执行 slaveof[masterIP][masterPort],保存主节点信息。
  • 从节点中的定时任务发现主节点信息,建立和主节点的 Socket 连接。
  • 从节点发送 Ping 信号,主节点返回 Pong,两边能互相通信。
  • 连接建立后,主节点将所有数据发送给从节点(数据同步)。
  • 主节点把当前的数据同步给从节点后,便完成了复制的建立过程。
  • 接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性。

那么数据同步的详细过程是什么样的呢?

1.2 数据同步

Redis 2.8 之前使用 sync[runId][offset] 同步命令,Redis 2.8 之后使用 psync[runId][offset] 命令.
两者不同在于,Sync 命令仅支持全量复制过程,Psync 支持全量和部分复制.

1.2.1 专业术语

  • runId:每个 Redis 节点启动都会生成唯一的 uuid,每次 Redis 重启后,runId 都会发生变化。
  • offset:主节点和从节点都各自维护自己的主从复制偏移量 offset,当主节点有写入命令时,offset=offset+命令的字节长度。从节点在收到主节点发送的命令后,也会增加自己的 offset,并把自己的 offset 发送给主节点。
  • 这样,主节点同时保存自己的 offset 和从节点的 offset,通过对比 offset 来判断主从节点数据是否一致。
  • repl_backlog_size:保存在主节点上的一个固定长度的先进先出队列,默认大小是 1MB。

1.2.2 具体流程

在这里插入图片描述

  • 主节点发送数据给从节点过程中,主节点还会进行一些写操作,这时候的数据存储在复制缓冲区中。
  • 从节点同步主节点数据完成后,主节点将缓冲区的数据继续发送给从节点,用于部分复制。
  • 主节点响应写命令时,不但会把命名发送给从节点,还会写入复制积压缓冲区,用于复制命令丢失的数据补救。

上面是 Psync 的执行流程,从节点发送 psync[runId][offset] 命令,主节点有三种响应:

  1. FULLRESYNC:第一次连接. 进行全量复制.
  2. CONTINUE:进行部分复制
  3. ERR:不支持 psync 命令,进行全量复制

2. 哨兵模式

3. Redis-Cluster模式