何时以及如何配置 OSS 集群 API?

上次更新时间:2024 年 6 月 12 日

问题

何时以及如何使用 OSS 集群 API 配置?

答案

Redis 企业集群的默认配置将命令从客户端路由到正确分片的操作委托给代理(OSS 集群 API 配置已禁用)。OSS 集群 API 是一种端点发现机制,允许客户端了解集群拓扑结构并连接到承载受 CRUD 操作影响的数据的主分片的 Redis 企业节点。这种配置的优点是,当数据未存储在接收命令的同一节点时,可以消除跨节点通信。但是,客户端库需要了解集群,才能处理路由逻辑。

关于性能的注意事项

在使用这种机制配置集群之前,通常值得进行一些先前的考虑,例如

  1. 当前数据库是否存在任何性能问题?
  2. 预期吞吐量是多少,延迟是多少?
  3. 应用程序是否支持新的发现机制,或者它是否需要更改?
  4. 网络带宽和有效负载大小如何?
  5. 网络能否承受额外的跨节点通信负载?

首先,为了降低延迟和访问时间,将代理策略/分片放置策略更改为 **所有主分片/稀疏** 可能足够好。然而,缺点是这可能会导致 **更多跨节点通信**,例如,从节点 A 上的代理到节点 B 上的分片。这些额外的网络跳跃可能会对平均延迟产生负面影响。因此,如果需要非常高的吞吐量以及相当激进的延迟要求,那么 **OSS 集群 API 将有助于避免这种跨节点通信**(代理策略/分片放置仍然是所有主分片/稀疏,但节点 A 上的代理只与节点 A 上的主分片通信,因为 **客户端已经知道哪个代理负责给定的键**)。

一般来说,审查集群的大小并在此情况下采取必要的措施是有意义的,这可能包括配置 OSS 集群 API 来减少访问时间和延迟。

OSS 集群 API 的配置

OSS 集群 API 的配置可以通过 **UI** 或使用 rladmin 工具来完成。配置正确的代理策略并启用 oss_cluster 参数。请参考官方文档中的 说明 来启用 OSS 集群 API。


请注意,在 Redis Enterprise 中使用 CLUSTER SLOTS(从 Redis OSS 版本 7 开始使用 CLUSTER SHARDS)默认情况下会公开支持 OSS 集群 API 的数据库的内部 IP。使用相关配置更改行为

rladmin> tune db db:<DB_ID> oss_cluster_api_preferred_ip_type external

客户端库和 OSS 集群 API

客户端库必须实现逻辑来处理使用 OSS 集群 API 支持配置的 Redis Enterprise 集群。一旦支持被授予(例如,redis-pyJedis 支持这种配置),就可以配置 **多个 IP 地址**,每个节点一个,来执行集群发现。这对于 **高可用性** 以及 **没有 DNS 解析可用** 的情况特别有用。可以使用 redis-py 客户端库按如下方式连接到集群

import redis
from redis.cluster import RedisCluster
from redis.cluster import ClusterNode

startup_nodes = [ClusterNode('10.10.1.15', 12000),
                ClusterNode('10.10.1.16', 12000),
                ClusterNode('10.10.1.17', 12000)]

rc = redis.RedisCluster(startup_nodes=startup_nodes, decode_responses=True)

print("Set: {}".format(rc.set("foo", "bar")))
print("Get: {}".format(rc.get("foo")))

参考资料

请参考 Redis Enterprise 文档以了解更多有关 Redis OSS 集群 API 架构 的信息。