Redis集群

224 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

1 单机,单节点,单实例的问题

  1. 单点故障
  2. 容量有限
  3. 压力

2对于以上问题,常见的解决方案

2.1 创建数据副本

image.png 可以给redis创建数据副本,并将读操作分发都各个节点,写操作还需到主节点执行。

此举可以解决,单点故障和压力的问题

2.2 业务分发

将不同的业务数据分别放在不同的redis上,主要解决压力和容量的问题 image.png

2.3 分发业务并创建数据副本

也可对上边的结构进行横向扩展,对每个redis节点创建数据副本。

image.png

2.4 按照优先级和逻辑继续拆分

此基础上若是某个业务量庞大,也可以将集群进行继续扩展

image.png 这就是AKF

X轴方向,是全量的镜像(集群)

Y轴方向,是一业务和功能的扩展(分库分表)

Z轴方向,按照优先级和逻辑的拆分(分布式)

3 数据一致性的问题

通过AKF,当数据一变多时,必然有数据一致性的问题。

3.1 同步方式同步数据

解决方案:

强一致性,所有节点阻塞等待,直到数据全部一致。但是会破坏可用性。当一个从节点宕机后,整个集群将不可用

image.png

3.2 异步方式同步数据

异步方式,但需要容忍会丢失一部分数据 image.png 这里就要牵扯到CAP原则:

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾

4 redis主从复制

redis集群使用异步的方式同步数据

image.png 主服务器:master

从服务器:slave

手动设置当前redis服务为slave。并指定master

REPLICAOF 127.0.0.1 6379

设置当前redis服务脱离集群

REPLICAOF no one

4.1 配置文件有关配置解读

4.1.1 replica-serve-stale-data

表示当一个服务作为slave启动时,同步master数据期间,是否提供服务。若为no,则阻塞等待同步完成后提供服务。

replica-serve-stale-data yes

4.1.2 replica-read-only

表示slave是否只读

replica-read-only yes

4.1.3 repl-diskless-sync

主从同步方式,

  • no:先存到磁盘为RDB文件,再通过网络传输给另一个redis
  • yes:直接通过网络IO将数据传输给另一个redis
repl-diskless-sync no

4.1.4 repl-backlog-size

redis描述自己更新内容的队列大小

若是一个slave宕机并重启,向master同步宕机期间的数据,根据自己已同步的数据的ID在队列里查询未能同步的数据并同步,若是自己保存的ID已经不再队列中,则全量同步,即master生成RDB文件,并发给这个slave,slave读取RDB文件。

repl-backlog-size 1mb

4.1.5 min-replicas-write

规定必须要几个slave同步成功

min-replicas-write 3

4.1.6 min-replicas-max-lag

如果一个从机的延迟值大于N,则拒绝写入数据

min-replicas-max-lag 10