Redis 集群架构

Redis 集群

是什么
Redis 集群是一种通过将多个 Redis 节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许 Redis 在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特点,Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨兵模式(Sentinel)和 Cluste r模式

Redis集群的作用和优势

  1. 高可用性
  2. 负载均衡
  3. 容灾恢复
  4. 数据分片
  5. 易于拓展

Master-Slave(主从复制模式)

工作原理
它通过将一个 Redis 节点(主节点)的数据复制到一个或多个其他 Redis 节点(从节点)来实现数据的冗余和备份

主节点负责处理客户端的写操作,同时从节点会实时同步主节点的数据。客户端可以从从节点读取数据,实现读写分离,提高系统性能

实现
在 redis.conf 添加 以下配置

# 从节点设置端口号6380
port 6380

# replicaof 主节点IP 主节点端口
replicaof 127.0.0.1 6379

或者直接在从节点 Redis 命令行执行

#replicaof 主节点地址 主节点端口
replicaof 127.0.0.1 6379

优点

  • 配置简单,易于实现
  • 实现数据冗余,提高数据可靠性
  • 读写分离,提高系统性能

缺点

  • 主节点故障时,需要手动切换到从节点,故障恢复时间较长
  • 主节点承担所有的写操作,可能成为性能瓶颈
  • 无法实现数据分片,受单节点内存限制

Redis Sentinel(哨兵模式)

解决的问题
高可用性解决方案,用于监控和管理Redis实例,确保系统的可用性和故障恢复能力

工作原理
主从复制,通过周期性检查Rrdis实力的状态来监控各个节点。当主节点不可用时,Sentinel会自动选取一个从节点晋升为新的主机点,保障系统的可用性

实现

  1. 配置主从复制:首先按照主从复制模式的配置方法,单间一个主从复制集群

  2. 配置哨兵节点:在哨兵节点上创建一个新的哨兵配置文件(如:sentinel.conf),并添加如下配置:

    # sentinel节点端口号
    port 26379
    
    # sentinel monitor 被监控主节点名称 主节点IP 主节点端口 quorum
    sentinel monitor mymaster 127.0.0.1 6379 2
    
    # sentinel down-after-milliseconds 被监控主节点名称 毫秒数
    sentinel down-after-milliseconds mymaster 60000
    
    # sentinel failover-timeout 被监控主节点名称 毫秒数
    sentinel failover-timeout mymaster 180000
    
  3. 启动哨兵节点:使用如下命令启动哨兵节点:

    redis> redis-sentinel /path/to/sentinel.conf
    
  4. 验证哨兵模式:手动停止主节点,观察哨兵节点是否自动选举出新的主节点,并通知其他从节点和客户端

特点

  1. 监控简单:Sentinel的配置相对简单,通过指定要监控的Redis实例即可启动监控
  2. 故障切换:当主节点发生故障时,Sentinel自动进行故障切换,将一个从节点晋升为新的主节点
  3. 适用场景适合小规模部署,对于中小型应用提供了简单而有效的高可用性方案。可用于管理Redis Cluster集群中的节点,监控节点状态、配置变更和故障恢复等,它可以自动检测并处理节点的故障,并确保集群的稳定运行。

优点

  1. 自动故障转移,提高系统的高可用性
  2. 具有主从复制的所有优点,如数据冗余和读写分离

缺点

  1. 配置和管理相对复杂
  2. 依然无法实现数据分片,受单节点内存限制

Redis Cluster

解决的问题
分布式解决方案,旨在解决单个Redis实例的容量和性能瓶颈

工作原理
采用了分布式架构,采用哈希槽(Hash Slot)的概念,将数据分为16384个槽位。每个节点负责管理一部分槽位,并在集群中进行数据交互和协调。客户端根据Key通过哈希算法(使用CRC16算法计算键的哈希值,然后对16384取模,得到槽位编号)来确定对应的槽位,然后负责该槽位的节点进行通信。实现高可用性和横向扩展自动分片节点故障切换是Cluster的两个关键特点。

实现

  1. 配置 Redis 节点:为每个节点创建 redis.conf 配置文件,并添加如下配置:
    # cluster节点端口号
    port 7001
    
    # 开启集群模式
    cluster-enabled yes
    
    # 节点超时时间
    cluster-node-timeout 15000
    

像这样的配置,一共需要创建6个,我们做一个三主三从的集群:

1. 启动 Redis 节点:使用如下命令启动6个节点:
redis> redis-server redis_7001.conf

2. 创建 Redis Cluster:使用 Redis 命令行工具执行如下命令创建 Cluster:
redis> redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

cluster-replicas 表示从节点的数量,1地表每个主节点都有1个从节点。
  1. 创建 Redis Cluster:使用 Redis 命令行工具执行如下命令创建 Cluster:

  2. 验证 Cluster 模式:向 Cluster 发送请求,观察请求是否正确路由到相应的节点

特点

  1. 分布式架构:Redis Cluster将数据分布在多个节点上,实现了负载均衡和横向扩展
  2. 自动分片:Cluster支持自动分片,实现了数据在各个节点的均匀分布
  3. 故障切换:当节点发生故障时,Cluster能够通过自动重新分配哈希槽(Hash Slot)和选举新的主节点来实现快速的故障切换
  4. 适用场景:Redis Cluster 适用于大规模部署,能够处理更大量级的数据和请求。比如:高并发读写(大规模数据存储),容量扩展,高可用性

优点

  1. 数据分片,实现大规模数据存储
  2. 负载均衡,提高系统吸能
  3. 自动故障转移,提高高可用性

缺点

  1. 配置和管理较复杂
  2. 一些复杂的多键操作可能受到限制

总结

  1. 主从模式:适用于数据备份和读写分离场景,配置简单,但在主节点故障时需要手动切换
  2. Sentinel(哨兵模式):在主从复制的基础上实现自动故障转移,提高高可用性,适用于高可用性要求较高的场景
  3. Cluster模式:通过数据分片和负载均衡实现大规模数据存储和高性能,适用于大规模数据存储和高性能要求场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值