redis - 使用 ElastiCache Redis 上的单个复制组进行故障转移

标签 redis failover amazon-elasticache

我正在使用以下规范测试由 Redis 支持的 ElastiCache:

  • 使用 Redis 2.8,带多可用区
  • 单一复制组
  • 1个主节点在us-east-1b,1个从节点在us-east-1c,1个从节点在us-east-1d
  • 应用程序编写的部分是直接使用主节点的端点 (primary-node.use1.cache.amazonaws.com)
  • 应用程序中仅执行读取操作的部分指向在 HAProxy 中配置的自定义端点 (readonly.redis.mydomain.com),然后指向另外两个读取从属端点。 (readslave1.use1.cache.amazonaws.com 和 readslave2.use1.cache.amazonaws.com)

现在假设主节点 (master) 在 us-east-1b 中发生故障。

据我所知,如果主实例失败,我不必更改写入 Redis 的终点 url (primary-node.use1.cache.amazonaws.com),尽管从那里,我还有以下问题:

  • 我是否必须更改只读从站的端点名称?
  • 失踪的奴隶被添加到池中需要多长时间?

如果还有什么我遗漏的,我会很感激你的建议/信息。

谢谢!

最佳答案

如果您正在使用 ElastiCache,您应该使用 AWS 提供的“Primary EndpointThe”。

该端点实际上由 Route53 支持,如果主要(主)redis 出现故障,因为您启用了 MutliA-Z,它将自动故障转移到只读副本(从属)之一。 在这种情况下,您不需要修改您的 redis 端点。

我不知道你为什么要这样设计,好像你只想写master,但总是从slave读取。 对于 HA 代理部分,您应该包括对所有 3 个 redis 节点的 TCP 检查,使用它们的“读取端点” 在 haproxy 中,您可以检查端点是否为 SLAVE,如果是,您的 haproxy 应将流量重定向到该端点。

请注意,在应用层,如果您的 redis 驱动程序不支持自动重连,您的脚本将无法连接到新的主节点。

除了“自动重新连接”之外,由于 AWS 使用 Route53 DNS 进行故障转移,一些库将不会再次进行 NS 查找,这意味着 DNS 仍指向旧 ip,即旧主机。

使用HAproxy可以解决这个问题。

关于redis - 使用 ElastiCache Redis 上的单个复制组进行故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447528/

相关文章:

heroku - Resque失去与heroku上redis的连接

go - 为什么redigo返回ERR unknown command 'EVALSHA'

activemq master 不会放弃网络故障

java - ActiveMQ 集群可以有在不同传输协议(protocol)上运行的代理吗?

c# - 使用 C# 的 AWS Elasticache Redis

ruby-on-rails - 为什么 Rails 缓存会检查每个页面请求的 URL?

mysql - 规划数据库扩展和架构更改

java - 为 Java 客户端实现故障转移模式的最佳方法

amazon-web-services - 使用传输中加密连接到 AWS ElastiCache

PHP AWS ElastiCache 连接失败