在本章中,我们将讨论如何在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从端口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
输出结果如下面的截图所示.
让我们使用以下命令编辑/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
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
我们在这里所做的就是指定领事服务的DNS请求,这些服务将由DNS服务器处理. 127.0.0.1在端口8600上.除非您更改了consul默认值,否则这应该有效.
在正常情况下,应该使用以下命令.
$ dig @ 127.0.0.1 -p 8600 web.service.consul
使用 Dnsmasq ,您应该使用以下命令.
$ dig web.service.consul
输出结果如下面的屏幕截图所示.