何时以及如何配置 OSS 集群 API?
最后更新于 2024 年 6 月 12 日
问题
何时以及如何使用 OSS 集群 API 配置?
答案
Redis Enterprise Cluster 的默认配置将客户端命令路由到正确分片的操作委托给代理(OSS 集群 API 配置被禁用)。OSS 集群 API 是一种端点发现机制,允许客户端了解集群拓扑并连接到托管受 CRUD 操作影响数据的 master 分片的 Redis Enterprise 节点。此配置的优点在于,当数据未存储在接收命令的同一节点上时,可以消除跨节点通信。不过,客户端库需要具备集群感知能力来处理路由逻辑。
性能方面的考量
在使用此类机制配置集群之前,通常值得考虑一些因素,例如
- 当前数据库是否存在任何性能问题?
- 在特定延迟下,预期的吞吐量是多少?
- 应用程序是否支持新的发现机制,或者是否需要进行更改?
- 网络带宽和有效载荷大小如何?
- 网络能否承受额外的跨节点通信负载?
首先,为了降低延迟和访问时间,将代理策略/分片放置策略更改为 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-py
和 Jedis
支持此配置),就可以配置多个 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 架构的信息。