Consul 基础知识:什么是服务以及如何制作服务?

Consul Basics: What is a service and how to I make one?

我正在研究使用 Consul,但无法弄清楚 Consul defines as a 'service'(也就是它如何启动它/启动时传递给它的信息。)

我有一个工作集群,并在 Ubuntu 中编写了自定义 init.d 服务来尝试测试它,但是 init.d 服务在我将它们注册为使用 Consul 服务,也不要出现在网络上 UI。

本地领事服务器配置:

{
"bootstrap": true,
"server": true,
"log_level": "DEBUG",
"enable_syslog": true,
"datacenter": "dc1",
"data_dir": "data",
"acl_datacenter": "dc1",
"acl_default_policy": "allow",
"encrypt": "secret",
"acl_master_token": "secret",
"ui": true
}

用于尝试确定传递的信息的超级简单脚本:

echo "$@" > /home/user/file1
set > /home/user/file2

我的最终目标是简单地让 Consul 在给定节点(没有 Web 界面)上启动自定义脚本,将 Consul 服务定义中的信息传递给它(特别是 ID 和标签)。

我想我从根本上理解了一些错误,希望您能提供任何指导。

感谢阅读!

编辑:例如,他们展示了lower on that page如何在多个端口上运行两个redis服务器。服务是如何启动的以及这些信息是如何传递给它们的?

编辑 2:感谢您的回复,他们都帮助我更好地理解了这一点! (所以我只接受了第一个。)

Consul 与"starting services"无关,它只是为其他服务提供有关服务的信息。

Edit: For example, they show lower on that page how you can run two redis servers on multiple ports. How are the services being started and how is that information passed to them?

在这个例子中,两个 Redis 服务器都是在 Consul 之外启动的。例如,我们正在使用 supervisord fot 或通过 init.d

启动 Redis 作为服务

所以,它是如何工作的:

  1. 您已经自己启动了两个 Redis 实例(init.d 或 supervisord,无所谓)。
  2. 在 consul 中将此实例注册为服务。您可以通过 consul 目录中的配置 json 文件来完成。或者,您可以通过 API 注册它(例如,在本例中使用 curl 从终端注册)。你自己的服务,你可以自己注册,顺便说一句。

Consul 的"services" 是一种架构模式。它允许您构建一个动态的服务发现系统。此概念不应与其他服务概念混淆(在 OS 中,如 init.d 或任何其他)。 Consul的服务只是Consul服务目录中的一个虚拟实体。

思路如下:

  • 某些东西在 Consul 中注册一个服务条目,定义为(名称、地址、节点、健康检查)
  • 然后可以通过 Consul 的 DNS 中的名称或通过 REST API
  • 发现此服务条目
  • 服务可用性和状态通过运行健康检查
  • 控制

作为分布式系统的开发人员,您负责注册、注销服务并提供有效的健康检查例程。