教程 - 连接应用程序/服务发现

DC/OS 101 教程第 4 部分

IMPORTANT: Tutorials are intended to give you hands-on experience working with a limited set of DC/OS features with no implied or explicit warranty of any kind. None of the information provided—including sample scripts, commands, or applications—is officially supported by Mesosphere. You should not use this information in a production environment without independent testing and validation.

欢迎阅读 DC/OS 101 教程第 4 部分

先决条件

目的

本教程前一部分中的 app 使用 redis.marathon.l4lb.thisdcos.directory 作为连接 Redis 的地址,端口为 6379。由于 Redis 可能正在群集中的任何代理程序上运行,并且可能在不同的端口上运行,因此该地址如何解析为实际运行的 Redis 实例?

在本部分中,您将通过探索 DC/OS 中应用程序的不同选项,了解 DC/OS 服务发现。

服务发现

服务发现使应用程序能够不依赖于于其在群集中的运行位置进行寻址,这在应用程序可能出现故障并在不同主机上重新启动时尤其有用。

DC/OS 提供两种服务发现选项:

  1. Mesos-DNS
  2. 命名虚拟 IP。

通过 SSH 进入群集中的 Mesos 主节点,以查看这些不同的服务发现方法的工作方式:

dcos node ssh --master-proxy --leader

Mesos-DNS

Mesos-DNS 为每个任务分配 DNS 条目,这些条目可从群集中的任何节点解析。这些条目的命名模式为 task.scheduler.mesos

作业的默认调度程序为 Marathon,因此,Redis 服务的 Mesos-DNS 名称为 redis.marathon.mesos

我们来使用 dig 命令以检索地址记录(也称为 A 记录)。Dig 是一个命令行实用程序,用于查询 DNS 服务器。如果在没有参数的情况下使用,它将使用系统范围配置的 DNS 服务器进行查询,在 DC/OS 群集中将其配置为指向 Mesos-DNS:

dig redis.marathon.mesos

答案应与此响应类似:

  1. ;; ANSWER SECTION:
  2. redis.marathon.mesos. 60 IN A 10.0.0.43

响应告诉我们,在 10.0.0.43 处有一个 redis.marathon.mesos 服务实例。

A 记录仅包含有关主机的 IP 地址信息。若要连接到该服务,您还需要知道端口。为了实现这一操作,Mesos-DNS 还为每个包含端口号的 Marathon 应用程序分配服务或 SRV 记录。

使用以下 dig 命令访问 SRV 记录:

dig srv _redis._tcp.marathon.mesos

答案应与此响应类似:

  1. ;; ANSWER SECTION:
  2. _redis._tcp.marathon.mesos. 60 IN SRV 0 0 30585 redis-1y1hj-s1.marathon.mesos.
  3. ;; ADDITIONAL SECTION:
  4. redis-1y1hj-s1.marathon.mesos. 60 IN A 10.0.0.43

此输出告诉您 Redis 服务正在 10.0.0.43:30585 上运行

命名虚拟 IP

  • 命名 VIP 允许您将名称/端口对分配到应用程序,这意味着您可以使用可预测的端口为应用程序提供有意义的名称。当使用应用程序的多个实例时,它们还提供内置的负载均衡。 例如,您可以通过将以下内容添加到软件包定义中,将命名 VIP 分配给 Redis 服务:
  1. "VIP_0": "/redis:6379"

然后使用以下模式生成全名: vip-name.scheduler.l4lb.thisdcos.directory:vip-port

正如我们从示例 应用程序 中看到的,这是 Redis 包使用的机制,因此您可以在 redis.marathon.l4lb.thisdcos.directory:6379 从群集内部访问 Redis 服务。

结果

您知道如何使用服务发现从 DC/OS 群集中连接到您的应用程序,并了解了 DC/OS 中可用的两种服务发现机制。

深入研究

Mesos-DNS命名 VIP 之间有什么区别?

Mesos-DNS

Mesos-DNS 是在群集中查找应用程序的简单解决方案。虽然 DNS 受许多应用程序支持,但 Mesos-DNS 具有以下缺点:

  • DNS 缓存:应用程序有时会缓存 DNS 条目以提高效率,因此可能没有更新的地址信息(例如,在任务失败后)。
  • 您需要使用 SRV DNS 记录来检索有关已分配端口的信息。虽然应用程序通常了解 DNS A 记录,但并非所有应用程序都支持 SRV 记录。

命名 VIP

命名 VIP 使用智能算法对 IP 地址/端口对进行负载均衡,以确保与原始请求者相关的流量的最佳路由,并且还提供用于高性能的本地缓存层。它们还允许您为应用程序提供有意义的名称并选择特定端口。由于这些优于 Mesos-DNS 的优势,我们建议使用命名 VIP 作为 DC/OS 中默认的服务发现方法。