Consul - Bootstrapping 和 DNS

在本章中,我们将讨论如何在Consul中使用以下组件.

  • 自动引导

  • 手动引导

  • 使用DNS转发

  • DNS缓存

现在让我们详细讨论每一个.

自动引导

引导是Consul的核心功能之一.当您第一次安装consul时,它会自动配置为检测,识别和加入它遇到的节点.在群集形成期间,自动引导是Consul的内置功能.要获得有关领事的更多信息,最好的方法是使用下面和下面的命令;

 
 $ sudo consul info

输出结果如下面的截图所示.

自动引导

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

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

无法在-dev模式下自动启动.

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

手动引导

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

在这种情况下,我们假设要构建一个3节点的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地址信息(即记录).

最佳选择是拥有多个BIND服务器每个人在本地运行Consul代理. BIND服务器收到的任何查询都将被转发到其本地Consul Agent DNS服务器.

使用绑定

我们可以使用绑定使用DNS转发功能.它可以通过使用以下命令来完成.

 
 $ sudo apt-get install bind9 bind9utils bind9-doc

输出结果如下面的截图所示.

Bind函数

让我们使用以下命令编辑/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

输出将如下面的屏幕截图所示.

dnsmasq

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

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

我们在这里所做的就是指定领事服务的DNS请求,这些服务将由DNS服务器处理. 127.0.0.1在端口8600上.除非您更改了consul默认值,否则这应该有效.

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

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

使用 Dnsmasq ,您应该使用以下命令.

 
 $ dig web.service.consul

输出结果如下面的屏幕截图所示.

web.service