1. 什么是Consul?

Consul 有很多组件,对于整体来说,它是一个服务发现和服务配置的工具,它提供了一下特性:

  • 服务发现
  • 健康检查
  • KV存储
  • 多数据中心

2.安装Consul

以下是在 CentOS 系统上操作

下载

wget https://releases.hashicorp.com/consul/1.1.0/consul_1.1.0_linux_amd64.zip

查看版本

consul -v
Consul v1.1.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

3.启动 Agent

使用dev模式启动。

$ consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.1.0'
Node ID: 'a94cdf4f-e36d-9bef-927c-61c1d14500cd'
Node name: 'bogon'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false ==> Log data will now stream in as it occurs: 2018/06/23 00:03:45 [DEBUG] agent: Using random ID "a94cdf4f-e36d-9bef-927c-61c1d14500cd" as node ID
2018/06/23 00:03:45 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:a94cdf4f-e36d-9bef-927c-61c1d14500cd Address:127.0.0.1:8300}]
2018/06/23 00:03:45 [INFO] serf: EventMemberJoin: bogon.dc1 127.0.0.1
2018/06/23 00:03:45 [INFO] serf: EventMemberJoin: bogon 127.0.0.1
2018/06/23 00:03:45 [INFO] agent: Started DNS server 127.0.0.1:8600 (udp)
2018/06/23 00:03:45 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
2018/06/23 00:03:45 [INFO] consul: Adding LAN server bogon (Addr: tcp/127.0.0.1:8300) (DC: dc1)
2018/06/23 00:03:45 [INFO] consul: Handled member-join event for server "bogon.dc1" in area "wan"
2018/06/23 00:03:45 [INFO] agent: Started DNS server 127.0.0.1:8600 (tcp)
2018/06/23 00:03:45 [INFO] agent: Started HTTP server on 127.0.0.1:8500 (tcp)
2018/06/23 00:03:45 [INFO] agent: started state syncer
2018/06/23 00:03:45 [WARN] raft: Heartbeat timeout from "" reached, starting election
2018/06/23 00:03:45 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
2018/06/23 00:03:45 [DEBUG] raft: Votes needed: 1
2018/06/23 00:03:45 [DEBUG] raft: Vote granted from a94cdf4f-e36d-9bef-927c-61c1d14500cd in term 2. Tally: 1
2018/06/23 00:03:45 [INFO] raft: Election won. Tally: 1
2018/06/23 00:03:45 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
2018/06/23 00:03:45 [INFO] consul: cluster leadership acquired
2018/06/23 00:03:45 [DEBUG] consul: Skipping self join check for "bogon" since the cluster is too small
2018/06/23 00:03:45 [INFO] consul: member 'bogon' joined, marking health alive
2018/06/23 00:03:45 [INFO] consul: New leader elected: bogon
2018/06/23 00:03:45 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2018/06/23 00:03:45 [INFO] agent: Synced node info
2018/06/23 00:03:46 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2018/06/23 00:03:46 [DEBUG] agent: Node info in sync
2018/06/23 00:03:46 [DEBUG] agent: Node info in sync

4. 查看集群成员

在另外一个终端使用 consul members, 可以查看集群成员信息。

$ consul members
Node Address Status Type Build Protocol DC Segment
bogon 127.0.0.1:8301 alive server 1.1.0 2 dc1 <all>

也可以通过HTTP API 来查看Consul成员信息

$ curl localhost:8500/v1/catalog/nodes
[
{
"ID": "a94cdf4f-e36d-9bef-927c-61c1d14500cd",
"Node": "bogon",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
},
"CreateIndex": 5,
"ModifyIndex": 6
}
]

5.服务注册

定义一个服务步骤

$ sudo mkdir /etc/consul.d

定义一个服务名为web, 运行端口为80

$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \
| sudo tee /etc/consul.d/web.json

重启agent,并制定配置目录

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

下面通过HTTP API的方式来查询服务

$ curl http://localhost:8500/v1/catalog/service/web
[
{
"ID": "68530a9c-2434-9a80-32ac-e4e455086655",
"Node": "bogon",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"NodeMeta": {
"consul-network-segment": ""
},
"ServiceID": "web",
"ServiceName": "web",
"ServiceTags": [
"rails"
],
"ServiceAddress": "",
"ServiceMeta": {},
"ServicePort": 80,
"ServiceEnableTagOverride": false,
"CreateIndex": 6,
"ModifyIndex": 6
}
]

同时也可以通过下面的HTTP API 来查询服务的健康状况

$ curl 'http://localhost:8500/v1/health/service/web?passing'
[
{
"Node": {
"ID": "68530a9c-2434-9a80-32ac-e4e455086655",
"Node": "bogon",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
},
"CreateIndex": 5,
"ModifyIndex": 6
},
"Service": {
"ID": "web",
"Service": "web",
"Tags": [
"rails"
],
"Address": "",
"Meta": null,
"Port": 80,
"EnableTagOverride": false,
"CreateIndex": 6,
"ModifyIndex": 6
},
"Checks": [
{
"Node": "bogon",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "Agent alive and reachable",
"ServiceID": "",
"ServiceName": "",
"ServiceTags": [],
"Definition": {},
"CreateIndex": 5,
"ModifyIndex": 5
}
]
}
]

更新服务

可以通过修改配置文件和发送SIGHUP 到agent, 更新服务的信息。

另外,也可以通过HTTP API 的方式动态添加或者移除服务信息。

Consul 入门的更多相关文章

  1. Consul 入门-运行

    HashiCorp Consul 是由 HashiCorp 公司开发的,它是一家专注于 DevOps 工具链的公司,旗下的明星级产品包括 Vagrant.Terraform.Vault.Nomad 以 ...

  2. Spring Cloud Consul入门

    1. Consul介绍 Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用.Consul是HashiCorp( Vagrant的创建者)开发的一个服务发现与配置项目,用G ...

  3. Consul入门

    推荐: Consul 原理和使用简介 启动:consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node Litao-Mac ...

  4. Consul 入门(二)

    KV 存储 通过命令行操作 $ consul kv put hello world # 设置数据 Success! Data written to: hello $ consul kv get hel ...

  5. Consul入门初识

    Consul Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCrop公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源 ...

  6. 01. Consul 入门

    简介 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册 ...

  7. Consul 入门-初识

    背景 现状:单体架构逐渐被微服务架构所替代,原本两个功能模被拆分成了两个服务.原本两个模块块间的通信只需要函数调用就能够实现,现在却做不到了,因为它们不在同一个进程中,甚至两个服务都可能部署到不同的机 ...

  8. Spring Cloud Consul 入门指引

    1 概述 Spring Cloud Consul 项目为 Spring Boot 应用程序提供了与 Consul 的轻松集成. Consul 是一个工具,它提供组件来解决微服务架构中一些最常见的挑战: ...

  9. Consul 服务注册与服务发现

    上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...

随机推荐

  1. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

    第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/class ...

  2. 总结获取原生JS(javascript)基本操作

    var a = document.getElementByIdx_x_x("dom"); jsCopy(a);//调用清理空格的函数 var b = a.childNodes;// ...

  3. 微信小程序 选项 、时间日期选择器

    wxml: <view class="section" > <picker bindchange="bindPickerChange" val ...

  4. yun rpm

    RPM:RedHat Package Manager的简称,是一种数据库记录的方式的管理机制.当需要安装的软件的依赖软件都已经安装,则继续安装,否则不予安装. 特点:1.已经编译并打包完成2.软件的信 ...

  5. c++容器 STL

    2019-01-24 22:30:32 记录学习PAT的一些知识,有待更新 注:本文是对Algorithm 算法笔记 的总结 C++标准库模板(Standard Template Library,ST ...

  6. axis2调用webService几种方式

    主要有三种方式: 第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 java代码: package samples.q ...

  7. POJ 3845 Fractal(计算几何の旋转缩放)

    Description Fractals are really cool mathematical objects. They have a lot of interesting properties ...

  8. Java 抽象类和Final关键字

    抽象类 用abstract关键字来修饰一个类时,这个类叫抽象类: 用abstract关键字来修饰一个方法时,该方法叫做抽象方法. 含有抽象方法的类必须被定义而为抽象类,抽象类必须被继承,抽象方法必须被 ...

  9. HTTP 请求头 & 响应头

    HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的, 但Co ...

  10. Java中 Auto-boxing/unboxing

    Java 中 Auto-boxing/unboxing 机制,在合适的时机自动打包,解包. 1. 自动将基础类型转换为对象: 2. 自动将对象转换为基础类型: Demo_1: import java. ...