所有分类
  • 所有分类
  • 未分类

Redis集群–复制、哨兵、集群

简介

本文分享Redis集群部署的几种方式:复制、哨兵、集群。

复制

说明

分布式系统为了解决单点问题,通常会把数据复制多个副本部署到其他机器, 满足故障恢复和负载均衡等需求。

Redis也是如此, 它有复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,哨兵和集群都是在复制的基础上实现高可用的。 

参与复制的Redis实例划分为主节点(master) 和从节点(slave) 。默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。 

默认情况下,从节点使用slave-read-only=yes配置为只读模式。由于复制只能从主节点到从节点, 对于从节点的任何修改主节点都无法感知,修改从节点会造成主从数据不一致。因此建议线上不要修改从节点的只读模式。

拓扑

复制支持多种拓扑结构,如下:一主一从、 一主多从、 树状主从。如下:

1. 一主一从

一主一从结构是最简单的复制拓扑结构, 用于主节点出现宕机时从节点提供故障转移支持。

 2. 一主多从

对于读占比较大的场景, 可以把读命令发送到从节点来分担主节点压力。

3. 树状

从节点不但可以复制主节点数据, 同时可以作为其他从节点的主节点继续向下层复制。

通过引入复制中间层, 可以有效降低主节点负载和需要传送给从节点的数据量。 

哨兵(Redis Sentinel)

说明

Redis的主从复制模式下,一旦主节点故障,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,很不方便(需要人为干预)。可喜的是Redis从2.8开始提供了Redis Sentinel(哨兵)来解决这个问题。

当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。

Redis Sentinel是分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可
达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。

整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了Redis的高可用问题。

这里的分布式是指:Redis数据节点、Sentinel节点集合、客户端分布在多个物理节点的架构,不要与Redis Cluster分布式混淆。

Redis Sentinel相对于Redis主从复制只是多了若干Sentinel节点, 并没有针对Redis节点做特殊处理。

流程

以1个主节点、 2个从节点、 3个Sentinel节点组成的Redis Sentinel为例子进行说明。

1. 主节点出现故障, 此时两个从节点与主节点失去连接, 主从复制失败

2. 每个Sentinel节点通过定期监控发现主节点出现了故障。

3.多个Sentinel节点对主节点的故障达成一致, 选举出sentinel-3节点作为领导者负责故障转移。

4. Sentinel领导者节点执行了故障转移,是自动化完成的。

5、故障转移后整个Redis Sentinel的拓扑结构。

集群(Redis Cluster)

上边复制和哨兵,实际都是针对单个节点(一个主节点)的,Cluster是将多个主节点关联起来。 ​

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录