Consul-Agent 架构 .. 升级到 0.8.1 后的节点 ID 问题 - 概念问题?
Consul-Agent architecture .. the node-id issue after upgrading to 0.8.1 - conceptual issue?
我不确定我的问题的根源究竟来自哪里,所以我试着解释一下大局。
简而言之,症状:将 consul 从 0.7.3 升级到 0.8.1 后,我的代理(在下面解释)由于节点 ID 重复而无法再连接到集群领导者(为什么会发生这种情况,解释了以下)。
我既不能用 https://www.consul.io/docs/agent/options.html#_disable_host_node_id 修复它,也不能完全理解,为什么我 运行 进入这个..这就是更大的图景甚至可能是不同问题的来源。
我有以下设置:
我运行一个应用程序堆栈,其中包含大约 8 个用于不同服务(不同的微服务、数据库类型等)的容器。
我每个堆栈使用一个 consul 服务器(是的,软件堆栈中的 consul 服务器 运行s,它有其原因,因为我需要它可以离线部署并且每个堆栈为自己而活)
consul-server 确实处理注册、服务发现以及 KV/configuration
Important/Questionable: 每个容器都有一个以 "consul agent -config-dir /etc/consul.d" 开头的领事代理 .. 连接这台服务器。配置看起来像这样 .. 包括其他文件,它们使用加密令牌/acl 令牌。不要怀疑 servicename() .. 它在映像构建期间被 m4 宏替换
客户端由八卦密钥和 ACL 密钥保护
重要:所有容器都在同一个硬件节点上
服务器配置看起来像这样,如果有的话很重要。此外,ACL 看起来像这样,并且 ACL-master 和客户端 token/gossip json 文件位于该配置文件夹中
抱歉,上面可能是 TLTR,但所有解释背后的原因是,这种多代理设置(或每个容器 1 个代理)。
我的理由:
我使用 tiller 来配置容器,所以一个 dimploy gem 将尝试通常连接到 localhost:8500 .. 以在不使 consul-configuration 非常复杂的情况下完成,我使用这个本地代理,然后将请求转发到实际服务器,从而处理所有 encryption-key/ACL 否定内容
我在服务器上使用了几个 'consul watch' 任务来触发重新配置,它们也在 localhost:8500 上 运行 没有任何额外配置
也就是说,我 运行 a 1-agent/container 的原因是,只要本地服务通过 127.0 连接,就可以简单地与 consul-backend 对话,而无需真正了解身份验证.0.1:8500(作为安全级别)
最后一题:
那个 multi-consul agent 真的是设计成那样使用的吗?我问的原因是,据我所知,我现在在启动 0.8.1 时遇到的节点 ID 重复问题来自 "the host" 相同,因此所有领事代理的硬件节点都相同.. 对吗?
是我的设计有误还是我需要从现在开始生成自己的节点 ID 一切正常?
似乎这个问题已被 Hashicorp 识别并在 https://github.com/hashicorp/consul/blob/master/CHANGELOG.md#085-june-27-2017 中解决,其中 -disable-host-node-id
默认设置为 true,因此不再从主机硬件生成节点 ID,而是一个随机的 uuid,它解决了我在同一物理硬件上有 运行 多个 consul 节点的问题
所以我部署的方式很好。
我不确定我的问题的根源究竟来自哪里,所以我试着解释一下大局。
简而言之,症状:将 consul 从 0.7.3 升级到 0.8.1 后,我的代理(在下面解释)由于节点 ID 重复而无法再连接到集群领导者(为什么会发生这种情况,解释了以下)。 我既不能用 https://www.consul.io/docs/agent/options.html#_disable_host_node_id 修复它,也不能完全理解,为什么我 运行 进入这个..这就是更大的图景甚至可能是不同问题的来源。
我有以下设置:
我运行一个应用程序堆栈,其中包含大约 8 个用于不同服务(不同的微服务、数据库类型等)的容器。
我每个堆栈使用一个 consul 服务器(是的,软件堆栈中的 consul 服务器 运行s,它有其原因,因为我需要它可以离线部署并且每个堆栈为自己而活)
consul-server 确实处理注册、服务发现以及 KV/configuration
Important/Questionable: 每个容器都有一个以 "consul agent -config-dir /etc/consul.d" 开头的领事代理 .. 连接这台服务器。配置看起来像这样 .. 包括其他文件,它们使用加密令牌/acl 令牌。不要怀疑 servicename() .. 它在映像构建期间被 m4 宏替换
客户端由八卦密钥和 ACL 密钥保护
重要:所有容器都在同一个硬件节点上
服务器配置看起来像这样,如果有的话很重要。此外,ACL 看起来像这样,并且 ACL-master 和客户端 token/gossip json 文件位于该配置文件夹中
抱歉,上面可能是 TLTR,但所有解释背后的原因是,这种多代理设置(或每个容器 1 个代理)。
我的理由:
我使用 tiller 来配置容器,所以一个 dimploy gem 将尝试通常连接到 localhost:8500 .. 以在不使 consul-configuration 非常复杂的情况下完成,我使用这个本地代理,然后将请求转发到实际服务器,从而处理所有 encryption-key/ACL 否定内容
我在服务器上使用了几个 'consul watch' 任务来触发重新配置,它们也在 localhost:8500 上 运行 没有任何额外配置
也就是说,我 运行 a 1-agent/container 的原因是,只要本地服务通过 127.0 连接,就可以简单地与 consul-backend 对话,而无需真正了解身份验证.0.1:8500(作为安全级别)
最后一题:
那个 multi-consul agent 真的是设计成那样使用的吗?我问的原因是,据我所知,我现在在启动 0.8.1 时遇到的节点 ID 重复问题来自 "the host" 相同,因此所有领事代理的硬件节点都相同.. 对吗?
是我的设计有误还是我需要从现在开始生成自己的节点 ID 一切正常?
似乎这个问题已被 Hashicorp 识别并在 https://github.com/hashicorp/consul/blob/master/CHANGELOG.md#085-june-27-2017 中解决,其中 -disable-host-node-id
默认设置为 true,因此不再从主机硬件生成节点 ID,而是一个随机的 uuid,它解决了我在同一物理硬件上有 运行 多个 consul 节点的问题
所以我部署的方式很好。