Consul 入门

1. 什么是Consul?

Consul 有很多组件,对于整体来说,它是一个服务发现和服务配置的工具,它提供了一下特性:

  • 服务发现
  • 健康检查
  • KV存储
  • 多数据中心

2.安装Consul

以下是在 CentOS 系统上操作

下载

wget https://releases.hashicorp.com/consul/1.1.0/consul_1.1.0_linux_amd64.zip

查看版本

consul -v
Consul v1.1.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

3.启动 Agent

使用dev模式启动。

$ consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
           Version: 'v1.1.0'
           Node ID: 'a94cdf4f-e36d-9bef-927c-61c1d14500cd'
         Node name: 'bogon'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, 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:

    2018/06/23 00:03:45 [DEBUG] agent: Using random ID "a94cdf4f-e36d-9bef-927c-61c1d14500cd" as node ID
    2018/06/23 00:03:45 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:a94cdf4f-e36d-9bef-927c-61c1d14500cd Address:127.0.0.1:8300}]
    2018/06/23 00:03:45 [INFO] serf: EventMemberJoin: bogon.dc1 127.0.0.1
    2018/06/23 00:03:45 [INFO] serf: EventMemberJoin: bogon 127.0.0.1
    2018/06/23 00:03:45 [INFO] agent: Started DNS server 127.0.0.1:8600 (udp)
    2018/06/23 00:03:45 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
    2018/06/23 00:03:45 [INFO] consul: Adding LAN server bogon (Addr: tcp/127.0.0.1:8300) (DC: dc1)
    2018/06/23 00:03:45 [INFO] consul: Handled member-join event for server "bogon.dc1" in area "wan"
    2018/06/23 00:03:45 [INFO] agent: Started DNS server 127.0.0.1:8600 (tcp)
    2018/06/23 00:03:45 [INFO] agent: Started HTTP server on 127.0.0.1:8500 (tcp)
    2018/06/23 00:03:45 [INFO] agent: started state syncer
    2018/06/23 00:03:45 [WARN] raft: Heartbeat timeout from "" reached, starting election
    2018/06/23 00:03:45 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
    2018/06/23 00:03:45 [DEBUG] raft: Votes needed: 1
    2018/06/23 00:03:45 [DEBUG] raft: Vote granted from a94cdf4f-e36d-9bef-927c-61c1d14500cd in term 2. Tally: 1
    2018/06/23 00:03:45 [INFO] raft: Election won. Tally: 1
    2018/06/23 00:03:45 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
    2018/06/23 00:03:45 [INFO] consul: cluster leadership acquired
    2018/06/23 00:03:45 [DEBUG] consul: Skipping self join check for "bogon" since the cluster is too small
    2018/06/23 00:03:45 [INFO] consul: member 'bogon' joined, marking health alive
    2018/06/23 00:03:45 [INFO] consul: New leader elected: bogon
    2018/06/23 00:03:45 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
    2018/06/23 00:03:45 [INFO] agent: Synced node info
    2018/06/23 00:03:46 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
    2018/06/23 00:03:46 [DEBUG] agent: Node info in sync
    2018/06/23 00:03:46 [DEBUG] agent: Node info in sync

 4. 查看集群成员

在另外一个终端使用 consul members, 可以查看集群成员信息。

$ consul members
Node   Address         Status  Type    Build  Protocol  DC   Segment
bogon  127.0.0.1:8301  alive   server  1.1.0  2         dc1  <all>

也可以通过HTTP API 来查看Consul成员信息

$ curl localhost:8500/v1/catalog/nodes
[
    {
        "ID": "a94cdf4f-e36d-9bef-927c-61c1d14500cd",
        "Node": "bogon",
        "Address": "127.0.0.1",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "127.0.0.1",
            "wan": "127.0.0.1"
        },
        "Meta": {
            "consul-network-segment": ""
        },
        "CreateIndex": 5,
        "ModifyIndex": 6
    }
]

5.服务注册

定义一个服务步骤

$ sudo mkdir /etc/consul.d

定义一个服务名为web, 运行端口为80

$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \
    | sudo tee /etc/consul.d/web.json

重启agent,并制定配置目录

$ consul agent -dev -config-dir=/etc/consul.d
==> Starting Consul agent...
...
    [INFO] agent: Synced service 'web'
...

下面通过HTTP API的方式来查询服务

$ curl http://localhost:8500/v1/catalog/service/web
[
    {
        "ID": "68530a9c-2434-9a80-32ac-e4e455086655",
        "Node": "bogon",
        "Address": "127.0.0.1",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "127.0.0.1",
            "wan": "127.0.0.1"
        },
        "NodeMeta": {
            "consul-network-segment": ""
        },
        "ServiceID": "web",
        "ServiceName": "web",
        "ServiceTags": [
            "rails"
        ],
        "ServiceAddress": "",
        "ServiceMeta": {},
        "ServicePort": 80,
        "ServiceEnableTagOverride": false,
        "CreateIndex": 6,
        "ModifyIndex": 6
    }
]

同时也可以通过下面的HTTP API 来查询服务的健康状况

$ curl 'http://localhost:8500/v1/health/service/web?passing'
[
    {
        "Node": {
            "ID": "68530a9c-2434-9a80-32ac-e4e455086655",
            "Node": "bogon",
            "Address": "127.0.0.1",
            "Datacenter": "dc1",
            "TaggedAddresses": {
                "lan": "127.0.0.1",
                "wan": "127.0.0.1"
            },
            "Meta": {
                "consul-network-segment": ""
            },
            "CreateIndex": 5,
            "ModifyIndex": 6
        },
        "Service": {
            "ID": "web",
            "Service": "web",
            "Tags": [
                "rails"
            ],
            "Address": "",
            "Meta": null,
            "Port": 80,
            "EnableTagOverride": false,
            "CreateIndex": 6,
            "ModifyIndex": 6
        },
        "Checks": [
            {
                "Node": "bogon",
                "CheckID": "serfHealth",
                "Name": "Serf Health Status",
                "Status": "passing",
                "Notes": "",
                "Output": "Agent alive and reachable",
                "ServiceID": "",
                "ServiceName": "",
                "ServiceTags": [],
                "Definition": {},
                "CreateIndex": 5,
                "ModifyIndex": 5
            }
        ]
    }
]

更新服务

可以通过修改配置文件和发送SIGHUP 到agent, 更新服务的信息。
另外,也可以通过HTTP API 的方式动态添加或者移除服务信息。

猜你喜欢

转载自www.cnblogs.com/lzeffort/p/9219813.html