运行代理

Consul 安装完毕后,便可运行 代理 ( agent )了。 代理有两种不同的运行模式: 服务器 ( server )模式以及 客户端 ( client )模式。 每个 数据中心 ( datacenter )至少需要部署一个 服务器 , 然而 3 节点或 5 节点的集群更为推荐。 单机器部署强烈不推荐 ,因为一旦故障,数据丢失不可避免。

其他节点以 客户端 模式运行。 客户端 进程非常轻量级,只负责 注册服务 ,运行 健康检查 以及 转发查询 。 集群内每个节点均需要运行 客户端 模式 代理

更多数据中心部署细节,请查看文档 deployment-guide

启动代理

快速起见,我们以 开发 ( development )模式启动 Consul 代理 , 这个模式可快速拉起一个单节点的 Consul 环境。 千万不要在生产环境中使用该模式,因为数据没有持久化

$ consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
           Version: 'v1.4.0'
           Node ID: 'c3714f95-4487-8862-17fd-68030f0c275d'
         Node name: 'FasionAir.local'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false

==> Log data will now stream in as it occurs:

    2019/01/23 14:41:10 [DEBUG] agent: Using random ID "c3714f95-4487-8862-17fd-68030f0c275d" as node ID
    2019/01/23 14:41:10 [WARN] agent: Node name "FasionAir.local" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
    ......

可以看到, Consul 已经启动并输出一些日志信息。 从日志可知, 代理服务器 模式运行,并作为集群领袖。 注意到,当前节点被标记为健康,并成为集群唯一节点。

集群成员

在另一个终端会话执行 consul members ,可以查看 Consul 集群所有成员。 可以看到,当前集群中只有一个成员,下节 介绍如何添加新成员。

$ consul members
Node             Address         Status  Type    Build  Protocol  DC   Segment
FasionAir.local  127.0.0.1:8301  alive   server  1.4.0  2         dc1  <all>

命令输出集群节点信息,包括 地址健康状态节点角色 以及一些 版本信息 。 如果指定 -detailed 参数,还可以看到额外的 元数据

members 指令输出基于 gossip协议 ,只保证 最终一致 ( eventually consistent )。 换句话讲,不管何时,当前 代理 所见可能并不是集群的全貌。 如果需要 强一致 ( strongly consistent )的结果,可用使用 HTTP 接口进行查询(请求将转发至服务器):

$ curl localhost:8500/v1/catalog/nodes
[
    {
        "ID": "c735ff68-f8ce-3011-9fcf-55ab81f7e21d",
        "Node": "FasionAir.local",
        "Address": "127.0.0.1",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "127.0.0.1",
            "wan": "127.0.0.1"
        },
        "Meta": {
            "consul-network-segment": ""
        },
        "CreateIndex": 9,
        "ModifyIndex": 10
    }
]

除了 HTTP 接口,还可以使用 DNS 接口查询节点信息。 注意,你需要将 DNS 查询指到 Consul 代理的 DNS 服务器,默认跑在 8600 端口。

$ dig @127.0.0.1 -p 8600 FasionAir.local.node.consul

;; QUESTION SECTION:
;FasionAir.local.node.consul.   IN      A

;; ANSWER SECTION:
FasionAir.local.node.consul. 0  IN      A       127.0.0.1

DNS 记录格式(如 FasionAir.local.node.consul ),将在 下节 详细介绍。

停止代理

可以通过 Ctrl-C (中断信号 SIGINT ) 让代理优雅地退出——先离开集群,然后退出。

优雅退出 要求 Consul 在退出前先通知集群其他节点。 如果 强杀 代理进程,集群其他节点将检测到该节点 故障 。 集群成员退出,其服务以及健康检查任务将从目录中移除。 集群成员故障,其健康状态将被标记为 严重错误 ,但不会从目录中移除。 Consul 将自动重连故障节点,以应对网络波动,但不会重连已退出的节点。

如果 代理服务器 模式,优雅退出则更为重要——避免影响 共识协议 而导致服务中断。 更多关于安全添加和删除服务节点,请查考文档 advanced-operations/servers

下一步

下一节,开始介绍: 如何向Consul注册服务

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../../../_images/wechat-mp-qrcode.png

小菜学编程