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

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

集群成员

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

  

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

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

  

  除了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/

  后续会总结完善的

Consul 服务发现与配置的更多相关文章

  1. Consul 服务发现和配置

    Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...

  2. consul服务发现和配置共享的软件,

    Consul 是什么 consul是一个支持多数据中心分布式高可用服务发现和配置共享的服务软件,由HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2. ...

  3. Redola.Rpc 集成 Consul 服务发现

    Redola.Rpc 解决了什么问题? Redola.Rpc 是一个使用 C# 开发的 RPC 框架,代码开源在 GitHub 上.目前版本仅支持 .NET Framework 4.6 以上版本,未来 ...

  4. 微服务(入门三):netcore ocelot api网关结合consul服务发现

    简介 api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接. ocelot是基于netcore开发的开源API网关项目,功能强大,使用方便,它 ...

  5. .NET Core微服务实施之Consul服务发现与治理

    .NET Core微服务实施之Consul服务发现与治理   Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downl ...

  6. .NetCore Cap 注册 Consul 服务发现

    注册服务发现 需要使用Cap中的UseDiscovery方法 具体用法如下 var capConsulConfig = Configuration.GetSection("CapConsul ...

  7. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  8. 扩展gRPC支持consul服务发现和Polly策略

    gRPC由于需要用工具生成代码实现,可开发性不是很高,在扩展这方面不是很友好 最近研究了下,进行了扩展,不需要额外的工具生成,直接使用默认Grpc.Tools生成的代理类即可 相关源码在文章底部 客户 ...

  9. 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片

    目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 ...

随机推荐

  1. 北航MOOC系统Android客户端NABC

    北航MOOC手机客户端NABC分析 1) N (Need 需求) MOOC是Massive Open Online Course的缩写,通常被译为大型开放式网络课程,它最早在08年的时候由一位加拿大的 ...

  2. [buaa-SE-2017]个人作业-Week2

    个人作业-Week2 一.代码复审Checklist 1.概要部分 1.1 代码能符合需求和规格说明么? 本次作业的需求可以分成基本的功能实现和大规模数据下程序的健壮性,以及少量的异常处理能力,也就是 ...

  3. ListView高效分页

    使用控件自带的分页功能时,会先将所查询的数据全部加载出来,若数据量较大,则造成浏览器端等待时间过长. 然而在庞大的数据量,用户所需要的不过是那么几条,甚至只要其中的一条数据,所以,为了减少开销,每次只 ...

  4. 团队编程--MP3播放器

    设计思路: 这次的作业是一个MP3播放器,它是一个团队项目.由于我们都没接触过这类的编程.刚开始的时候我们是不知道从什么地方着手的.经过我们的商量我们决定从现在市场主流的音乐播放器上找到几个主要的功能 ...

  5. 阅读 DPDK 中文论文两则

    基于DPDK的高效数据包捕获技术分析与应用 本文应用场景 网络安全领域的数据包捕获技术,对系统有高性能需求,要在短时间内成功收集.分析.处理大量数据,实时捕获效率低下. 旧有传统数据包处理机制 BPF ...

  6. [图的遍历&多标准] 1087. All Roads Lead to Rome (30)

    1087. All Roads Lead to Rome (30) Indeed there are many different tourist routes from our city to Ro ...

  7. 蜗牛慢慢爬 LeetCode 15. 3Sum [Difficulty: Medium]

    题目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...

  8. Delphi 获取Ip地址的方法总结

    通过注册表获取或修改Ip 想到Windows会把系统网卡相关信息存入注册表,肯定可通过注册表读取具体ip信息.大致思路是找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\W ...

  9. Linux_Nginx 安装

    官网:http://nginx.org/ 1.下载http://nginx.org/download/nginx-1.14.0.tar.gz 2.查看详情 [zwesy@localhost ~]$ l ...

  10. C++模板常用功能讲解

    前言 泛型编程是C++继面向对象编程之后的又一个重点,是为了编写与具体类型无关的代码.而模板是泛型编程的基础.模板简单来理解,可以看作是用宏来实现的,事实上确实有人用宏来实现了模板类似的功能.模板,也 ...