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

时间:2014-12-12 16:06:41

标签: redis failover amazon-elasticache

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

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

现在假设主节点(主节点)在us-east-1b中失败。

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

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

如果我还缺少其他任何东西,我会很感激您的建议/信息。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用的是ElastiCache,您应该使用" Primary Endpoint"由AWS提供。

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

我不知道为什么你有这样的设计,似乎你只想写给主人,但总是从奴隶那里读。 对于HA代理部分,您应该使用"读取端点"对所有3个redis节点进行TCP检查。 在haproxy中,您可以检查端点是否为SLAVE,如果是,您的haproxy应该将流量重定向到该端点。

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

除了"自动重新连接",由于AWS正在使用Route53 DNS进行故障转移,因此某些lib将不再执行NS查找,这意味着DNS仍然指向OLD ip,这是老主人。

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