Consul的使用

​ 生产部署中,Consul安装在要注册服务的每个节点上。Consul有两种运行模式:客户端和服务器端,每个Consul数据中心必须至少有一个服务器,负责维护Consul状态,为了确保服务器故障,建议运行3-5台,性能和容错能力较好。客户端模式用来注册服务,运行状况检查并将查询转发到服务器的轻量级进程,客户端必须在Consul数据中心中运行服务的每个节点上运行,因为客户端是有关服务运行状况的真实来源。

Consul 运行命令

$ consul agent -dev #安装完consul后启动代理

$ consul members #查看数据成员方式一,通过gossip协议获取信息

$ curl localhost:8500/v1/catalog/nodes #查看数据成员方式二,请求会转发到server上

$ consul leave #停止代理

Consul服务注册

$ mkdir ./consul.d #创建配置目录

$ echo '{
"service": {
"name": "web",
"tags": [
"rails"
],
"port": 80
}
}' > ./consul.d/web.json #创建服务配置文件

$ consul agent -dev -enable-script-checks -config-dir=./consul.d #重启代理

$ curl localhost:8500/v1/catalog/service/service_name #查询服务

$ curl localhost:8500/v1/health/service/web?passing #对运行状况良好的服务实例进行过滤查询

$ echo '{
"service": {
"name": "web",
"tags": [
"rails"
],
"port": 80,
"check": {
"args": [
"curl",
"localhost"
],
"interval": "10s"
}
}
}' > ./consul.d/web.json #为服务注册健康检查

$ consul reload #重新加载

Consul Service Mesh连接服务

​ 除了使用HTTP API直接提供服务IP地址之外,Consul还可以通过随每个服务实例在本地部署的Sidecar代理将服务彼此连接。这种部署类型(控制服务实例之间的网络流量的本地Sidecar代理)是服务网格。

​ 有时将Consul的服务网格功能称为Consul Connect功能,由于Sidecar代理控制着所有服务到服务的流量,因此他们可以收集有关它们的度量标准并将其导出到Prometheus等第三方聚合器。

注册服务和代理

$ socat -v tcp-l:8181,fork exec:"/bin/cat" #启动socat服务充当上游服务(socat是回显服务)

$ echo '{
"service": {
"name": "socat",
"port": 8181,
"connect": {
"sidecar_service": {}
}
}
}' > ./consul.d/socat.json #注册一个服务 #connect字段将注册一个sidecar代理来处理此后端服务实例的流量

$ consul reload

$ consul connect proxy -sidecar-for socat #consul内置L4代理,启动代理进程,并指定其对应的服务实例和代理注册

注册从属服务和代理
$ echo '{
"service": {
"name": "web",
"connect": {
"sidecar_service": {
"proxy": {
"upstreams": [
{
"destination_name": "socat",
"local_bind_port": 9191
}
]
}
}
}
}
}' > ./consul.d/web.json #注册一个web下游服务,与socat不同的是,connect字段不是空的,它指定了web对上游服务socat的依赖,以及代理侦听的端口

$ consul reload

这将为服务注册一个sidecar代理,该代理web将侦听端口9191,如果我们运行的是真正的Web服务,它将在环回地址上与其代理通信。代理将加密其流量,并通过网络将其发送到socat服务的sidecar代理。Socat的代理将解密流量,并将其本地发送到端口8181上的环回地址上的socat。由于没有Web服务在运行,因此将通过在我们指定的端口上与其代理进行对话来假装为Web服务(9191)。

$ consul connect proxy -sidecar-for web #使用sidecar注册中的配置启用web代理

至此我们在端口9191上可以连接socat服务并进行通信。

控制服务之间的通信

上面服务连接成功是因为我们在-dev开发模式下,ACL系统为“全部允许”。

$ consul intention create -deny web socat #创建一个意图拒绝web到socat的访问

$ consul intention delete web socat #删除意图

将数据存储在Consul KV中

​ 除了提供服务发现,运行状况检查和保护网络流量外,Consul还包含一个密钥值存储,可以使用它来动态配置应用程序,协调服务,管理领导者选举或充当Vault的数据后端。

新增

$ consul kv put redis/config/minconns 1

$ consul kv put -flags=42 redis/config/users/admin abcd1234

查询

$ consul kv get redis/config/minconns

$ consul kv get -detailed redis/config/users/admin #输出详细信息

$ consul kv get -recurse #输出所有密钥 k:v形式,字典序

删除

$ consul kv delete redis/config/minconns

$ consul kv delete -recurse redis #删除所有redis开头的密钥

修改

$ consul kv put foo bar #原有信息会被覆盖

Consul数据中心

​ 当新的agent启动的时候,它们之间无感知,要将新代理添加到现有数据中心,需要为其提供数据中心中任何其他代理的IP地址,新的代理会加入数据中心,它们之间通过gossip协议通信。

搭建环境

​ 可以通过虚拟机来模拟分布式环境。

启动代理商

​ 下面是consul启动时一些参数介绍:

​ -server:以服务器模式启动

​ -bootstrp-expect:Consul服务器数据中心总共应该有多少台服务器

​ -node:节点名称

​ -bind:该代理将侦听其他领事成员进行通信的地址。

​ -data-dir:告诉consul代理它们应将状态存储在哪里

​ -config-dir:配置文件目录。默认/etc/consul.d

$ consul agent \
-server \
-bootstrap-expect=1 \
-node=agent-one \
-bind=172.20.20.10 \
-data-dir=/tmp/consul \
-config-dir=/etc/consul.d
$ consul agent \
-node=agent-two \
-bind=172.20.20.11 \
-enable-script-checks=true \
-data-dir=/tmp/consul \
-config-dir=/etc/consul.d

​ 在两个节点分别运行上述命令后,两个代理仍然彼此不了解,各自组成自己的但节点数据中心。

Join the agents

​ 在Consul服务器上运行命令 $ consul join 172.20.20.11。没有服务器,client无法运行,所有数据中心必须至少有一个在服务器模式下运行的代理,Consul才能正常运行。

​ 提示:要加入数据中心,Consul代理只需要了解其他现有成员(可以是客户端或服务器)即可。加入数据中心后,代理会自动彼此闲聊以传播完整的成员资格信息。

停止代理

​ 在运行它的终端窗口中通过Ctrl-c或发出consul leave命令停止代理。

Consul的使用的更多相关文章

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

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

  2. Mac OS、Ubuntu 安装及使用 Consul

    Consul 概念(摘录): Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,比如 Airbnb 的 SmartStac ...

  3. 使用C# 和Consul进行分布式系统协调

    随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式的服务,如何在分布式的系统中对这些服务做协调变成了一个很棘手的问题.今天我们就来看看如何使用C# ,利用开源对分布式服务 ...

  4. 分布式服务注册和发现consul 简要介绍

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

  5. 第二章 consul的安装和启动

    安装环境: mac:64bit(查看mac位数:打开终端-->"uname -a") consul_0.6.4_darwin_amd64.zip和consul_0.6.4_w ...

  6. 应用.Net+Consul维护RabbitMq的高可用性

    懒人学习的过程就是工作中老大让干啥让做啥就研究研究啥,国庆放假回来的周末老大通过钉钉给我布置了个任务, RabbitMQ高可用解决方案,我想说钉钉太坑了: 这是国庆过后9号周日晚上下班给的任务,我周一 ...

  7. Consul的一个更新:服务端节点故障后重连

    研究了一段时间Consul,想写个攻略来着,但太赖了而且表达能力非正常人...今天发现HashiCorp果然接纳大众意见改了点东西.. 场景是: 假如Consul集群内有三个Server Node 时 ...

  8. 搭建consul 集群

    1.   准备工作 a)      启动三台虚拟机 s1:10.1.7.141 s2:10.1.7.139 s3:10.1.7.138 b)      每台机器上在 /home新建文件夹 mkdir ...

  9. Centos 7 Docker、docker-compose、Registrator、Consul、Consul Template和Nginx实现高可扩展的Web框架

    安装所需软件 Docker Docker-compose 配置docker-compose.yml文件内容如下: #load balancer will automatically update th ...

  10. Consul Windows 安装

    下载文件https://www.consul.io/downloads.html, 解压完毕后只有一个consul文件 consul 启动一个 Agent consul agent -server - ...

随机推荐

  1. Android ContentProvider 启动分析

    对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分 ...

  2. SSL加密原理

    对称加密算法 对称加密算法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 非对称加密算法 非对称加密算法(RSA)是内容加密的一类算法,它有两个秘钥:公钥与私钥 ...

  3. CorelDRAW 条形码改不了字体如何解决?

    看到有朋友提问说CorelDRAW条码生成设置里面的字体不能更改,是灰色的,不能选择.这个默认字体怎么改? 出现问题:条码生成设置里面的字体不能更改,是灰色的,不能选择. 解决方法一:找到C盘字体文件 ...

  4. win10一行代码搭建本地html项目

    最近玩了下web项目,需要部署到本地查看效果. 一:准备 1.安装python或者安装node.js 2.html项目文件 二:python搭建 1.进入html文件的路径 2.通过python命令部 ...

  5. 灵彤彤女版PUA机构火了!“我花了8888报名学撩汉,却被导师骗去卖身。

    最近,几张女PUA机构的导师和课程海报在社交网络广泛刷屏. ​ 而社长觉得自己可以去潜心研究一下,为什么有女PUA机构的这种课程呢? 爱情的确是一门玄学. 精通此技能的女孩桃花不断,前任和现任无缝切换 ...

  6. 知识解析:C语言函数有一些什么?为你呈现最全函数大全

    大家双节快乐呀~国庆节过去了一半,大家放了几天假呀?玩的开心吗? 如果假日没有其他安排,不要宅在家虚度光阴哦~看看我的文章或者视频学习一些知识吧~   今天为大家分享C语言库函数知识. 以下图片以字母 ...

  7. Windows生产力工具推荐

    相信大部分同学还是Windows用户,作为一个长期Windows/MacOS双系统长期用户,Windows在用的好,工作效率也很高,下面就推荐几款Windows下面的生产力工具. utools 用过M ...

  8. [整理]qbxt集训10场考试 大 杂 烩 (后篇)

    前篇 Contest 6 A 两个数,第 \(i\) 轮从较大数(如果相等就是第一个)里减去 \(i\) ,问操作不能进行时两数分别为多少. 首先把大数减到和小数差不多,然后我们会发现接下来两数会轮流 ...

  9. 20190705_关于winform程序修改程序名后, 报未将对象引用设置到对象的实例

    winform做了一个小项目, 其中要用到数据库连接, 字符串, private string ConnStringSource = System.Configuration.Configuratio ...

  10. python3 通过 pybind11 使用Eigen加速代码

    python是很容易上手的编程语言,但是有些时候使用python编写的程序并不能保证其运行速度(例如:while 和 for),这个时候我们就需要借助c++等为我们的代码提速.下面是我使用pybind ...