Redis Enterprise 可以是单个 Redis 服务器数据库,也可以是集群。这使得 Redis Enterprise 数据库可以通过分片在多台服务器上进行水平扩展,或者通过复制数据来确保 Redis Enterprise 副本的高可用性。 分片是一种数据库分区类型,它将大型数据库分成更小、更快、更易于管理的部分。这些较小的部分称为数据分片。通过分片或分区,您不再局限于将数据存储在单台计算机的内存中。分片的另一个优势是能够利用多核的计算能力。
在 Redis Enterprise 中,集群是一组云实例、虚拟机/容器节点或裸金属服务器,允许您在一组共享的内存/存储池中创建任意数量的 Redis 数据库。 每当创建或删除新的数据库时,集群无需进行向上/向外(或向下/向内)伸缩。只有当达到预定义的限制阈值(如内存、CPU、网络和存储 IOPS)之一时,才会触发伸缩操作。
要创建分片集群,您需要首先指定分片数量。完成此操作后,您的数据将自动分片或分组,并放置在最优节点上。
在任何给定时间,一个 Redis Enterprise 集群节点可以包含零到数百个以下类型的 Redis 数据库
- 简单数据库,即单个主分片
- 高可用 (HA) 数据库,即一对主分片和副本分片
- 集群数据库,包含多个主分片,每个分片管理数据集的一个子集(或用 Redis 的术语来说,管理不同的“哈希槽”范围)
- HA 集群数据库,即多对主/副本分片
每个数据库可以以多种形式构建
- 基于 DRAM 的 Redis 数据库
- 基于 Flash 的 Redis 数据库,其中 Flash(SSD 或持久内存)用作 DRAM 扩展器
每个数据库可以通过多种方式访问
- 数据库端点: 只需将您的应用程序连接到数据库端点(完全限定域名上的唯一 URL 和端口),Redis Enterprise 将透明地处理所有伸缩和故障转移操作。
- Sentinel API: 使用 sentinel 协议连接到集群中的正确节点以访问您的数据库。
- OSS 集群 API: 使用集群 API 直接连接到集群的每个分片,无需任何额外跳数。
来自不同应用程序和用户的多个数据库可以在同一个 Redis Enterprise 集群和节点上运行,同时通过多租户实现完全隔离。
高可用性
灾难恢复和零停机时间的规划意味着在单个区域或多个区域中拥有 Redis Enterprise 集群的副本集。高可用性集群是一组主机,它们合并成一个单一系统以防止停机。
如果高可用性集群中的一台服务器发生故障,一旦检测到故障,关键任务应用程序会立即转移到另一台服务器。Redis Enterprise 将确保副本分片进程始终在不同的节点上创建,以实现高故障转移。如果节点发生故障,Redis Enterprise 将确保其他可用节点上的副本分片进程成为新的主分片。
高可用性集群将利用多个已集成的系统以及多个主节点和副本节点。因此,如果某个故障导致一个系统发生故障,可以有效地利用另一个系统来维持所用服务或应用程序的连续性。
无共享、线性可伸缩、多租户、对称架构
Redis Enterprise 集群
Redis Enterprise 集群建立在数据路径组件(即代理和分片)与控制/管理路径组件(即集群管理进程)完全分离的基础之上,这带来了许多显著优势
- 性能: 数据路径实体无需处理控制和管理职责。Redis Enterprise 架构确保所有处理周期都专用于服务用户请求,从而提高了整体性能。例如,Redis Enterprise 集群中的每个 Redis 分片都像一个独立的 Redis 实例一样工作。分片无需监控其他 Redis 实例,无需处理故障或分区事件,也无需了解正在管理哪些哈希槽。
- 可用性: 即使正在进行分片、重新分片和重新平衡,应用程序仍可继续访问其 Redis 数据库中的数据。无需手动更改即可确保数据访问。
- 安全性: Redis Enterprise 阻止通过常规 Redis API 执行配置命令。任何配置操作都必须通过遵循基于角色的授权控制的安全 Redis CLI、UI 或 API 接口进行。 基于代理的架构确保只能与每个分片建立经过认证的连接,并且 Redis 分片只能接收经过认证的请求。
- 可管理性: 数据库配置、配置更改、软件更新等都可以通过单个命令(通过 UI 或 API)以分布式方式完成,并且不会中断用户流量。
- 可伸缩性:数据库通过将数据集分布到多个节点、服务器和集群来实现水平伸缩。伸缩涉及将分区数据库实例强健地复制到多个节点。
集群组件
Redis Enterprise 集群基于对称架构构建,所有节点都包含以下组件
- Redis 分片: 具有主或副本角色的开源 Redis 集群或开源 Redis 实例,是数据库的一部分。
- 零延迟代理: 代理运行在集群的每个节点上,用 C 语言编写,基于直通、多线程、无锁无状态架构。代理处理以下主要功能
- 向应用程序/用户隐藏集群复杂性
- 维护数据库端点
- 请求转发
- 通过 SSL 管理数据加密
- 提供强大的基于客户端的 SSL 认证
- 通过管线化和连接管理实现 Redis 加速
- 集群管理器: 该组件包含一组分布式进程,它们共同管理整个集群生命周期。集群管理器实体与数据路径组件(代理和 Redis 分片)完全分离,并承担以下职责
- 数据库配置和取消配置
- 为实现最佳资源利用而进行的数据库配置和取消配置
- 自动伸缩以处理峰值工作负载
- 自动重新分片以保证高吞吐量、低延迟、实时性能
- 自动重新平衡以保证高吞吐量、低延迟、实时性能
- 资源管理,监控整个系统的健康状况
- 节点看门狗,监控在给定 Redis 节点上运行的所有进程,并触发分片故障事件
- 集群看门狗,负责 Redis 集群节点的健康状况,并触发节点故障事件
- 安全 REST API: 在集群模式下,Redis Enterprise 的所有管理和控制操作都通过一个专门的安全 API 执行,该 API 可抵御攻击,并提供更好的集群管理操作控制。此接口的主要优势之一是能够以非常高的速率配置和取消配置 Redis 资源,几乎不依赖于底层基础设施。这使得它非常适合基于微服务的架构。
为了优化 Redis Enterprise 集群中的资源,您应该:
- 采用可扩展到数千个数据库实例的平台,以支持跨不同工作负载的高并发量
- 使用多租户允许在一个集群中运行多个数据库端点,从而最大化基础设施利用率,实现端点级数据库优化,避免性能下降,并保障数据库安全
- 使用智能存储分层,使频繁使用的“热”数据保留在内存中,而不频繁使用的“冷”数据存储在闪存、SSD、旋转存储或磁带上,系统会自动平衡并管理数据物理存储的位置
- 在单独的租户、节点或集群上运行测试、开发和生产数据库,提供工作负载隔离,并支持独立的配置、管理和优化,以满足它们各种伸缩、性能和可用性要求
常见问题解答
如何使用 Redis 命令?
要启动 Redis 客户端,请打开终端并输入命令 redis-cli。这将连接到您的本地服务器,现在您可以运行任何命令。在上面的示例中,我们连接到在本地机器上运行的 Redis 服务器,并执行 PING 命令来检查服务器是否正在运行。
什么是线性可伸缩性?
线性可伸缩性意味着资源量的增加与数据库吞吐量成正比,并且以确定的方式增长。例如,将集群资源增加 50% 将使吞吐量增加 50%。Redis Enterprise 支持开源集群 API,通过简单地添加分片和节点,实现无限的线性伸缩。
Redis Enterprise Software 如何实现高可用性?
Redis Enterprise Software 提供不间断的高可用性,正常运行时间达到五个九 (99.999%)。通过使用无盘复制、即时故障检测以及跨机架、区域和地理位置的个位数秒故障转移等技术,Redis Enterprise 提供了高可用性,同时比竞争技术更具成本效益。Redis Enterprise Software 自动化集群管理,确保 Redis 集群和 Redis 客户端始终可用。Redis Enterprise Software 提供多种方法来确保数据一致性和可靠性,包括主-主数据复制、AoF(append on file)持久化以及快照。
Redis Labs 和 Redis 是同一家公司吗?
Redis Labs 于 2021 年更名为 Redis。我们更名是为了强调 Redis Ltd(公司)负责提供源代码可用的 Redis 和 Redis Enterprise。作为开源 Redis 的官方赞助商,Redis 理解它对开发者社区的重要性,并致力于确保开源 Redis 始终免费可用。Redis 还在开发市场上最具可伸缩性、可靠性和高可用性的内存中实时数据平台:Redis Enterprise Software 和 Redis Cloud。
想了解更多?
观看我们近期关于“购买 vs 构建:开源 Redis 与 Redis Enterprise 中的集群和配置”的技术演讲。
下一节 ► 真正的线性可伸缩性