zoukankan      html  css  js  c++  java
  • 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 的方式动态添加或者移除服务信息。

  • 相关阅读:
    将博客搬至CSDN
    规范化设计的范式的个人理解
    Codeforces Round #422 (Div. 2) D题要补的知识点
    Codeforces第一次rated比赛
    Codeforces 818B Permutation Game
    USACO Dynamic Programming (1)
    关于数据库中除法的一个小问题
    USACO hamming
    USACO Healthy Holsteins
    USACO Sorting a Three-Valued Sequence
  • 原文地址:https://www.cnblogs.com/lzeffort/p/9219813.html
Copyright © 2011-2022 走看看