前往小程序,Get更优阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 >初识Consul

初识Consul

作者头像
一条老狗
发布2019-12-26 11:46:50
1.6K0
发布2019-12-26 11:46:50
举报
文章被收录于专栏: 极客运维

Consul是什么?

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。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是一个分布式高可用的系统。 Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个leader。虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失。每个数据中心建议配置一个server集群。

Consul部署

Consul用Golang实现,因此具有天然可移植性(支持 Linux、windows 和macOS)。安装包仅包含一个可执行文件(这是由golang语言特性决定的)。Consul安装非常简单,只需要下载对应系统的软件包并解压后就可使用。

常见以Linux平台为例:

代码语言:javascript
复制
$ wget https://releases.hashicorp.com/consul/0.8.5/consul_0.8.5_linux_amd64.zip
$ unzip consul_0.8.5_linux_amd64.zip
$ mv consul /usr/local/bin/

安装完即可执行命令验证:

代码语言:javascript
复制
$ consul
usage: consul [--version] [--help] <command> [<args>]
Available commands are:
  agent          Runs a Consul agent
  event          Fire a new event   exec           Executes a command on Consul nodes
  force-leave    Forces a member of the cluster to enter the "left" state
  info           Provides debugging information for operators.
  join           Tell Consul agent to join cluster
  keygen         Generates a new encryption key
  keyring        Manages gossip layer encryption keys
  kv             Interact with the key-value store
  leave          Gracefully leaves the Consul cluster and shuts down
  lock           Execute a command holding a lock
  maint          Controls node or service maintenance mode
  members        Lists the members of a Consul cluster
  monitor        Stream logs from a Consul agent
  operator       Provides cluster-level tools for Consul operators
  reload         Triggers the agent to reload configuration files
  rtt            Estimates network round trip time between nodes
  snapshot       Saves, restores and inspects snapshots of Consul server state
  validate       Validate config files/directories
  version        Prints the Consul version
  watch          Watch for changes in Consul

开发模式

consul 开发者模式,可以快速开启单节点的 consul服务,具有完整功能,方便开发测试。

代码语言:javascript
复制
consul agent -dev

consul members 命令查看当前集群的节点情况

代码语言:javascript
复制
dev@ubuntu ~$ consul members
Node    Address         Status  Type    Build  Protocol  DC
ubuntu  127.0.0.1:8301  alive   server  0.7.2  2         dc1

HTTP API

members命令选项的输出是基于gossip协议的并且其内容是最终一致。也就是说,在任何时候你在本地代理看到的内容可能与当前服务器中的状态并不是绝对一致的。

如果需要强一致性的状态信息,使用HTTP API向Consul服务器发送请求:

代码语言:javascript
复制
dev@ubuntu ~$ curl localhost:8500/v1/catalog/nodes
[    {
       "Node": "ubuntu",
       "Address": "127.0.0.1",
       "TaggedAddresses": {
             "lan": "127.0.0.1",
             "wan": "127.0.0.1"        },
        "CreateIndex": 4,
       "ModifyIndex": 5    }]

服务可以通过配置文件注册,也可以通过HTTP API 添加。这里以配置文件定义服务:

代码语言:javascript
复制
cd ~/consul// 创建etc 目录用于存放配置文件mkdir etc// 创建web.json 配置文件echo '{"service": {"name": "web", "tags": ["nginx"], "port": 80}}' | tee ~/consul/etc/web.json// 重启consul,并指定配置文件目录consul agent -dev -config-dir=/home/dev/consul/etc

WEB界面

Consul自带一个界面美观,功能强大的,开箱即用的Web界面。通过该界面我们可以查看所有的服务以及节点,查看所有的健康监测及其当前的状态,以及读取和设置键/值数据。

该界面被映射到/ui上,和HTTP API使用相同的端口。默认就是http://localhost:8500/ui

服务注册

Consul会加载配置目录中的所有配置文件,配置文件是以.json结尾,并且以字典顺序加载。

代码语言:javascript
复制
# 创建配置目录$ mkdir /etc/consul.d# 创建一个服务定义配置文件,假设有一个名为web服务,它运行在80端口。$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' >/etc/consul.d/web.json

用指定配置文件启动服务

代码语言:javascript
复制
$ consul agent -dev -bind=192.168.50.210 -config-dir /etc/consul.d/
==> Starting Consul agent...
==> Consul agent running!

查询服务

一旦agent启动并且服务同步了.我们可以通过DNS或者HTTP的API来查询服务.

DNS API

让我们首先使用DNS API来查询.在DNS API中,服务的DNS名字是 NAME.service.consul. 虽然是可配置的,但默认的所有DNS名字会都在consul命名空间下.这个子域告诉Consul,我们在查询服务,NAME则是服务的名称. 对于我们上面注册的Web服务.它的域名是 web.service.consul :

代码语言:javascript
复制
$ dig @127.0.0.1 -p 8600  rails.web.service.consul
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @127.0.0.1 -p 8600 rails.web.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44287;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;rails.web.service.consul.    IN    A
;; ANSWER SECTION:
rails.web.service.consul. 0    IN    A    192.168.2.210;; Query time: 0 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1);; WHEN: Tue May 09 10:58:16 CST 2017;; MSG SIZE  rcvd: 58

HTTP API

除了DNS API之外,HTTP API也可以用来进行服务查询:

代码语言:javascript
复制
$ curl http://localhost:8500/v1/catalog/service/web[    {        "ID": "b76ff298-accd-05ff-8c64-5d79d866dfa9",        "Node": "dev-master-01",        "Address": "192.168.50.210",        "TaggedAddresses": {
           "lan": "192.168.50.210",
           "wan": "192.168.50.210"        },
       "NodeMeta": {},
       "ServiceID": "web",
       "ServiceName": "web",
       "ServiceTags": [
           "rails"        ],
       "ServiceAddress": "",
       "ServicePort": 80,
       "ServiceEnableTagOverride": false,
       "CreateIndex": 7,
       "ModifyIndex": 7    }]

调用HTTP API进行定义

Consul提供RESTful HTTP API. API可对节点、服务、健康检查、配置等执行CRUD操作(CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete))。其语法类似solr和elasticsearch的接口语法。

Consul Endpoint主要支持以下接口:

  • acl – 访问控制列表
  • agent – Agent控制
  • catalog – 管理nodes和services
  • coordinate – 网络协同
  • event – 用户事件
  • health – 管理健康监测
  • kv – K/V存储
  • query - Prepared Queries
  • session – 管理会话
  • status – Consul系统状态

具体的API使用语法可参照文档:https://www.consul.io/api/index.html,我就不贴demo了。

本文参与  腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-02,如有侵权请联系  cloudcommunity@tencent.com 删除

本文分享自 极客运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与  腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
免费体验 产品介绍 产品文档
对象存储COS新用户低至1元!
领券
问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

玻璃钢生产厂家校园玻璃钢雕塑报价表绍兴动物玻璃钢雕塑定做价格上海特色商场美陈研发河南创意玻璃钢雕塑设计安丘玻璃钢雕塑瓷厂艺志新玻璃钢雕塑网组合式玻璃钢花盆供货商怎么看雕塑是不是玻璃钢大型商场美陈ppt温州玻璃钢花盆有哪些商场春季美陈创意菏泽室内玻璃钢景观雕塑厂家甘肃卡通雕塑玻璃钢监利玻璃钢花盆花器清远玻璃钢熊猫雕塑厂家东莞led发光玻璃钢雕塑昭通市玻璃钢雕塑生产厂家江西玻璃钢雕塑之家通山玻璃钢造型雕塑深圳艺术商场美陈价格学校玻璃钢抽象艺术雕塑摆件水 商场美陈装饰贵阳玻璃钢雕塑招聘信息专业的玻璃钢雕塑公司山东佛像玻璃钢雕塑定做价格舟山玻璃钢雕塑公司有哪些抚州玻璃钢雕塑定制鞍山批售沈阳玻璃钢花盆玻璃钢草莓门头雕塑玻璃钢招牌雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化