1.Consul 分布式集群部署
(1).Consul 介绍
Consul 是基于GO 语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value 存储、多数据中心和分布式一致性保证等功能。Prometheus 通过Consul 可以很方便的实现服务自动发现和维护,同时Consul 支持分布式集群部署,将大大提高了稳定性,通过Prometheus 跟Consul 集群二者结合起来,能够高效的进行数据维护同时保证系统稳定。
(2).Consul 部署
三个节点同时操作
[root@docker-1 src]# wget -c
https://releases.hashicorp.com/consul/1.8.0/consul_1.8.0_linux_amd64.zip
[root@docker-1 src]# unzip consul_1.8.0_linux_amd64.zip
[root@docker-1 src]# mv consul /usr/local/bin/
[root@docker-1 src]# mkdir /data/
172.16.0.7
[root@docker-1 src]# nohup consul agent -server -bootstrap-expect=3 -data-dir=/data/consul-node=172.16.0.7 -bind=172.16.0.7 -client=0.0.0.0 -datacenter=shenzhen -ui &
172.16.0.8
[root@docker-2 src]# nohup consul agent -server -bootstrap-expect=3 -data-dir=/data/consul-node=172.16.0.8 -bind=172.16.0.8 -client=0.0.0.0 -datacenter=shenzhen -ui &
172.16.0.9
[root@docker-3 src]# nohup consul agent -server -bootstrap-expect=3 -data-dir=/data/consul-node=172.16.0.9 -bind=172.16.0.9 -client=0.0.0.0 -datacenter=shenzhen -ui &
此时
此时三台机器还未join,不能算是一个集群,三台机器上的consul 均不能正常工作,因为leader 未选出。
- 集群节点加入
分别登录第2 台和第3 台虚拟机上执行如下命令,让consul 加入集群:
172.16.0.8
[root@docker-2 src]# consul join 172.16.0.7
Successfully joined cluster by contacting 1 nodes.
172.16.0.9
[root@docker-3 src]# consul join 172.16.0.7
Successfully joined cluster by contacting 1 nodes.
[root@docker-2 src]# tailf nohup.out 观察日志
- 查看集群状态
[root@docker-2 src]# consul operator raft list-peers
- 查看成员状态
[root@docker-2 src]# consul members
- 集群测试
[root@docker-2 src]# consul kv put name shanwaiyun
Success! Data written to: name
[root@docker-2 src]#
[root@docker-2 src]# consul kv get name
Shanwaiyun
# 其他两台机器查看该key 值也是返回shanwaiyun 这个说明key 值已经在集群中同步
- Web 界面访问
http://192.168.56.104:8500/
2 .Prometheus 与consul 整合
1、通过在consul 注册服务或注销服务(监控targets)
2、Prometheus 一直监视(watch)consul 服务,当发现consul 中符合要求的服务有新变化时更新Prometheus 监控对象
(1).node_exporter 服务注册到consul
使用API 把这里的启动的node_exporter 服务注册到consul
[root@docker-3 src]# curl -X PUT -d '{"id": "node-exporter","name": "node-exporter","address": "172.16.0.9","port": 9100,"tags": ["linux","prome"],"checks": [{"http":"http://172.16.0.9:9100/metrics","interval": "5s"}]}' http://172.16.0.9:8500/v1/agent/service/register
服务注销
如果想要注销这个服务,可以直接通过接口的方式删除node-exporter 即可:
curl -X PUT http://172.16.0.9:8500/v1/agent/service/deregister/node-exporter
(2).配置prometheus 实现自动发现
- 配置prometheus
- job_name: 'node_discovery_by_consul'
metrics_path: /metrics
scheme: http
consul_sd_configs:
- server: 172.16.0.9:8500
services:
- node-exporter
- 重启prometheus
[root@docker-3 src]# /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
[root@docker-3 src]# systemctl restart prometheus
- 通过consul进行服务监控
将172.16.0.7 自动加入服务发现,先安装node_exporter,过程略过。
添加一个node_exporter 的监控
[root@docker-1 src]# curl -X PUT -d '{"id": "docker-1-172.16.0.7","name":"node-exporter","address": "172.16.0.7","port": 9100,"tags": ["devops"],"checks": [{"http":"http://172.16.0.7:9100/metrics", "interval": "5s"}]}'http://172.16.0.7:8500/v1/agent/service/register
可以看到该节点被自动加入prometheus 监控了
- 注销节点
[root@docker-3 src]# curl --request PUT "http://172.16.0.7:8500/v1/agent/service/deregister/docker-1-172.16.0.7"
# docker-1-172.16.0.7 代表id