更新时间:2025-11-24 GMT+08:00
分享

Proxy特性介绍

在Proxy集群中,Proxy组件负责路由转发、负载均衡与故障转移。客户端无需实现Redis Cluster的复杂逻辑,可像使用单机Redis一样操作Proxy集群,简化客户端开发。通过了解Proxy的路由机制和对特定命令的处理策略,能帮助你构建更高效的业务架构。

Proxy介绍

表1 功能介绍

Proxy能力

说明

兼容单机、主备、哨兵、集群等接入方式

Proxy集群兼容单机、主备、哨兵、集群等接入方式。

当标准(主备)架构无法支撑业务发展时,可考虑将标准架构的数据迁移至带有Proxy的集群架构,审视业务多Key命令使用情况及Proxy集群多Key拆分支持情况,判断是否需要改造,可大幅度降低业务改造成本。

路由转发

Proxy与后端的数据分片建立长连接,接受用户的请求后,转发至对应数据分片进行处理,完成后再由Proxy回包给客户端。

  • 对于单个Key的命令,Proxy会根据集群路由信息将Key发送给所属的数据分片slot进行处理。
  • 对于多个Key的命令,Proxy会将命令拆分成多个命令分别发送给对应的分片。

如遇到后端节点(shard)故障,数据节点HA后,Proxy会自动刷新路由信息。故障期间,Proxy会在5s内向故障节点命令重试,若5秒内重试失败,可能会报少量错误,客户端需要具备重试机制

支持多数据库(DB)

原生Redis Cluster集群不支持多DB,GeminiDB Redis Proxy支持多数据库(DB)功能,支持使用SELECT命令,默认为1000个DB。

Proxy集群接入说明

用户通过任意一个Proxy节点即可访问整个集群的数据。若直接连接某个Proxy节点,可能导致流量倾斜,甚至在节点故障时影响业务连续性。为保障高可用性,GeminiDB 为每个主备实例及Proxy集群实例配置了独享的负载均衡地址(ELB),推荐用户优先使用此方式接入。

  • ELB提供统一的集群访问入口,能够对每个Proxy节点进行健康监测。在节点发生故障时,ELB会自动将其从服务池中剔除,保证服务高可用。
  • ELB与每个Proxy节点的权重相同,默认采用“加权最少连接”策略,实现流量的均衡分配。ELB 配置流量分配策略请参考ELB配置流量分配策略分配流量
  • ELB为弹性规格,单个ELB最大可支持10Gbps带宽,单个Proxy集群带宽上限=min(ELB基准带宽,节点带宽 * 节点数)。

Proxy命令拆分规则

与原生Cluster集群相比,Proxy 集群能够对部分多Key命令进行拆分,将不同Key分配至对应的后端节点处理,并在Proxy层完成结果聚合后返回客户端,从而简化了多Key操作的使用逻辑。GeminiDB Redis Proxy集群目前支持以下可拆分命令。

  • Key管理相关:del、exists、unlink、touch。
  • String:mget、mset。
  • Set: sdiff、sdiffstore、sinter、sinterstore、sintercard、sunion、sunionstore。
  • Zset: zinter、zinterstore、zintercard、zunion、zunionstore、zdiff、zdiffstore、zrangestore。

支持对事务中多个命令的拆分,如果事务中包含了不支持拆分的多key命令,这些命令涉及的key需要添加hashtag。

推荐在Proxy集群中使用Hashtag,以保证多Key命令操作的原子性和性能。更多详细使用请参考:

Proxy集群连接数使用说明

在正常情况下,Proxy 通过与数据分片shard建立共享长连接来高效处理请求。当请求中包含以下命令时,Proxy将在对应的数据分片shard上创建额外的单独连接,无法复用Proxy到数据分片连接池中的长连接。因此,需要控制以下命令的使用,避免超过shard单分片连接数限制,导致proxy至shard连接建立失败。

阻塞类命令:BRPOP、BRPOPLPUSH、BLPOP、BZPOPMAX、BZPOPMIN、BLMPOP、BZMPOP、BLMOVE。

订阅命令:SUBSCRIBE、SSUBSCRIBE、PSUBSCRIBE。

相关文档