在本章中,我们将讨论以下组件在 Consul 中的使用。

  • 自动启动
  • 手动启动
  • 使用 DNS 转发
  • DNS 缓存

现在让我们详细讨论每一个功能。

自动引导

引导是 Consul 的核心功能之一。当您首次安装 Consul 时,它会自动配置以检测、识别并加入它遇到的节点。在其集群形成过程中,自动引导是 Consul 的内置功能。要获取更多关于 Consul 的信息,最好的方法是使用以下命令:

$ sudo consul info

输出如下图所示。

Automatic Bootstrapping

此命令将显示 Consul 在实际工作场景中的实际工作情况。它将显示 Consul 中的 Raft 算法的工作。可以使用以下命令显示自动引导命令:

$ consul agent -server -data-dir = ”/tmp/consul” -bootstrap-expect 3

自动引导不能在 -dev 模式下完成。

此选项通知 Consul 预期的服务器节点数量,并在服务器可用时自动引导。

手动引导

手动引导是 Consul 的一个旧而有用的功能。实际上,在 Consul 的早期版本中,首次安装和使用 Consul 时必须手动引导。后来意识到不可能在不同时间执行此命令行操作,因此引入了自动引导。您始终可以使用以下命令手动引导。

在这种情况下,我们将假设要构建一个 3 节点的 Consul 集群。

手动引导有两种选择:

  • 在 2 个节点上运行命令:在 Node B 和 Node C 上可以执行以下操作:

$ consul join <Node A 地址>

  • 在 1 个节点上运行命令:

$ consul join <Node B 地址> <Node C 地址>

使用 DNS 转发

DNS 从 端口 53 提供服务。可以使用 BIND、dnsmasqiptables 进行 DNS 转发。默认情况下,Consul 代理运行一个监听端口 8600 的 DNS 服务器。通过向 Consul 代理的 DNS 服务器提交 DNS 请求,您可以获得运行您感兴趣的服务的节点的 IP 地址。

Consul DNS 接口通过 SRV 记录 提供服务的端口信息。在代码中无需手动添加逻辑,通常您只能获得服务查询的 IP 地址信息(即 A 记录)。

最佳选项是拥有多个 BIND 服务器,每个服务器本地运行一个 Consul 代理。任何收到的查询都会转发到其本地 Consul 代理 DNS 服务器。

使用 Bind

我们可以使用 Bind 功能进行 DNS 转发。可以使用以下命令完成。

$ sudo apt-get install bind9 bind9utils bind9-doc

输出如下图所示。

Bind function

让我们使用以下命令编辑 /etc/bind/named.conf 文件。

$ sudo vim /etc/bind/named.conf

在文件中,请在代码的最后一行下面添加以下行。

  1. options {
  2. directory "/var/cache/bind";
  3. recursion yes;
  4. allow-query { localhost; };
  5. forwarders {
  6. 8.8.8.8;
  7. 8.8.4.4;
  8. };
  9. dnssec-enable no;
  10. dnssec-validation no;
  11. auth-nxdomain no; # conform to RFC1035
  12. listen-on-v6 { any; };
  13. };
  14. include "/etc/bind/consul.conf";

输出如下图所示。

Bind command

您可以使用以下 Bind 命令配置 Consul。

$ sudo vim /etc/bind/consul.conf

创建文件时添加以下行:

  1. zone "consul" IN {
  2. type forward;
  3. forward only;
  4. forwarders { 127.0.0.1 port 8600; };
  5. };

现在您可以使用以下命令启动您的 Consul 代理。(记得也要重启 bind9 服务。)

  1. $ sudo service bind9 restart
  2. $ consul agent -server -bootstrap-expect 1 -data-dir = /tmp/consul -configdir = [路径]

需要将系统配置为将查询发送到本地 Consul 代理的 DNS 服务器。这可以通过更新系统上的 resolv.conf 文件以指向 127.0.0.1 来完成。在大多数情况下,需要将 Consul 配置为在端口 53 上运行。

您可以将以下信息添加到 /etc/resolv.conf:

nameserver 127.0.0.1

DNS 缓存

Consul 以 ‘0 TTL’(生存时间)值提供所有 DNS 结果。这可以防止任何缓存。然而,由于 TTL 值的存在,可以将其设置为允许 DNS 结果在 Consul 下游缓存。较高的 TTL 值减少了对 Consul 服务器的查询次数,并加快了客户端的查询速度,代价是结果可能会越来越陈旧。

为此,我们将使用以下方法进行 DNS 缓存:

$ sudo apt-get install dnsmasq

输出如下图所示。

dnsmasq

现在,我们可以进行一个非常简单的配置:

$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul

我们在这里所做的只是指定对于 Consul 服务的 DNS 请求,将由 127.0.0.1 上的 DNS 服务器在端口 8600 处理。除非您更改 Consul 的默认设置,否则这应该可以工作。

在正常情况下,应该使用以下命令:

$ dig @127.0.0.1 -p 8600 web.service.consul

对于 Dnsmasq,您应该使用以下命令:

$ dig web.service.consul

输出如下图所示。

web.service