Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster)优缺点分析

2023-05-16

Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析

Redis 的几种常见使用方式包括:

  • 单机模式
  • 主从模式
  • 哨兵模式(sentinel)
  • 集群模式(cluster)
  • 第三方模式

单机模式

Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。

优点:

  1. 架构简单,部署方便。
  2. 高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务。
  3. 高性能。

缺点:

  1. 不保证数据的可靠性。
  2. 在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但是仍然不能解决缓存预热问题,因此不适用于数据可靠性要求高的业务。
  3. 高性能受限于单核 CPU 的处理能力(Redis 是单线程机制),CPU 为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。也可以考虑用 Memcached 替代。

主从模式

Redis 采用主从(可以多从)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境配置,可以实现同时对外提供服务和读写分离策略。

优点:

  1. 高可靠性:一方面,采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行;另一方面,开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题。
  2. 读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。

缺点:

  1. 故障恢复复杂,如果没有 RedisHA 系统(需要开发),当主库节点出现故障时,需要手动将一个从节点晋升为主节点,同时需要通知业务方变更配置,并且需要让其它从库节点去复制新主库节点,整个过程需要人为干预,比较繁琐。
  2. 主库的写能力受到单机的限制,可以考虑分片。
  3. 主库的存储能力受到单机的限制,可以考虑 Pika。
  4. 原生复制的弊端在早期的版本中也会比较突出,如:Redis 复制中断后,Slave 会发起 psync,此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时可能会造成毫秒或秒级的卡顿;又由于 COW 机制,导致极端情况下的主库内存溢出,程序异常退出或宕机;主库节点生成备份文件导致服务器磁盘 IO 和 CPU(压缩)资源消耗;发送数 GB 大小的备份文件导致服务器出口带宽暴增,阻塞请求,建议升级到最新版本。

哨兵模式

Redis Sentinel 是 2.8 版本后推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel 集群和 Redis 数据集群。其中 Redis Sentinel 集群是由若干 Sentinel 节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel 的节点数量要满足 2n+1(n>=1)的奇数个。

优点:

  1. Redis Sentinel 集群部署简单。
  2. 能够解决 Redis 主从模式下的高可用切换问题。
  3. 很方便实现 Redis 数据节点的线形扩展,轻松突破 Redis 自身单线程瓶颈,可极大满足 Redis 大容量或高性能的业务需求。
  4. 可以实现一套 Sentinel 监控一组 Redis 数据节点或多组数据节点。

缺点:

  1. 部署相对 Redis 主从模式要复杂一些,原理理解更繁琐。
  2. 资源浪费,Redis 数据节点中 slave 节点作为备份节点不提供服务。
  3. Redis Sentinel 主要是针对 Redis 数据节点中的主节点的高可用切换,对 Redis 的数据节点做失败判定分为主观下线和客观下线两种,对于 Redis 的从节点有对节点做主观下线操作,并不执行故障转移。
  4. 不能解决读写分离问题,实现起来相对复杂。

集群模式

Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。

优点:

  1. 无中心架构。
  2. 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
  3. 可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除。
  4. 高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。
  5. 降低运维成本,提高系统的扩展性和可用性。

缺点:

  1. Client 实现复杂,驱动要求实现 Smart Client,缓存 slots mapping 信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。目前仅 JedisCluster 相对成熟,异常处理部分还不完善,比如常见的“max redirect exception”。
  2. 节点会因为某些原因发生阻塞(阻塞时间大于 clutser-node-timeout),被判断下线,这种 failover 是没有必要的。
  3. 数据通过异步复制,不保证数据的强一致性。
  4. 多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性较差,容易出现相互影响的情况。
  5. Slave 在集群中充当“冷备”,不能缓解读压力,当然可以通过 SDK 的合理设计来提高 Slave 资源的利用率。
  6. Key 批量操作限制,如使用 mset、mget 目前只支持具有相同 slot 值的 Key 执行批量操作。对于映射为不同 slot 值的 Key 由于 Keys 不支持跨 slot 查询,所以执行 mset、mget、sunion 等操作支持不友好。
  7. Key 事务操作支持有限,只支持多 key 在同一节点上的事务操作,当多个 Key 分布于不同的节点上时无法使用事务功能。
  8. Key 作为数据分区的最小粒度,不能将一个很大的键值对象如 hash、list 等映射到不同的节点。
  9. 不支持多数据库空间,单机下的 redis 可以支持到 16 个数据库,集群模式下只能使用 1 个数据库空间,即 db 0。
  10. 复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构。
  11. 避免产生 hot-key,导致主库节点成为系统的短板。
  12. 避免产生 big-key,导致网卡撑爆、慢查询等。
  13. 重试时间应该大于 cluster-node-time 时间。
  14. Redis Cluster 不建议使用 pipeline 和 multi-keys 操作,减少 max redirect 产生的场景。

优点多,缺点也多啊,事物都有双面性。

第三方模式

第三方模式比较少,已知的有 codis,但是好像有段时间没更新了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster)优缺点分析 的相关文章

  • Ubuntu 20.04 使用realmd加入AD域

    导读本文展示如何使用 realmd sssd将 Ubuntu 20 04加入到 Active Directory 域 本文还进一步为通过 AD 登录的域用户配置 sudo 规则 设置主机名和DNS 下面命令用来设置正确的主机名和dns服务器
  • Linux下合并文件

    导读 我们在先前的文章中介绍过 cat 命令 的使用 xff0c 了解到该 命令 用于获取文件内容并将其输出到屏幕或其他设备中 事实上 xff0c cat 命令的最初目的是连接文件 xff0c 所以我们可以用它来合并文件 我们在先前的文章中
  • 私有云有哪些优势?

    导读从RightScale 2017的报告中我们发现 xff0c 平均每家公司正在使用1 8个公有云和2 3个私有云 xff0c 同时正在准备使用1 8个公有云和2 1和私有云 从这项数据中我们不难发现 xff0c 公司对于私有云的使用程度
  • 通过sonic-ci-helper插件与Sonic平台结合实现多设备批量安装应用

    一 sonic ci helper 插件 sonic ci helper 是为对接Jenkins CI流程建设的小助手 下载地址 xff1a Sonic Download Center 两种安装方式 xff1a xff08 1 xff09
  • 在Centos8 中使用Stratis管理本地存储(二)

    本文介绍如何通过向现有Stratis池中添加新磁盘和添加缓存磁盘 下面将介绍添加 删除 快照等内容 系统环境 Centos8 向Stratis池中添加其他磁盘 在Stratis管理下 xff0c 将新的块设备添加到现有池非常容易 在上一篇文
  • ubuntu升级后,停留在tty1界面,进不去桌面

    ubuntu升级后 xff0c 提示输入用户名 密码 xff0c 出现以下界面 xff1a 无法显示桌面 输入startx xff0c 即可进入桌面
  • Debian 无法拉取 https 源 -----清华源Debind-stretch

    已经配置好的清华源tsinghua sources Debind stretch可以直接docker pull 无法拉取 https 源 Debian 的软件源配置文件是 etc apt sources list 将系统自带的该文件做个备份
  • 阿里云弹性计算资源

    1 弹性计算 1 1 轻量级应用服务器 针对轻量级应用而生 xff0c 共享容器化的服务器 xff0c 使用个人网站 中小企业网站 个人博客等应用 1 2 企业级服务器 xff08 ECS xff09 企业场景对业务稳定性的要求高 xff0
  • tensorflow2的GPU版本安装

    一 安装Anaconda与Python 详情直接参考我的这篇文章Anaconda安装与配置 二 安装CUDA 1 首先查看本机GPU对应的cuda版本 xff0c 如下图所示 xff0c 本机cuda版本为11 6 xff0c 后面选择的c
  • C#控件及常用设计整

    1 窗体 1 2 Label 控件 3 3 TextBox 控件 4 4 RichTextBox控件 5 5 NumericUpDown 控件 7 6 Button 控件 7 7 GroupBox 控件 7 8 RadioButton控件
  • 五、中断服务程序的流程

    1 中断服务程序的流程 保护现场 中断服务 恢复现场 中断返回 保护现场 xff1a 程序断点的保护 xff08 中断隐指令完成 xff09 xff0c 寄存器内容的保护 xff08 进栈指令 xff09 保护程序的断点 包含了两部分内容
  • 深度学习理论(李宏毅

    2022 再探宝可梦 数码宝贝分类器 浅谈机器学习原理 哔哩哔哩 bilibili more parameters easier to overfit why 但是怎么定这个有未知数的function呢 那通常假设你没有什么想法的话 往往你
  • CNN (吴恩达 2021

    week1 2 02 边缘检测例子 哔哩哔哩 bilibili 我们之前在说面部识别介绍过 xff0c 要识别面部 xff0c 都是从细微的边缘入手 xff0c 一层一层聚类 xff0c 最终实现人脸的识别 神经网络由浅层到深层 xff0c
  • Transformer(李宏毅2022)

    本讲内容 xff1a Seq2seq model xff0c 以Transformer模型为例 xff08 Encoder Decoder架构 xff09 应用 xff1a 语音辨识 语音翻译 语音合成 聊天机器人 NLP 文法剖析 mul
  • 【安全测试学习】基于bWAPP靶场,使用sqlmap实现脱库实战

    以上仅是个人学习安全测试整理 xff0c 如用于其它用途责任自负 xff01
  • 自监督模型 Self-supervised learning(李宏毅2022

    这个红色的怪物叫做ELMo 最早的self supervised learning model 作业四的模型也是个transformer xff0c 只有0 1个million 最早的是ELMo Cookie Monster等你来凑 x1f
  • 2021 神经网络压缩 (李宏毅

    首先 xff0c 为什么需要对神经网络模型进行压缩呢 xff1f 我们在之前的课程中介绍过很多大型的深度学习模型 xff0c 但当我们想要将这些大模型放在算力比较小的边缘设备或者其他IoT设备里面 xff0c 就需要对大模型进行压缩 Low
  • 李宏毅2023春季机器学习笔记 - 01生成AI(ChatGPT)

    一 引言 预设的知识储备要求 xff1a 数学 xff08 微积分 线性代数 机率 xff09 xff1b 编程能力 xff08 读写python xff09 这门课专注在 深度学习领域deep learning xff0c 事实上深度学习
  • 斯坦福21秋 实用机器学习(李沐)1. 课程介绍、数据获取、网页抓取、数据标注

    机器学习项目流程 1 把问题变成机器学习的问题 有的问题挺难的 xff1a 叠衣服 开车 有些看似难得机器学习却容易做 xff1a 翻译 在工业界 xff0c 很多问题多少会有一点自己特有的地方 xff0c 需要对整个ML算法 xff0c
  • python 语法糖【不断更新】

    1 得到a和b两个数的最大值 solution c 61 b a a gt b 测试 xff1a span class hljs prompt gt gt gt span a 61 span class hljs number 1 span

随机推荐