- Consul 教程
- Consul - 首页
- Consul - 简介
- Consul - 架构
- Consul - 安装
- Consul - 使用微服务
- Consul - 引导程序和DNS
- Consul - 查询节点
- Consul - 故障转移事件
- Consul - 使用UI
- Consul - 在AWS上使用Consul
- Consul 有用资源
- Consul - 快速指南
- Consul - 有用资源
- Consul - 讨论
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集群。
有两种方法可以进行手动引导
在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记录)。
最佳选择是拥有多个BIND服务器,每个服务器都在本地运行一个Consul代理。任何由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值,可以将其设置为允许DNS结果在Consul的下游进行缓存。较高的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
输出将如以下屏幕截图所示。