使用 Consul DNS 故障转移 redis

Failover redis with Consul DNS

旧的redis master被关闭后,Consul如何解析新的redis master ip地址? 例如 : 我做了 while true; do dig redis.service.google.consul +short; sleep 2; done 回复是

192.168.248.43
192.168.248.41
192.168.248.42

192.168.248.41
192.168.248.42
192.168.248.43

...

我的期望是它只能解析为 192.168.248.41,因为它是主服务器。但是当master挂了,consul应该解析为192.168.248.42or 192.168.248.43,根据哪个是master

这是我在 192.168.248.41 中的领事服务配置

...
"services": [
        {
            "id": "redis01-xxx",
            "name": "redis",
            "tags": ["staging"],
            "address": "192.168.248.41",
            "port": 6379
        }
    ]
...

这是我在 192.168.248.42 中的领事服务配置

...
"services": [
        {
            "id": "redis01-xxx",
            "name": "redis",
            "tags": ["staging"],
            "address": "192.168.248.42",
            "port": 6379
        }
    ]
...

与 192.168.248.43 相同。

我的期待就是这个视频https://www.youtube.com/watch?v=VHpZ0o8P-Ts

当我挖掘时,consul 将只解析一个 IP 地址(master)。当 master 宕机时,redis sentinel 会选择新的 master。 consul 将解析为新的 redis master IP 地址。

我是 Consul 的新手。所以,如果有人能给出 consul 的简短示例和建议功能,我真的很感激,这样我就可以更快地掌握它。

当您使用相同的 "name" 注册多个服务时,它们将出现在 <name>.service.consul 下(当然如果它们是健康的)。在你的例子中,你没有为你的 redis 服务定义任何健康检查,这就是你在 DNS 查询响应中看到所有服务 IP 的原因。

对于您只需要 Redis 主机 IP 的用例,我建议使用 health check . I'm not familiar how one would query Redis, to find out if the node is the master. But you can use for an example script check 注册服务,您的脚本将 return 0,如果当前Redis 节点被 Redis sentinel 选举为 master。 Consul 会自动将该服务实例识别为健康的,您将在 dig redis.service.consul 查询 Consul DNS 接口时仅看到它的 IP。