Consul 基本概念

官方文档:https://www.consul.io/docs
参考资料:https://deepzz.com/post/the-consul-of-discovery-and-configure-services.html

consul 关键特性

  • 服务发现:支持服务发现,可以通过 DNS 或 HTTP 的方式获取服务信息
  • 健康检查:支持健康检查,如 web 状态码或 cpu 使用率
  • K/V 存储:支持键/值对存储
  • 多数据中心:支持多数据中心,开箱即用
  • WEB UI:支持 WEB UI,一目了然

consul 术语

  • node:节点,运行 consul 服务,可以指定名字和 ID
  • agent:consul 中的核心程序,以守护进程的方式在各个节点运行,有 client 和 server 启动模式。每个 agent 维护一套服务和注册发现以及健康信息。
  • client:agent 以 client 模式启动的节点。不保存数据,直接把请求向 server 转发。
  • server:agent 以 server 模式启动的节点,负责 Raft、维护会员信息、注册服务、健康检查等功能。
  • server leader:服务器 server 的领导者。一旦 leader 宕机,会从剩下的 server 中选举一个新的 leader

consul 架构图:
consul 架构

操作 consul

consul 除了提供 CLI 命令行接口外,还提供了一套完整的 Restful 风格的 HTTP API 接口。

命令行操作

完整的命令文档在这里:https://www.consul.io/commands

catalog 命令

可以查看所有的数据中心、节点、服务等,支持的子类别有:

  • datacenters:数据中心
  • nodes:节点
  • services:服务

示例:
查看所有数据中心:

$ consul catalog datacenters
dc1
dc2
dc3

查看能提供特定服务的所有节点:

$ consul catalog nodes -service=redis
Node       ID        Address     DC
worker-01  1b662d97  10.4.5.31   dc1
worker-02  d407a592  10.4.4.158  dc1

查看某个节点的所有服务:

$ consul catalog services -node=worker-01
consul
postgres

agent 命令

consul agent 命令是 consul 的核心,文档:https://www.consul.io/docs/agent。例如,启动一个 agent:

$ consul agent -data-dir=/tmp/consul

其他常用命令

  • members:列出当前集群中的所有节点
  • kv:键值对存储功能,子命令有:
    • put:存储
    • get:查看
    • delete:删除
    • export:导出数据为 JSON 格式,可以用于 import
    • import:从 JSON 格式导入数据

HTTP API 操作

Consul 的 HTTP API 文档:https://www.consul.io/api-docs。注意所有 API 操作都需要加版本号,目前是 v1,例如 curl http://127.0.0.1:8500/v1/catalog/services 查看所有的服务

agent API

注册服务

使用 HTTP 的 PUT 方法调用 http://yourIP:8500/v1/agent/service/register 可以注册服务。

curl 示例:

curl -X PUT -d "@./demo1.json" http://127.0.0.1:8500/v1/agent/service/register

示例 JSON 文件 demo1.json

{
	"ID": "demo1",
	"Name": "demo1",
	"Tags": [
		"primary"
	],
	"Address": "127.0.0.1",
	"Port": 8888,
	"Check": {
		"HTTP": "http://127.0.0.1:8888",
		"Interval": "5s"
	}
}

查看服务状态:

$ curl http://127.0.0.1:8500/v1/catalog/service/demo1
[
    {
        "ID": "ee33ea14-4412-6209-fc5b-8d47dc28cb26",
        "Node": "84d60a3bcd39",
        "Address": "172.17.0.3",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "172.17.0.3",
            "lan_ipv4": "172.17.0.3",
            "wan": "172.17.0.3",
            "wan_ipv4": "172.17.0.3"
        },
        "NodeMeta": {
            "consul-network-segment": ""
        },
        "ServiceKind": "",
        "ServiceID": "demo1",
        "ServiceName": "demo1",
        "ServiceTags": [
            "primary"
        ],
        "ServiceAddress": "127.0.0.1",
        "ServiceTaggedAddresses": {
            "lan_ipv4": {
                "Address": "127.0.0.1",
                "Port": 8888
            },
            "wan_ipv4": {
                "Address": "127.0.0.1",
                "Port": 8888
            }
        },
        "ServiceWeights": {
            "Passing": 1,
            "Warning": 1
        },
		"ServiceMeta": {},
        "ServicePort": 8888,
        "ServiceEnableTagOverride": false,
        "ServiceProxy": {
            "MeshGateway": {},
            "Expose": {}
        },
        "ServiceConnect": {},
        "CreateIndex": 813,
        "ModifyIndex": 813
    }
]

catalog API

可以查看数据中心、节点、服务,可以注册和解除注册服务。完整示例和参数说明见官网:https://www.consul.io/api/catalog.html

查看

查看所有信息:

$ curl http://127.0.0.1:8500/v1/catalog/datacenters
$ curl http://127.0.0.1:8500/v1/catalog/nodes
$ curl http://127.0.0.1:8500/v1/catalog/services

查看具体服务:

 $ curl http://127.0.0.1:8500/v1/catalog/service/myService
注册实体 /catalog/register

通过 HTTP 的 PUT 方法发送 JSON 数据到这个接口,即可注册。但是这里太底层了,通常用 agent 来代替。

解除注册实体 /catalog/unregister

同上

其他常用 API

两种方式查看集群成员

ubuntu@VM-38-ubuntu:~/$ curl http://127.0.0.1:8500/v1/agent/members
[
    {
        "Name": "84d60a3bcd39",
        "Addr": "172.17.0.3",
        "Port": 8301,
        "Tags": {
            "acls": "0",
            "build": "1.8.4:12b16df3",
            "dc": "dc1",
            "ft_fs": "1",
            "id": "ee33ea14-4412-6209-fc5b-8d47dc28cb26",
            "port": "8300",
            "raft_vsn": "3",
            "role": "consul",
            "segment": "",
            "vsn": "2",
            "vsn_max": "3",
            "vsn_min": "2",
            "wan_join_port": "8302"
        },
        "Status": 1,
        "ProtocolMin": 1,
        "ProtocolMax": 5,
        "ProtocolCur": 2,
        "DelegateMin": 2,
        "DelegateMax": 5,
        "DelegateCur": 4
    }
]
ubuntu@VM-38-ubuntu:~/$ sudo docker exec -t consul2 consul members
Node          Address          Status  Type    Build  Protocol  DC   Segment
84d60a3bcd39  172.17.0.3:8301  alive   server  1.8.4  2         dc1  <all>

注册服务

consul 支持两种服务发现的方式:

通过 HTTP API 方式,这种方式需要额外编程,适用于不安装 consul agent 的情况,文档地址。
通过 consul agent 配置的方式,agent 启动的时候会读取一个配置文件目录,通过配置进行服务的发现,文档地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值