gpt4 book ai didi

php - Predis + Elasticache 自动故障转移配置

转载 作者:可可西里 更新时间:2023-11-01 11:37:08 25 4
gpt4 key购买 nike

我正在针对 AWS 上的 Elasticache 集群运行 Predis,该集群有一个写入主机和两个读取主机副本。 Predis 主从复制配置大致如下..

self::$client = new Predis\Client(
[
'tcp://' . REDIS_MASTER . '?alias=master',
'tcp://' . REDIS_SLAVE01 . '?alias=slave-01',
'tcp://' . REDIS_SLAVE02 . '?alias=slave-02'
],
['replication' => true]
);

我正在配置自动故障转移恢复。 Elasticache 通过提升一个只读从属节点和更新主节点主机名的 dns 记录来支持主节点故障恢复。在发生故障的情况下,Predis 应该不会使用上述配置,因为 master 的主机名不会改变。

但是,使用上面的配置,我会遇到问题。我会有效地从三节点集群转变为两节点集群,直到人为干预(或编写了一些英雄代码)。

为了阐明我的观点..失败前..

REDIS_MASTER -> node1
REDIS_SLAVE01 -> node2
REDIS_SLAVE01 -> node3

失败后...(节点 1 失败,节点 2 得到提升)

REDIS_MASTER -> node2
REDIS_SLAVE01 -> node2
REDIS_SLAVE01 -> node3

这在有限的时间内没问题,但理想情况下我希望它能自行解决。

恢复完成后,elasticache 会将 node1 恢复为只读副本。我希望它一可用就开始作为只读副本工作。

我在想我可以通过像这样配置 Predis 来解决这个问题..

self::$client = new Predis\Client(
[
'tcp://' . REDIS_MASTER . '?alias=master',
'tcp://' . REDIS_SLAVE01 . '?alias=slave-01',
'tcp://' . REDIS_SLAVE02 . '?alias=slave-02',
'tcp://' . REDIS_SLAVE03 . '?alias=slave-03'
],
['replication' => true]
);

...其中 REDIS_SLAVE03 指向与 REDIS_MASTER 相同的底层实例,但主机名在故障事件中不会更改。实际上,所有节点在任何时候都充当读取从属节点,并且在 Predis 不知情的情况下转移写入主节点的“指针”。

那么几个问题...

1) 当从站变得无响应时,Predis 的行为是什么?它会忽略该配置并将读取路由到其他响应从属设备吗?

2) 主 Redis 实例是否会获得双倍的读取操作? (想必答案是肯定的)

3) 这种方法是否存在我遗漏的缺陷?

4) 更好的主意?

感谢任何和所有建议。

最佳答案

这整个想法是有缺陷的。通过读取端点引用副本可以解决问题,因为 aws 也会在恢复过程中更新这些名称的 dns。

关于php - Predis + Elasticache 自动故障转移配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com