当前位置: 首页 > 知识库问答 >
问题:

Azure Redis SSL集群+Lettuce Java(编辑:Lettuce version

拓拔浩阔
2023-03-14

我需要使用Azure Redis集群,有密码,有SSL,有流水线支持。

我尝试了lettuce(https://github.com/mp911de/lettuce/releases/tag/4.1.2.final),但目前遇到了一个无法单独解决的连接问题。

连接到一个Azure Redis集群(2*P4)不使用SSL但不使用SSL。另外,我可以使用SSL连接到单个节点,但不支持集群。问题是,当组合集群+SSL时,auth调用会超时(命令通过网络发送,但超时)。

没有SSL工作代码的集群如下所示:

RedisURI redisURI = RedisURI.Builder.redis(host, 6379)
  .withPassword(password)
  .build();
RedisClusterClient client = RedisClusterClient.create(redisURI);
RedisAdvancedClusterCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
RedisURI redisURI = RedisURI.Builder.redis(host, 6380)
  .withPassword(password)
  .withSsl(true)
  .build();
RedisClusterClient client = RedisClusterClient.create(redisURI);
RedisAdvancedClusterCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
2016-05-26 14:25:17,110 | TRACE | lettuce-nioEventLoop-3-1 | CommandEncoder | [/{CLIENT} -> {HOST}/{IP}:6380] Sent: *2
$4
AUTH
$44
{PASSWORD}
2016-05-26 14:26:17,134 | WARN  | main | ClusterTopologyRefresh | Cannot connect to RedisURI [host='***', port=6380]
com.lambdaworks.redis.RedisCommandTimeoutException: Command timed out
    at com.lambdaworks.redis.LettuceFutures.await(LettuceFutures.java:95)
    at com.lambdaworks.redis.LettuceFutures.awaitOrCancel(LettuceFutures.java:74)
    at com.lambdaworks.redis.AbstractRedisAsyncCommands.auth(AbstractRedisAsyncCommands.java:64)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connectToNode(RedisClusterClient.java:342)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connectToNode(RedisClusterClient.java:301)
    at com.lambdaworks.redis.cluster.ClusterTopologyRefresh.getConnections(ClusterTopologyRefresh.java:240)
    at com.lambdaworks.redis.cluster.ClusterTopologyRefresh.loadViews(ClusterTopologyRefresh.java:132)
    at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:468)
    at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:445)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterImpl(RedisClusterClient.java:359)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:244)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:231)
    at com.ubikod.ermin.reach.tools.Test.main(Test.java:20)
Exception in thread "main" com.lambdaworks.redis.RedisException: Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host='***', port=6380]]
    at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:471)
    at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:445)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterImpl(RedisClusterClient.java:359)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:244)
    at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:231)
    at com.ubikod.ermin.reach.tools.Test.main(Test.java:20)
RedisURI redisURI = RedisURI.Builder.redis(host, 6380)
  .withPassword(password)
  .withSsl(true)
  .build();
RedisClient client = RedisClient.create(redisURI);
RedisCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));

因此,这不仅仅是一个SSL问题,而是一个SSL+集群组合问题。我尝试使用withstarttls,禁用对等验证,提高超时时间,这些都没有运气。

你知道这是库bug还是Azure Redis bug吗?

共有1个答案

徐弘图
2023-03-14

我检查了Lettuce的wiki页面,并注意到该问题不是由库bug或Azure Redis bug引起的,不幸的是,只有Lettuce不支持带有SSL的Redis集群,请参阅下面wiki页面的Connecting to Redis使用字符串redisuri小节的内容。

lettuce只在常规Redis连接上支持SSL。不支持使用Redis Sentinel或Redis Cluster的主解析,因为这两种策略都将Redis地址提供给本机端口。Redis Sentinel和Redis Cluster无法提供SSL端口。

 类似资料:
  • 问题内容: 我对SQL(Server2008)的较低层次的了解是有限的,现在我们的DBA对此提出了挑战。让我解释一下这种情况:(我已经提到一些明显的陈述,希望我是对的,但是如果您发现有问题,请告诉我)。 我们有一张桌子,上面放着人们的“法院命令”。创建表(名称:CourtOrder)时,我的创建方式如下: 然后,我将非聚集索引应用于主键(以提高效率)。我的理由是,这是一个唯一字段(主键),应该像我

  • Cluster Cluster.EdsClusterConfig Cluster.OutlierDetection Cluster.LbSubsetConfig Cluster.LbSubsetConfig.LbSubsetSelector Cluster.LbSubsetConfig.LbSubsetFallbackPolicy (Enum) Cluster.RingHashLbConfig C

  • 一、负载均衡 负载均衡算法 转发实现 二、集群下的 Session 管理 Sticky Session Session Replication Session Server 一、负载均衡 集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点。 负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。 负载均衡器可以用来实现高可用以及伸缩性: 高可用:当某个节点故障

  • 集群为一组LBAgent转发节点的集合。 负载均衡集群是一组转发节点LBAgent的集合,一般情况下一个集群下配置两个LBAgent节点互为主备即可,同一集群下的LBAgent节点的VRRP路由ID必须相同。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “网络/负载均衡集群/集群” 菜单项,进入集群页面。 创建集群 该功能用于创建负载均衡集群。 单击列表上方 “新建” 按钮,弹出

  • 帮助用户快速搭建Kubernetes集群。 云管平台支持创建和纳管Kubernetes集群,目前支持以下纳管集群的方式。 基于 云联壹云 、Aliyun、AWS 平台的虚拟机创建 Kubernetes 集群。 导入已创建的集群,支持纳管 Kubernetes 集群和 OpenShift 集群。 Kubernetes集群是容器运行所需要的云资源的集合。一个Kubernetes集群由1~3个控制节点和

  • 集群章节帮助用户快速搭建集群,并帮助用户管理节点、命名空间以及RBAC授权管理等。 集群 帮助用户快速搭建Kubernetes集群。 节点 节点是Pod的实际运行环境。 存储类 存储类用于定义容器集群中的不同存储类型。 命名空间 命名空间用于逻辑上隔离Kubernetes集群中的资源。 角色 角色定义了对集群的指定命名空间下资源的权限。 集群角色 集群角色定义了对集群下资源的权限。 角色绑定 角色