使用 jedis 客户端从春季开始的 aws Redis 集群

Posted

技术标签:

【中文标题】使用 jedis 客户端从春季开始的 aws Redis 集群【英文标题】:aws Redis cluster from spring using jedis client 【发布时间】:2015-11-24 19:35:40 【问题描述】:

我已经使用 jedis 将 redis 集成到我的 spring web 应用程序中(redis 支持 AWS 弹性缓存)。使用单个 jedis 连接工厂写入和读取单个节点可以正常工作。

我现在需要将它扩展到一个集群,以便写入主节点并从辅助节点读取。即,如果一个发生故障,那么 AWS 会自动进行复制,在这种情况下,我将连接的主机名将发生变化。

如何读取出现的新节点?

如何从 spring 容器(我的意思是 XML 文件)连接到这个?

请任何人提出有用的建议,以实现上述方案。

我将不胜感激任何可能有助于解决上述问题的链接或代码。

到目前为止,我正在使用一个连接工厂,使用 jedis 和 redis 模板进行操作。

【问题讨论】:

嗨,你能分享一下spring boot中的代码吗?对我来说,AWS redis 上的连接仍然被拒绝 【参考方案1】:

您无需做任何事情,AWS ElastiCache 将处理故障转移。

您有一个包含两个节点(主节点和副本节点)的 redis 集群。如果主节点发生故障,则会自动故障转移到副本节点。 故障转移发生在复制组节点 DNS 级别

您的应用程序连接到复制组节点而不是直接连接到主节点 url/ip 非常重要

您可以在中找到复制组端点 ElastiCache -> 复制组 -> (选择您的复制组)在底部有 节点组详细信息 主要终点 例如 myReplicationGroup.8asdas.ng.0001.use1.cache.amazonaws.com:6379

在故障转移的情况下,会有一些停机时间。根据我的经验,不到 1 分钟。

故障节点恢复后,如果您启用了多可用区,它可能会成为辅助节点并保持这种状态

【讨论】:

【参考方案2】:

当任何节点出现故障时,一切都在发生,无需您的任何干预。您也不需要为此故障转移编写任何代码。您所要做的就是使用 Redis Elasticache 集群的 DNS 名称,而不是其 IP。 例如,假设您有 1 个主设备和 2 个从设备。当主服务器宕机时,新的从服务器将自动被选为主服务器,AWS 将更改主服务器的 DNS 以指向成为新主服务器的从服务器 IP。它还将旋转一个新的从属设备,替换转换为主设备的从属设备,并更新从属设备的 DNS 记录以指向新的 IP 地址。所以你不需要担心任何事情,因为主机名保持不变,只有它们后面的 IP 会改变。在这里您可以找到更多关于幕后发生的事情的详细信息:Auto Failover for Amazon ElastiCache for Redis

【讨论】:

嗨,感谢您的快速回复,所以现在我如何连接 aws 集群,因为我有多个端点,现在我选择了多个连接工厂,或者任何其他连接集群的方式都很好 您只能连接到主端点,因此它将获取所有读写请求。如果您还想使用从属设备进行读取请求,我认为您需要使用具有多个连接字符串的绝地池:github.com/xetorthio/jedis/wiki/Getting-started 嗨,您能解释一下如何在春季绝地池配置中使用多个端点 (AWS) 或任何具有多个连接的循环。

以上是关于使用 jedis 客户端从春季开始的 aws Redis 集群的主要内容,如果未能解决你的问题,请参考以下文章

春季启动的aws-java sdk依赖问题

(二)连接Redis,Lettuce与Jedis客户端

redis的java客户端之jedis

Redis14--jedis实现主从模式。

春季启动运行Angular2

从Redis集中检索数据