consul

Consul是一个分布式高可用的系统,它有以下特点:

服务发现:Consul客户能够注册一个服务,比如api或mysql,其他客户可以在Consul上查询一个指定服务的提供者。Consul提供DNS和HTTP的服务发现接口。

健康检查:Consul可以灵活的使用脚本等来检测注册在其上的服务是否可用,不健康的服务Consul也能够灵活处理,比如提供服务的主机内存使用超过90%,我们可以配置让Consul不要把这样的服务提供给服务调用者。

key/value存储:这个功能和etcd有些类似,可以通过HTTP API方便地使用。

多数据中心支持:Consul支持开箱即用的多数据中心支持,这意味着用户不用建立额外的抽象层让业务扩展到各个区域。

Consul的基本架构

提供服务给Consul的节点需要运行一个Consul agent,agent可以运行为server或client模式,服务调用或使用KV存储的节点运行agent不是必需的。agent负责服务和节点的健康检测。agent与一个或多个Consul Server进行交互。Consul Server用于存放和复制数据。在一个集群中,Consul Server一般为奇数个,常用为3、5、7,它们会使用consensus protocol来选出一个leader。服务使用节点可以查询Consul agent,而不管这个agent运行在什么模式,因为运行在client模式下的agent虽然不保存数据,但是它会将请求转发到Consul Server。

下面的内容主要对Consul的服务注册、查询以及Consul Template进行介绍。

注册服务和查询服务

服务注册可以使用HTTP API或者服务定义文件来实现,这里采用后者。

在目录/etc/consul.d下建立一个文件web.json,内容如下:

{ "service":  {"name": "web", "tags": ["rails"], "port": 80} }

启动Consul为dev模式(生产环境下不能用,因为不持久化任何数据)

$consul agent -dev -config-dir /etc/consul.d

如果日志输出正常,可以通过DNS API和HTTP API来查询刚才注册的服务

DNS API 查询

$dig @127.0.0.1 -p 8600 web.service.consul SRV

HTTP API 查询

$curl http://localhost:8500/v1/catalog/service/web

Consul Template简介

Consul Template提供一个方便的方式从Consul获取数据通过consul-template的后台程序保存到文件系统。这个后台进程监控Consul实例的变化并更新任意数量的模板到文件系统。作为一个附件功能,模板更新完成后consul-template可以运行任何命令, 比如我们可以render完nginx的配置文件,然后自动执行reload命令,全部自动化,不用人为干预。

consul template 的使用也简单直接,下面是一个例子:

consul-template \

-consul 127.0.0.1:8500 \

-template "/tmp/template.ctmpl:/var/www/nginx.conf:service nginx restart" \

-retry 30s \

-once

查询本地的 Consul 实例(agent),一旦Consul保存的配置发生变化,consul template拉下来这些配置,渲染模板并重启 Nginx ,如果 Consul 不可用30秒重试一次。

模板文件的书写方法和go template 一致,可以参考https://golang.org/pkg/text/template

你可能感兴趣的:(consul)