重新认识Redis之Redis集群搭建模式
时间 2021-01-19
标签
Redis
哨兵模式
Redis-Cluster
上篇文章也提到过, 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] 命令,主节点有三种响应:
- FULLRESYNC:第一次连接. 进行全量复制.
- CONTINUE:进行部分复制
- ERR:不支持 psync 命令,进行全量复制
2. 哨兵模式
3. Redis-Cluster模式