前面几篇文章分别对系统服务、MySql以及Redis相关软件做了监控预警,但是大家有没有发现,在prometheus.yml里配置需要监听的服务时,我们需要按服务名手动写入,也就是说以后每增加一个服务,就得手动修改此配置,并重启promethues服务。
那么我们如何做到动态的监听服务呢?相信不少接触过分布式框架Dubbo的小伙伴们都知道它是靠zookeeper做注册监听的,最近比较流行的Spring Cloud Netflix的Eureka,consul也是比较常用的注册中心。
Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。
Consul主要包含如下功能:
服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。
监控检查: 支持多种方式的健康检查。
Key/Value存储: 支持通过HTTP API实现分布式KV数据存储。
多数据中心支持:支持任意数量数据中心。
官方架构图:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5UDZ0gDZlZTOlVWZiBTZiFjYzM2YyMmZlBjZzEGN2YmZlNWOxQTYy8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
docker 实例的注册与配置共享
coreos 实例的注册与配置共享
vitess 集群
SaaS 应用的配置共享
与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件
使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持.
支持健康检查. etcd 不提供此功能.
支持 http 和 dns 协议接口. zookeeper 的集成较为复杂, etcd 只支持 http 协议.
官方提供web管理界面, etcd 无此功能.
client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.
server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.
下载并解压:
以UI形式后台启动:
查看启动状态:
说明:
Address:节点地址
Status:alive表示节点健康
Type:server运行状态是server状态
DC:dc1表示该节点属于DataCenter1
查看节点:
Nginx代理访问:
界面:
使用http的方式,直接调用/v1/agent/service/register接口注册:
使用配置文件注册服务,创建文件夹/etc/consul.d
vi mysql.json内容如下:
指定文件启动:
如果文件变更,我们可以通过以下方式重新加载配置:
我们也可以通过curl的方式注销服务:
配置promethues.yml:
然后我们重启promethues,这时候只要Consul有服务注册,promethues就会检测到。
常用命令command:
agent:运行一个consul agent
join:将agent加入到consul cluster
members:列出consul cluster集群中的members
常用选项option:
-data-dir
作用:指定agent储存状态的数据目录
这是所有agent都必须的
对于server尤其重要,因为他们必须持久化集群的状态
-config-dir
作用:指定service的配置文件和检查定义所在的位置
通常会指定为"某一个路径/consul.d"(通常情况下,.d表示一系列配置文件存放的目录)
-config-file
作用:指定一个要装载的配置文件
该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同的值覆盖)
-dev
作用:创建一个开发环境下的server节点
该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
这种模式不能用于生产环境(因为第二条)
-bootstrap-expect
作用:该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。
-node
作用:指定节点在集群中的名称
该名称在集群中必须是唯一的(默认采用机器的host)
推荐:直接采用机器的IP
-bind
作用:指明节点的IP地址
-server
作用:指定节点为server
每个数据中心(DC)的server数推荐为3或5(理想的是,最多不要超过5)
所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修改了集群的状态,且集群的状态保存在每一台server上保证可用性
server也是与其他DC交互的门面(gateway)
-client
作用:指定节点为client
若不指定为-server,其实就是-client
-join
作用:将节点加入到集群
<a href="https://www.consul.io">https://www.consul.io</a>
<a href="https://www.consul.io/api/">https://www.consul.io/api/</a>
<a href="http://consul.la/intro/what-is-consul">http://consul.la/intro/what-is-consul</a>
<a href="http://kkkkkk.blog.51cto.com/468162/1914469">http://kkkkkk.blog.51cto.com/468162/1914469</a>
<a href="https://prometheus.io/docs/prometheus/latest/configuration/configuration/">https://prometheus.io/docs/prometheus/latest/configuration/configuration/</a>
作者: 小柒
分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。