我通过目录API http://127.0.0.1:8500/v1/catalog/register在领事馆注册外部服务,其负载如下:
{
"Datacenter": "dc1",
"Node": "pedram",
"Address": "www.google.com",
"Service": {
"ID": "google",
"Service": "google",
"Address": "www.google.com",
"Port": 80
},
"Check": {
"Node": "pedram",
"CheckID": "service:google",
"Status": "passing",
"ServiceID": "google",
"script": "curl www.google.com > /dev/null 2>&1",
"interval": "10s"
}
}
外部服务成功注册,我在注册服务列表中看到它,但过了一段时间它就消失了。它似乎已经自动取消注册。
我在-dev模式下运行consul。
问题是什么?
答案 0 :(得分:1)
我发现我应该在单独的节点中注册外部服务。我的应用程序的本地服务已在名为
的节点中注册{
"Datacenter": "dc1",
"Node": "newNode",
"Address": "www.google.com",
"Service": {
"ID": "google",
"Service": "google",
"Address": "www.google.com",
"Port": 80
},
"Check": {
"Node": "newNode",
"CheckID": "service:google",
"Status": "passing",
"ServiceID": "google"
}
}
当我在此节点中注册外部服务时,它们将被自动删除。
但是当我在新节点中注册我的外部服务时,所有新的外部服务都会被持久注册并准备好用作所有其他本地服务。
我的新有效载荷如下:
XCOPY
答案 1 :(得分:1)
这是例外行为。在领事Anti-Entropy docs
中如果目录中存在代理不知道的任何服务或检查,它们将被自动删除以使目录反映该代理的适当服务和运行状况信息集。领事将代理人的状态视为权威;如果座席和目录视图之间有任何差异,将始终使用座席本地视图。
在您的设置中,主机“ pedram”中的代理不知道服务注册。因此反熵策略会删除该服务。
答案 2 :(得分:0)
除了测试/玩游戏外,你不应该使用-dev模式。为了您的健康检查,我建议您不要使用"script": "curl www.google.com > /dev/null 2>&1",
相反,我建议使用http健康检查:
"http": "https://www.google.com",
有关健康检查的更多信息,请访问:https://www.consul.io/docs/agent/checks.html
此外,如果可以,您应该转移到HTTPS(在端口443上)。
它也可能有助于将其保存为.JSON文件,并让consul将其作为其启动的一部分阅读,因为我猜你希望这是一个长期运行的外部服务。您可以使用以下命令执行此操作:
/usr/local/bin/consul agent -config-dir=/etc/consul/consul.d
并且/etc/consul/consul.d/
中的每个.json文件都将作为其配置的一部分被读取。如果您更改文件,consul reload
将重新启动。
我会进行这些更改(不是在开发模式下运行等),看看问题是否仍然存在。我猜它不会。