Redis Cluster 架构

发布时间 2023-12-19 10:21:40作者: 梅丹隆

一、架构类型

1、单机架构

image.png

2、分布式架构

image.png

二、Redis Cluster 架构

  1. 节点
    1. 集群模式:cluster-enable:yes
  2. meet
    1. image.png
    2. 所有节点共享消息
  3. 指派槽
    1. image.png
  4. 复制

1、Redis Cluster特性

  • 主从复制
  • 高可用
  • 分片

三、集群伸缩

1、原理

image.png
image.png
集群伸缩实际上是哈希槽和数据移动的过程

2、扩容

2.1、准备新节点

  1. 开启“集群模式”
  2. 配置和其他节点统一
  3. 启动后是孤儿节点
  4. image.png
redis-server conf/redis-6385.conf
redis-server conf/redis-6386.conf

2.2、加入集群

cluster meet ip 6385
cluster meet ip 6386
  • image.png
  • 观察加入后集群配置:cluster nodes
  • 扩容目的:
    • 为它迁移槽和数据实现扩容
    • 作为从节点负责故障转移

其他扩容方式:
官方工具:redis-trib.rb,可检测新节点是否为孤立节点。
image.png

2.3、迁移槽和数据

2.3.1、迁移槽计划

image.png
image.png

2.3.2、迁移数据

image.png
image.png
伪代码:
image.png

2.3.3、添加从节点

3、缩容

image.png

3.1、下线迁移槽

image.png

3.2、忘记节点

cluster forget {downNodeId}

image.png

  • 如果60s后,还有节点没有忘记这个下线节点,那么该节点的信息会再次在集群内传播
  • 故,忘记节点要统一在集群内所有节点执行

3.3、关闭节点

./redis-trib.rb del-node ip:port nodeid

4、客户端路由

4.1、moved重定向

image.png

4.1.1、槽命中:直接返回

image.png

4.1.2、槽不命中:moved异常

image.png

4.1.3、redis-cli举例

image.png

4.2、ASK重定向

  • slot迁移过程中客户端访问
  • key已经迁移到新的节点,需要使用ASK重定向解决

image.png

4.2.1、重定向解决

image.png

4.2.2、moved和ASK的区别

  1. 两者都是客户端重定向
  2. moved:槽已经确定迁移
  3. ASK:槽还在迁移中

4.3、smart客户端

4.3.1、smart客户端原理

追求性能(直连,取消代理)

  1. 从集群中选一个可运行的节点,使用cluster slots初始化槽和节点映射
  2. 将cluster slots的结果映射到本地,为每个节点创建JedisPool
  3. 准备执行命令

4.3.2、执行命令

image.png