Consul 服务发现与配置

Consule 是什么

  Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:

  • 服务发现 Consul 的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用 Consul 去发现一个指定服务的提供者.通过 DNS 或者 HTTP 应用程序可用很容易的找到他所依赖的服务.

  • 健康检查 Consul 客户端可用提供任意数量的健康检查,指定一个服务(比如: webserver 是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由 operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.

  • Key/Value存储 应用程序可用根据自己的需要使用 Consul 的层级的 Key/Value 存储.比如动态配置,功能标记,协调,领袖选举等等,简单的 HTTP API 让他更易于使用.

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

  Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施.

基础架构

  Consul是一个分布式高可用的系统. 这节将包含一些基础,我们忽略掉一些细节这样你可以快速了解Consul是如何工作的.如果要了解更多细节,请参考深入的架构描述.

  每个提供服务给Consul的阶段都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.

  Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群.

  你基础设施中需要发现其他服务的组件可以查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .

  每个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求创建时.本地Consul Server转发请求到远程的数据中心并返回结果.

使用 Consul

  Consul集群的每个节点都必须先安装Consul.安装非常容易,Consul发布为所支持的平台和架构的二进制包.这个指南不包含从源代码编译Consul的内容。想要通过源代码进行安装,请参看 [官方文档安装手册]

安装 Consul

  安装Consul,到 [download consul 网址] 找到适合你系统的包下载他。Consul 打包为一个 ’Zip’ 文件。下载后解开压缩包,拷贝Consul到你的 PATH 路径中,在 Unix 系统中 ~/bin /usr/local/bin 是通常的安装目录.根据你是想为单个用户安装还是给整个系统安装来选择.在Windows系统中有可以安装到 %PATH% 的路径中。

验证 Consul

  完成安装后,通过打开一个新终端窗口检查consul安装是否成功.通过执行 consul你应该看到类似下面的输出

   Consul 服务发现与配置

  如果你得到一个consul not be found的错误,你的PATH可能没有正确设置.请返回检查你的consul的安装路径是否包含在PATH中.

运行 Agent

  完成 Consul 的安装后,必须运行 agent.。agent 可以运行为 server 或 client 模式。每个数据中心至少必须拥有一台 server。建议在一个集群中有 3 或者 5 个server,原理其实和 zookeeper 类似。部署单一的server,在出现失败时会不可避免的造成数据丢失。其他的 agent 运行为 client 模式。一个 client 是一个非常轻量级的进程。用于注册服务,运行健康检查和转发对 server 的查询。agent 必须在集群中的每个主机上运行。查看启动数据中心的细节请查看 [官方文档].

启动 Agent

  为了更简单,现在我们将启动 Consul agent 的开发模式。这个模式快速和简单的启动一个单节点的Consul。这个模式不能用于生产环境,因为他不持久化任何状态.。

  OS X用户注意: Consul 使用你的主机hostname作为默认的节点名字.如果你的主机名包含时间,到这个节点的DNS查询将不会工作.为了避免这个情况,使用 -node 参数来明确的设置node名.  

  Consul 服务发现与配置

  如你所见,Consul Agent 启动并输出了一些日志数据。从这些日志中你可以看到,我们的 agent 运行在 server 模式并且声明作为一个集群的 Leader。额外的本地成员也被标记为一个健康的成员。

  也可以通过 -data-dir=/tmp/consul 来指定数据存放位置,对于 consul 的 web UI 必须要指定对应数据的存放位置。

集群成员

  新开一个终端窗口运行 consul members, 可以看到 Consul 集群的成员。下一节我们将讲到加入集群,现在你应该只能看到一个成员,就是你自己:  

  Consul 服务发现与配置

  这个输出显示我们自己的节点。运行的地址,健康状态,自己在集群中的角色,版本信息。添加 -detialed 选项可以查看到额外的信息。

  members 命令的输出是基于 gossip协议是最终一致的。意味着,在任何时候,通过你本地 agent 看到的结果可能不是准确匹配 server 的状态。为了查看到一致的信息,使用HTTP API(将自动转发)到Consul Server上去进行查询:

  Consul 服务发现与配置

  除了HTTP API ,DNS 接口也可以用来查询节点。注意:你必须确定将你的 DNS 查询指向 Consul agent 的DNS服务器,这个默认运行在 8600 端口。DNS条目的格式(例如:”Armons-MacBook-Air.node.consul”)将在后面讲到。

停止 Agent

  你可以使用Ctrl-C 优雅的关闭Agent.。中断Agent之后你可以看到他离开了集群并关闭。

  在退出中,Consul 提醒其他集群成员,这个节点离开了。如果你强行杀掉进程。集群的其他成员应该能检测到这个节点失效了。当一个成员离开,他的服务和检测也会从目录中移除。当一个成员失效了,他的健康状况被简单的标记为危险,但是不会从目录中移除。Consul 会自动尝试对失效的节点进行重连。允许他从某些网络条件下恢复过来。离开的节点则不会再继续联系。

  此外,如果一个 agent 作为一个服务器,一个优雅的离开是很重要的,可以避免引起潜在的可用性故障影响达成一致性协议

  查看这里了解添加和移除server.# 注册服务

  在之前的步骤我们运行了第一个agent。看到了集群的成员,查询节点,在这里我们将注册我们的第一个服务并查询这些服务。

定义一个服务

  可以通过提供服务定义或者调用 HTTP API 来注册一个服务。服务定义文件是注册服务的最通用的方式。所以我们将在这一步使用这种方式。我们将会建立在前一步我们覆盖的代理配置。首先,为Consul配置创建一个目录。Consul 会载入配置文件夹里的所有配置文件。在Unix系统中通常类似 /etc/consul.d (.d 后缀意思是这个路径包含了一组配置文件)。

$ sudo mkdir /etc/consul.d

 然后,我们将编写服务定义配置文件。假设我们有一个名叫 web 的服务运行在 80 端口。另外,我们将给他设置一个标签。这样我们可以使用他作为额外的查询方式:

echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' > /etc/consul.d/web.json

 现在重启agent , 设置配置目录:

$ consul agent -dev -config-dir /etc/consul.d
==> Starting Consul agent...
...
[INFO] agent: Synced service 'web'
...

 你可能注意到了输出了 "synced" 了 web 这个服务。意思是这个 agent 从配置文件中载入了服务定义,并且成功注册到服务目录。

 如果你想注册多个服务,你应该在 Consul 配置目录创建多个服务定义文件。

具体后续的可以参看:http://vnzmi.com/2016/08/16/consul-quick-guide/

  后续会总结完善的

上一篇:Linux篇 | CentOS6、CentOS7、Ubuntu1804修改主机名、网卡、网络


下一篇:C++11 实现信号量(吃水果问题)