python consul服务发现_Prometheus基于Consul的服务发现

Consul是由HashiCorp开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,被大量应用于基于微服务的软件架构当中。

Consul使用

可以通过Consul官网https://www.consul.io/downloads.html下载对应操作系统版本的软件包。Consul与Prometheus同样使用Go语言进行开发,因此安装和部署的方式也极为简单,解压并将命令行工具放到系统PATH路径下即可。

Consul安装# wget https://releases.hashicorp.com/consul/1.9.0/consul_1.9.0_linux_amd64.zip # unzip consul_1.9.0_linux_amd64.zip # cp consul /usr/local/bin/

在本地可以使用开发者模式在本地快速启动一个单节点的Consul环境:# consul agent -dev ==> Starting Consul agent... Version: '1.9.0' Node ID: 'f8baf8b0-4bb3-4985-e854-793668506963' Node name: 'node1' Datacenter: 'dc1' (Segment: '') 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, Auto-Encrypt-TLS: false ==> Log data will now stream in as it occurs: 2021-01-27T01:28:02.423Z [INFO] agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:f8baf8b0-4bb3-4985-e854-793668506963 Address:127.0.0.1:8300}]" 2021-01-27T01:28:02.424Z [INFO] agent.server.serf.wan: serf: EventMemberJoin: node1.dc1 127.0.0.1

在启动成功后,在一个新的terminal窗口中运行consul members可以查看当前集群中的所有节点:# consul members Node Address Status Type Build Protocol DC Segment node1 127.0.0.1:8301 alive server 1.9.0 2 dc1 说明: Node: 节点名称 Address: 绑定IP和端口 DC: 默认dc1,可以指定

还可以通过HTTP API的方式查看当前集群中的节点信息:# curl localhost:8500/v1/catalog/nodes [{ "ID": "f8baf8b0-4bb3-4985-e854-793668506963", "Node": "node1", "Address": "127.0.0.1", "Datacenter": "dc1", "TaggedAddresses": { "lan": "127.0.0.1", "lan_ipv4": "127.0.0.1", "wan": "127.0.0.1", "wan_ipv4": "127.0.0.1" }, "Meta": { "consul-network-segment": "" }, "CreateIndex": 11, "ModifyIndex": 12 }]

Consul还提供了内置的DNS服务,可以通过Consul的DNS服务的方式访问其中的节点:# dig @127.0.0.1 -p 8600 localhost.node.consul ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.2 <<>> @127.0.0.1 -p 8600 localhost.node.consul ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<

在Consul当中服务可以通过服务定义文件或者是HTTP API的方式进行注册。

1.使用服务定义文件的方式将本地运行的node_exporter通过服务的方式注册到Consul当中。创建node_exporter.json文件 # sudo mkdir /etc/consul.d # echo '{"service": {"name": "node_exporter", "tags": ["exporter"], "port": 9100}}' | sudo tee /etc/consul.d/node_exporter.json 重新启动Consul服务,并且声明服务定义文件所在目录: # consul agent -dev -config-dir=/etc/consul.d -client=192.168.0.107 2020-12-28T04:58:38.146-0500 [DEBUG] agent: Node info in sync 2020-12-28T04:58:38.146-0500 [DEBUG] agent: Service in sync: service=node_exporter

2.服务注册成功之后就可以通过DNS或HTTP API的方式查询服务信息。默认情况下,所有的服务都可以使用NAME.service.consul域名的方式进行访问。

例如,可以使用node_exporter.service.consul域名查询node_exporter服务的信息:# dig @192.168.0.107 -p 8600 node_exporter.service.consul ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> @192.168.0.107 -p 8600 node_exporter.service.consul ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<

如上所示DNS记录会返回当前可用的node_exporter服务实例的IP地址信息。

除了使用DNS的方式以外,Consul还支持用户使用HTTP API的形式获取服务列表:# curl http://192.168.0.107:8500/v1/catalog/service/node_exporter [ { "ID": "6f3e888c-d4ce-422b-6208-e90701a1174a", "Node": "node1", "Address": "127.0.0.1", "Datacenter": "dc1", "TaggedAddresses": { "lan": "127.0.0.1", "lan_ipv4": "127.0.0.1", "wan": "127.0.0.1", "wan_ipv4": "127.0.0.1" }, "NodeMeta": { "consul-network-segment": "" }, "ServiceKind": "", "ServiceID": "node_exporter", "ServiceName": "node_exporter", "ServiceTags": [ "exporter" ], "ServiceAddress": "", "ServiceWeights": { "Passing": 1, "Warning": 1 }, "ServiceMeta": {}, "ServicePort": 9100, "ServiceEnableTagOverride": false, "ServiceProxy": { "MeshGateway": {}, "Expose": {} }, "ServiceConnect": {}, "CreateIndex": 14, "ModifyIndex": 14 } ]

Consul也提供了一个Web UI可以查看Consul中所有服务以及节点的状态:

访问页面 http://192.168.0.107:8500/ui

26ef0fa314466d885c50be51e4eafe0f.png

consul UI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值