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

通过节点连接到ElastiCache群集。js公司

阚亮
2023-03-14

我不知道如何通过N连接到AWS的ElastiCache Redisode.js.我已经成功地通过node_redisNPM连接到主主机(001),但是我无法使用ioredis的集群能力,因为显然ElastiCache没有实现CLUSTER命令。

我认为必须有另一种方法,但用于节点的AWS SDK只有用于管理ElastiCache的命令,而不是用于实际连接到ElastiCache的命令。

如果不使用集群,我担心如果主节点出现故障,我的应用程序将无法进行故障转移,因为我无法回退到其他集群。我还从我的Redis客户端收到错误,Error:READONLY您不能对只读从机进行写操作 当主控开关切换时,我不知道如何优雅地处理。

我想太多了吗?我发现很少有关于使用N个ElastiCache Redis集群的信息ode.js.


共有1个答案

司寇飞航
2023-03-14

我想多了。

Q: Amazon ElastiCache for Redis为节点故障提供了哪些选项?

Amazon ElastiCache for Redis将通过获取新的服务资源来修复节点,然后将重定向节点现有的DNS名称以指向新的服务资源。因此,Redis节点的DNS名称保持不变,但Redis节点的IP地址可能会随着时间的推移而变化。如果您有一个具有一个或多个读取副本的复制组并且启用了Multi-AZ,那么在主节点失败的情况下,ElastiCache将自动检测到失败,选择一个副本并将其提升为新的主节点。它还将传播DNS,以便您可以继续使用主endpoint,并且在提升后它将指向新提升的主节点。有关更多详细信息,请参阅此常见问题解答的Multi-AZ部分。当选择Redis复制选项并禁用Multi-AZ时,如果主节点失败,您将获得启动故障转移到读取副本节点的选项。故障转移目标可以在同一区域或另一个区域。要故障恢复到原始区域,请将原始区域中的读取副本提升为主要区域。您可以选择构建应用程序以强制Redis客户端库重新连接到修复的Redis服务器节点。这可能会有所帮助,因为某些Redis库在遇到通信错误或超时时会无限期停止使用服务器。

解决方案是只连接到主主节点,而不在客户端使用任何集群。当主节点出现故障时,将升级从节点并更新DNS,以便从节点成为主节点,而无需在客户端更改主机。

要防止发生故障切换时出现临时连接错误,可以向ioredis添加一些配置:

var client = new Redis(port, host, {
  retryStrategy: function (times) {
    log.warn('Lost Redis connection, reattempting');
    return Math.min(times * 2, 2000);
  },

  reconnectOnError: function (err) {
    if (err.message.slice(0, targetError.length) === 'READONLY') {
      // When a slave is promoted, we might get temporary errors saying
      // READONLY You can't write against a read only slave. Attempt to
      // reconnect if this happens.
      log.warn('ElastiCache returned a READONLY error, reconnecting');
      return 2; // `1` means reconnect, `2` means reconnect and resend
      // the failed command
    }
  }
});
 类似资料:
  • 我是AWS云前线和AWS的新手。我有一个Next.js(反应SSR框架)网站,我部署到AWS使用(https://github.com/serverless-nextjs/serverless-next.js)。然而,我也需要一些缓存的Web应用程序。我决定使用来自AWS的redis ElastiCache。我在AWS控制台上创建了一个redis弹性缓存集群。 我的尝试: 我设置了连接redis

  • 问题内容: 我们知道不建议在Amazon实例外部访问ElastiCache,因此我们仅在Amazon EC2实例内部进行尝试。 我们有一个具有9个节点的ElastiCache Redis集群 。当我们尝试使用常规redis实现连接到它时,它会引发一些Moved错误 根据@Miller尝试了重试策略方法。还尝试过使用不稳定和稳定(可怜的人)实现的RedisCluster。 这些实现均无作用。有什么建

  • 有可能从AWS Lambda函数连接到Redis ElastiCache集群吗? 我不知道是配置问题还是根本不可能。 更新(2016年2月11日):亚马逊为AWS Lambda推出了VPC。 https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-with-a-vpc-using-aws-lambda/

  • 我在从Lambda函数连接Elasticache时遇到问题,我已完成以下操作: 创建了一个新的安全组 Internet正常工作,我通过打开URL验证stackoverflow.com。但是Elasticache自动发现超时。是否需要进行任何额外的配置? 更新I将安全组的入站规则添加到端口6379,现在仍然超时。

  • 我已经从源代码安装和编译了Redis,并试图连接到Amazon ElastiCache(Redis)集群。 我可以毫无问题地连接到默认的本地主机,但尝试连接到AWSendpoint会导致无限的挂起。 默认情况下: 现在,这是连接到endpoint的尝试,来自AWS留档主题的副本: 这会无限挂起,而不会向stderr/stdout发出任何消息。 (请注意,这是一个endpoint名称示例;我已验证我

  • 我使用他们的web UI在EMR上创建了一个AWS Spark2.2集群(这里是新手)。我知道我需要连接到主节点,以便开始发出pyspark命令来学习Spark。但是,当我尝试连接到主节点时,它给我一个错误。在浏览了internet之后,我发现使用可能有助于调试正在进行的操作,但我找不到任何有用的信息。下面是我的ssh调试日志。 有人能指出这里的问题是什么吗?编辑:我已经尝试过将端口22添加到安全