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 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 服务发现与配置的更多相关文章
- Consul 服务发现和配置
Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...
- consul服务发现和配置共享的软件,
Consul 是什么 consul是一个支持多数据中心分布式高可用服务发现和配置共享的服务软件,由HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2. ...
- Redola.Rpc 集成 Consul 服务发现
Redola.Rpc 解决了什么问题? Redola.Rpc 是一个使用 C# 开发的 RPC 框架,代码开源在 GitHub 上.目前版本仅支持 .NET Framework 4.6 以上版本,未来 ...
- 微服务(入门三):netcore ocelot api网关结合consul服务发现
简介 api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接. ocelot是基于netcore开发的开源API网关项目,功能强大,使用方便,它 ...
- .NET Core微服务实施之Consul服务发现与治理
.NET Core微服务实施之Consul服务发现与治理 Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downl ...
- .NetCore Cap 注册 Consul 服务发现
注册服务发现 需要使用Cap中的UseDiscovery方法 具体用法如下 var capConsulConfig = Configuration.GetSection("CapConsul ...
- 基于Docker的Consul服务发现集群搭建
在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...
- 扩展gRPC支持consul服务发现和Polly策略
gRPC由于需要用工具生成代码实现,可开发性不是很高,在扩展这方面不是很友好 最近研究了下,进行了扩展,不需要额外的工具生成,直接使用默认Grpc.Tools生成的代理类即可 相关源码在文章底部 客户 ...
- 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 ...
随机推荐
- 20172325 2017-2018-2 《Java程序设计》第五周学习总结
20172325 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.布尔表达式的值只有真或假,表达式的结果决定了下一步将要执行的语句. 2.循环语句可以用在 ...
- 【CSAPP笔记】3. 浮点数
回想起刚学C语言时,我对浮点数的印象大概是"能够表示小数"的数据类型.还死记硬背过例如什么"小数用double存,用%f输出"这类的话.实际上呢,浮点数可以用这 ...
- just_sort
★实验任务 给定两个序列 a b,序列 a 原先是一个单调递增的正数序列,但是由于某些 原因,使得序列乱序了,并且一些数丢失了(用 0 表示).经过数据恢复后,找 到了正数序列 b ,且序列 a 中 ...
- 处理Git不能上传大于100M文件问题
记录一下自己工作遇到的问题,免得下次再遇到了还到处网上查资料解决. 自己的项目的版本控制用的是Git,代码仓库在github托管.项目里用到了百度导航SDK,由于百度导航SDK有了新版本,于是就更新到 ...
- TCP系列55—拥塞控制—18、其他拥塞控制算法及相关内容概述
前面我们演示分析了100+个wireshark TCP实例,拥塞控制部分也介绍常见的拥塞处理场景以及4种拥塞撤销机制,但是我们一直使用的都是reno拥塞控制算法.实际上拥塞控制发展到今天已经有了各种各 ...
- 性能测试问题_tomcat占用内存很高,响应速度很慢
Cronolog 1. 问题描述 Tomcat占用服务器内存过大导致访问变慢 2. 问题原因 查看catalina.out文件过大,写日志时占用内存过大 3. 解决 ...
- office2013 激活方法
1.秘钥码激活 可以淘宝上买一个. 2.KMS激活软件激活 帖子地址 http://tieba.baidu.com/p/3855281630 Office 2013 Professional Plus ...
- [转帖] 知乎: 为什么品牌机器里面的VTX都是关闭的..
为何品牌机BIOS中的硬件虚拟化都是默认关闭的? 知乎老狼原创: https://www.zhihu.com/question/40381254/answer/499617881 谢邀.先说结论, ...
- java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ClassLoadingException
下载高版本的: hibernate-commons-annotations-5.0.1.Final.jar 低版本缺包
- facenet模型训练
做下记录,脚本如下: 对比 python3 src/compare.py ../models/-/ ../faces/pyimgs/dashenlin/ytwRkvSdG1000058.png ../ ...