- Consul Tutorial
- Consul - Home
- Consul - Introduction
- Consul - Architecture
- Consul - Installation
- Consul - Working with Microservices
- Consul - Bootstrapping & DNS
- Consul - Querying Nodes
- Consul - Failover Events
- Consul - Using UI
- Consul - Using Consul on AWS
- Consul Useful Resources
- Consul - Quick Guide
- Consul - Useful Resources
- Consul - Discussion
Consul - 引导和 DNS
在本章中,我们将讨论如何在 Consul 中使用以下组件。
- 自动引导
- 手动引导
- 使用 DNS 转发
- DNS缓存
现在让我们详细讨论其中的每一个。
自动引导
Bootstrapping 是 Consul 的核心功能之一。当您第一次安装 consul 时,它会自动配置为检测、识别和加入它遇到的节点。在集群形成过程中,自动引导是 Consul 的内置功能。要获取有关 consul 的更多信息,最好的方法是使用以下命令 -
$ sudo consul info
输出将如以下屏幕截图所示。
该命令将展示consul在真实工作场景中的实际工作情况。它将显示在 Consul 中工作的 Raft 算法。可以使用以下命令显示自动引导命令 -
$ consul agent -server -data-dir = ”/tmp/consul” -bootstrap-expect 3
在 -dev 模式下无法完成自动引导。
该选项通知 Consul 预期的服务器节点数量,并在服务器可用时自动引导。
手动引导
手动引导是 Consul 的一个古老而有用的功能。实际上,在Consul的早期版本中,第一次安装和使用consul时必须手动完成引导。后来发现不能在不同时间执行这个命令行操作。因此,引入了自动引导。您始终可以使用以下命令手动使用引导。
在本例中,我们假设要构建一个 3 节点 consul 集群。
有两种选项可以进行手动引导
在 2 个节点上运行命令:在节点 B 和节点 C 上,您可以执行以下操作 -
$ consul join <Node A Address>
在 1 个节点上运行命令 -
$ consul join <Node B Address> <Node C Address>
使用 DNS 转发
DNS 通过端口 53提供服务。DNS 转发可以使用BIND、dnsmasq和iptables来完成。默认情况下,Consul代理运行一个监听8600端口的DNS服务器。通过向Consul代理的DNS服务器提交DNS请求,您可以获得运行您感兴趣的服务的节点的IP地址。
Consul DNS 接口通过SRV 记录提供服务的端口信息。如果不在代码中手动添加逻辑,您通常仅限于您正在查询的服务的 IP 地址信息(即记录)。
最好的选择是拥有多个 BIND 服务器,每个服务器在本地运行一个 Consul 代理。BIND 服务器收到的任何查询都将转发到其本地 Consul Agent DNS 服务器。
使用绑定
我们可以使用绑定功能来使用 DNS 转发。可以使用以下命令来完成。
$ sudo apt-get install bind9 bind9utils bind9-doc
输出将如以下屏幕截图所示。
让我们使用以下命令编辑 /etc/bind/named.conf 文件。
$ sudo vim /etc/bind/named.conf
在文件中,请在代码的最后一行下方添加以下行。
options { directory "/var/cache/bind"; recursion yes; allow-query { localhost; }; forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-enable no; dnssec-validation no; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; include "/etc/bind/consul.conf";
输出将如以下屏幕截图所示。
您可以使用以下 Bind 命令来配置 Consul。
$ sudo vim /etc/bind/consul.conf
创建文件时添加以下行 -
zone "consul" IN { type forward; forward only; forwarders { 127.0.0.1 port 8600; }; };
现在您可以使用以下命令开始运行 consul 代理。(记得还要重新启动bind9服务。)
$ sudo service bind9 restart $ consul agent -server -bootstrap-expect 1 -data-dir = /tmp/consul -configdir = [Path]
系统需要配置为向本地 Consul 代理的 DNS 服务器发送查询。这是通过更新系统上的resolv.conf文件以指向 127.0.0.1 来完成的。在大多数情况下,Consul 需要配置为在端口 53 上运行。
您可以将以下信息添加到/etc/resolv.conf:
nameserver 127.0.0.1
DNS缓存
Consul 为所有 DNS 结果提供“0 TTL”(生存时间)值。这可以防止任何缓存。然而,由于 TTL 值的原因,可以将其设置为允许 Consul 下游缓存 DNS 结果。较高的 TTL 值会减少 Consul 服务器上的查找次数并加快客户端的查找速度,但代价是结果越来越陈旧。
为此,我们将使用以下方法使用 DNS 缓存 -
$ sudo apt-get install dnsmasq
输出将如以下屏幕截图所示。
现在,我们可以做一个非常简单的配置 -
$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul
我们在这里所做的只是指定 consul 服务的 DNS 请求,这些请求将由端口 8600 上 127.0.0.1 的 DNS 服务器处理。除非您更改 consul 默认值,否则这应该可以工作。
正常情况下,应该使用以下命令。
$ dig @127.0.0.1 -p 8600 web.service.consul
对于Dnsmasq,您应该使用以下命令。
$ dig web.service.consul
输出将如以下屏幕截图所示。