这系列文章很基础,主要给想尝试后端技术栈的前端看的,后端大佬别看了,极可能浪费你的时间。前端

虽然我更擅长写前端相关的知识点总结文章,可是也阻止不了我对后端技术的向往啊,后端相关的文章质量不会高,主要目的是为了记录本身的学习历程,也是但愿把本身的短板和缺点暴露出来,跟小伙伴们一块儿成长。node

初衷

学习Go很大一个缘由是由于想尝试写微服务,因而在探索Go构建微服务的道路上越走越远,甚至有些求快和焦躁了,可是在成长就行。mysql

Consul 是什么?

首先奉上中文文档Consul.web

Consul由多个模块组成,是一个为基础设施提供服务发现和服务配置的工具。当用微服务架构时,传统的单体应用所有拆分为了细粒度的功能模块,这些模块就是微服务,他们能够拥有本身独立的数据库,遵循单一职责原则,能够独立部署。减小系统之间的耦合。那这么多的微服务之间怎么相互调用和发现呢?就能够借助consul来集中注册管理来。sql

  • 服务发现: Consul的客户端可用提供一个服务,好比 api 或者mysql ,另一些客户端可用使用Consul去发现(依赖的是Http / DNS)一个指定服务的提供者。
  • 健康检查: 避免将流量发送到不健康的主机。
  • Key/Value存储 能够理解为简易的数据库,能够完成动态配置,功能标记,协调,领袖选举等功能。
  • 多数据中心 能够将项目部署拓展到多个数据中心。

运行原理

每一个服务节点(这个节点能够理解为一个服务器或者一个容器)都运行了一个Consul agent。这个agent是负责对节点自身和节点上的服务进行健康检查的。consul 能够用两种模式运行 server 和 client ,其中 server模式是以集群的方式运行的,最少建议 3-5台服务器/容器。每一个数据中心(能够是多个服务器节点 / 容器的集合)至少必须拥有一台server。数据库

consul agent -dev
consul members
复制代码

能够启动 consul,而后查看当前集群的成员json

也能够经过Http 和 DNS 的方式查询集群信息bootstrap

curl localhost:8500/v1/catalog/nodes

dig @127.0.0.1 -p 8600 Armons-MacBook-Air.node.consul
复制代码

服务注册

服务注册有两种方式:后端

  • 服务定义文件
  • 调用HTTP API注册

为Consul配置建立一个目录.Consul会载入配置文件夹里的全部配置文件。api

sudo mkdir /etc/consul.d 

// 写入配置
echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \
    >/etc/consul.d/web.json
    
// Consul服务重启
consul agent -dev -config-dir /etc/consul.d
复制代码

.d 后缀意思是这个路径包含了一组配置文件.

服务查询

NAME.service.consul
web.service.consul
dig @127.0.0.1 -p 8600 web.service.consul
// 会返回一个A记录返回了一个可用的服务所在的节点的IP地址

dig @127.0.0.1 -p 8600 web.service.consul SRV
//接收包含 地址,服务节点和端口的 SRV记录

curl http://localhost:8500/v1/catalog/service/web
// 经过 Http API 方式查询
复制代码

更新服务

服务定义能够经过配置文件并发送SIGHUP给agent来进行更新.这样你可让你在不关闭服务或者保持服务请求可用的状况下进行更新. 另外 HTTP API能够用来动态的添加,移除和修改服务.

拓展集群

将Consul 拓展成面向生成环境,拥有多个成员的服务发现架构。 当一个agent启动时。他是孤立的,经过与存在的集群成员沟通来发现其余成员。 Consul agent能够加入任何agent而不仅是出于server模式的agent

  • 每一个集群中的节点都必需要一个惟一的名字.Consul默认会使用机器的hostname.咱们 可使用-node手动覆盖他.

  • 咱们也可使用-bind指定一个绑定的地址让Consul在这个地址上进行监听,这个地址必须能够被其余集群成员访问到

consul agent -server -bootstrap-expect 1  -data-dir /tmp/consul -node=hdp2 -bind=10.0.0.52  -config-dir /etc/consul.d
复制代码

参数介绍:

  • -server : 告诉consul agent节点将扮演集群的惟一server
  • -bootstrap-expect : 提示Consul咱们期待加入的server节点的数量
  • -config-dir : 指定服务和健康检查定义文件存放的路径
  • -node : 覆盖默认的节点名称
  • -bind : 绑定一个固定地址
  • -data-dir : 为agent存储状态提供了一个数据目录
consul join 10.0.0.53
// 当前agent加入 10.0.0.53 agent
复制代码

节点查询

就像查询服务同样.Consul有一个API用来查询节点本身.你能够经过DNS和HTTP的API来进行.

DNS API中节点名称结构为 NAME.node.consul或者NAME.node.DATACENTER.consul.若是数据中心名字省略,Consul只会查询本地数据中心.

dig @127.0.0.1 -p 8600 hdp3.node.consul
复制代码

退出集群

离开集群,你能够Ctrl-C优雅的退出,也能够直接Kill掉agent进程.优雅的退出可让节点转变为离开状态.不然节点将被标记为失败.

定义检查

和服务相似,一个检查能够经过检查定义或HTTP API请求来注册. 咱们将使用和检查定义来注册检查.和服务相似,由于这是创建检查最经常使用的方式.

echo '{"check": {"name": "ping", "script": "ping -c1 163.com >/dev/null", "interval": "30s"}}' \
  >/etc/consul.d/ping.json

// 健康检查的 HTTP API 方式
curl http://localhost:8500/v1/health/state/critical
复制代码

重启agent或者发送SIGHUP信号,就能够看到日志输出。

启动web界面

consul agent -ui

http://localhost:8500/ui 
复制代码

未完待续。。。 好像好久没更新以前写的前端文章了。。。个人错