Consul 引导和DNS
在本章中,我们将讨论以下组件在Consul中的使用方式:
- 自动引导
- 手动引导
- 使用DNS转发
- DNS缓存
现在让我们详细讨论每个组件。
自动引导
引导是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集群组成的Consul集群。
有两种方法可以进行手动引导
- 在2个节点上运行命令:在节点B和节点C上,您可以执行以下操作−
$ consul join <Node A Address>
- 运行命令在超过1个节点上 –
$ consul join <Node B Address> <Node C Address>
使用DNS转发
DNS服务由 端口53 提供。可以使用 BIND、dnsmasq和iptables 来进行DNS转发。默认情况下,Consul代理在端口8600上运行一个DNS服务器。通过向Consul代理的DNS服务器提交DNS请求,您可以获取运行您感兴趣的服务的节点的IP地址。
Consul DNS接口通过 SRV记录 提供了关于服务的端口信息。如果不在代码中手动添加逻辑,您通常只能获取您查询的服务的IP地址信息(即A记录)。
最佳的选择是具有多个运行本地Consul代理的BIND服务器。BIND服务器收到的任何查询都将被转发到其本地的Consul代理DNS服务器。
使用Bind
我们可以使用Bind函数来进行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 以“0 TTL”(生存时间)值提供所有的DNS结果。这样可以防止任何缓存。然而,由于TTL的值,可以设置允许Consul下游的DNS结果被缓存。较高的TTL值减少了Consul服务器上的查询次数,并加快客户端的查询速度,但代价是结果变得越来越陈旧。
为此,我们将使用以下方法进行DNS缓存 −
$ sudo apt-get install dnsmasq
输出结果如下所示:
现在,我们可以进行一个非常简单的配置 –
$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul
我们在这里所做的只是指定由位于127.0.0.1端口8600上的DNS服务器处理的Consul服务的DNS请求。除非你更改了Consul的默认设置,否则这应该可以工作。
通常情况下,应使用以下命令。
$ dig @127.0.0.1 -p 8600 web.service.consul
使用 Dnsmasq ,您应该使用以下命令。
$ dig web.service.consul
输出结果如下图所示。