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

最后更新于 2024 年 6 月 12 日

问题

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

答案

Redis Enterprise Cluster 的默认配置将客户端命令路由到正确分片的操作委托给代理(OSS 集群 API 配置被禁用)。OSS 集群 API 是一种端点发现机制,允许客户端了解集群拓扑并连接到托管受 CRUD 操作影响数据的 master 分片的 Redis Enterprise 节点。此配置的优点在于,当数据未存储在接收命令的同一节点上时,可以消除跨节点通信。不过,客户端库需要具备集群感知能力来处理路由逻辑。

性能方面的考量

在使用此类机制配置集群之前,通常值得考虑一些因素,例如

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

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

总的来说,有必要审查集群的大小,然后在此情况下采取必要的行动,其中可能包括配置 OSS 集群 API 以缩短访问时间和降低延迟。

OSS 集群 API 配置

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


请注意,在 Redis Enterprise 中使用 CLUSTER SLOTS(从 Redis OSS version 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 Cluster 的逻辑。一旦支持可用(例如,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 架构的信息。