Consul入门

简介

为什么要用consul,这里就不详细介绍了,本文重点是Consul的搭建和使用过程。

Consul搭建

参考文献:http://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/

  1. 下载consul和consul UI

  官方地址:https://www.consul.io/,就一个consul执行文件

  2.  在consul执行文件的目录下打开命令

  3.  创建server方式

  consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=你的ip -dc=dc1

  

  相关配置信息说明

    a.  –server指定创建服务端

    b. –boostrap-expect 关于服务leader投票等相关的level设定

    c. –data-dir相关信息的文件路径,不指定的话,就在consul目录下生成

    d. –node节点名称

    e. –bind绑定的你服务器的IP

    f. –dc数据中心名称

    更多的配置信息说明,请参考官方内容,地址:https://www.consul.io/docs/agent/options.html

  4.  创建client方式

  如上,只是删掉了-server

  consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1

  5.  以配置文件形式创建

  命令后面加 -config-file=./conf

  consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1 -config-file=./conf

  ./conf目录下包含json格式的配置信息,将配置的设置都存放在该文件下,可以注册服务和healthCheck等等


{  "log_level": "TRACE",  "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==",  "service": {    "name": "web3",    "tags": ["master"],    "address": "127.0.0.1",    "port": 58807,    "checks": [{        "http": "http://127.0.0.1:60143/healthcheck",        "interval": "10s"}]}
}

  6.  搭建服务集群(服务器之间关联)

  Consul join 其中一个服务器的ip,如: consul join 10.5.133.144

  7.  配置web ui的方式

  Web ui是consul提供的可视化的服务web界面,可以对key/value和服务、节点进行操作

    a. 将下载好的web ui文件内容(包含一个html和一个static文件件)拷贝到consul所在目录下dist(自己创建)文件夹下

  

    ps. 在原来创建server或者client的时候,需要设置-ui-dir ./dist

    如: consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1 -config-file=./conf -ui-dir ./dist

    b. 打开127.0.0.1:8500 就可以打开界面了。

  8.  常见的consul 命令

  Consul members 查看服务集群的所有服务器

  Consul info 查看当前服务器的状况

  Consul leave 退出当前服务集群

服务注册

  1. 通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己(可以自定义服务客户端,调用api进行操作)

  2. 通过在配置文件中定义服务的方式进行注册


{  "service": {    "name": "web3",    "tags": ["master"],    "address": "127.0.0.1",    "port": 10000,    "checks": [{        "http": "http://localhost:10000/health",        "interval": "10s"}]}
}

  以上注册了一个服务名称为web3地址127.0.0.1端口10000,同时还注册了一个healthcheck。

服务发现

  1. 通过HTTP API查看存在哪些服务(自定义服务发现客户端)

  2. 通过consul agent内置的DNS服务(如果是windows系统可以下载dig工具,发现dns服务,ps. Windows系统不建议作为server)

  可以根据服务check的实时状态动态调整available服务节点列表

  dig @127.0.0.1 -p 8600 web3.service.consul SRV

服务发现HTTP API

http://www.codeweblog.com/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E7%B3%BB%E7%BB%9Fconsul-http-api/  

api 提供增删改查nodes、services、checks、configuration。

以下consul 的http api,距离,查看所有服务,打开地址如下:127.0.0.1:8500/v1/agent/services,就可以查看所有服务的信息

如上图,找到了一个名为"web3"的服务。

  1. api包含以下几部分内容

  kv - Key/Value存储

  agent - Agent控制

  catalog - 管理nodes和services

  health - 管理健康监测

  session - Session操作

  acl - ACL创建和管理

  event - 用户Events

  status - Consul系统状态

  2. agent的api

  和本地agent交互,用于服务注册和检查注册

/v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口)
/v1/agent/services : 返回本地agent注册的所有 服务
/v1/agent/members : 返回agent在集群的gossip pool中看到的成员
/v1/agent/self : 返回本地agent的配置和成员信息
/v1/agent/join/<address> : 触发本地agent加入node
/v1/agent/force-leave/<node>>: 强制删除node
/v1/agent/check/register : 在本地agent增加一个检查项,使用PUT方法传输一个json格式的数据
/v1/agent/check/deregister/<checkID> : 注销一个本地agent的检查项
/v1/agent/check/pass/<checkID> : 设置一个本地检查项的状态为passing
/v1/agent/check/warn/<checkID> : 设置一个本地检查项的状态为warning
/v1/agent/check/fail/<checkID> : 设置一个本地检查项的状态为critical
/v1/agent/service/register : 在本地agent增加一个新的服务项,使用PUT方法传输一个json格式的数据
/v1/agent/service/deregister/<serviceID> : 注销一个本地agent的服务项

  3. catalog 的api

  注册、注销nodes、services、checks

/v1/catalog/register : Registers a new node, service, or check
/v1/catalog/deregister : Deregisters a node, service, or check
/v1/catalog/datacenters : Lists known datacenters
/v1/catalog/nodes : Lists nodes in a given DC
/v1/catalog/services : Lists services in a given DC
/v1/catalog/service/<service> : Lists the nodes in a given service
/v1/catalog/node/<node> : Lists the services provided by a node

  4. health

  查询相关的健康信息

/v1/health/node/<node>: 返回node所定义的检查,可用参数?dc=
/v1/health/checks/<service>: 返回和服务相关联的检查,可用参数?dc=
/v1/health/service/<service>: 返回给定datacenter中给定node中service
/v1/health/state/<state>: 返回给定datacenter中指定状态的服务,state可以是"any", "unknown", "passing", "warning", or "critical",可用参数?dc=
  1. session

增删改查session信息

/v1/session/create: Creates a new session
/v1/session/destroy/<session>: Destroys a given session
/v1/session/info/<session>: Queries a given session
/v1/session/node/<node>: Lists sessions belonging to a node
/v1/session/list: Lists all the active sessions

  5. acl

  增删改查acl信息

/v1/acl/create: Creates a new token with policy
/v1/acl/update: Update the policy of a token
/v1/acl/destroy/<id>: Destroys a given token
/v1/acl/info/<id>: Queries the policy of a given token
/v1/acl/clone/<id>: Creates a new token by cloning an existing token
/v1/acl/list: Lists all the active tokens

  6. event

  触发event和查询已有event

/v1/event/fire/<name>: 触发一个新的event,用户event需要name和其他可选的参数,使用PUT方法
/v1/event/list: 返回agent知道的events

  7. status

  consul 集群的信息

/v1/status/leader : 返回当前集群的Raft leader
/v1/status/peers : 返回当前集群中同事

服务发现客户端

从nuget上下载consul包,里面包含consul的所有操作。

源码地址:https://github.com/PlayFab/consuldotnet/。

举例通过key获取value

1. 在UI添加一个key/value的内容(也可以在程序中添加)

2. 获取value代码如下

static void Main(string[] args){Console.WriteLine(HelloConsul().GetAwaiter().GetResult());Console.ReadLine();}        public static async Task<string> HelloConsul(){            using (var client = new ConsulClient()){                var getPair = await client.KV.Get("hello1");                return Encoding.UTF8.GetString(getPair.Response.Value, 0,getPair.Response.Value.Length);}   }


3. 结果如下:

更多服务发现客户端的内容,后续补上。

相关文章

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


原文地址:http://www.cnblogs.com/ruanyifeng/p/5550102.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Socket编程----通信是这样炼成的

转载自 Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的&#xff0c;其对网络提供了高度的支持&#xff0c;使得客户端和服务器的沟通变成了现实&#xff0c;而在网络编程中&#xff0c;使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的…

mysql级联复制转换成一主两从_一主两从转级联复制

一主两从 转 级联复制 示意图如下M ---> S1\ > M ---> S1 ---> S2\ --> S2如果有开启GTID操作起来方便多&#xff0c;GTID是唯一的&#xff0c;直接操作即可。如果使用file_name、position可以使用如下办法(现在还没开启gtid真的是无力吐槽)# 步骤1、# 现将S2的…

细说ASP.NET Core与OWIN的关系

前言 最近这段时间除了工作&#xff0c;所有的时间都是在移植我以前实现的一个Owin框架&#xff0c;相当移植到到Core的话肯定会有很多坑&#xff0c;这个大家都懂&#xff0c;以后几篇文章可能会围绕这个说下&#xff0c;暂时就叫《Dotnet Core踩坑记》吧&#xff0c;呵呵。 接…

mysql 外键和事务_Mysql (五)事务和外键

一、 什么是事务&#xff1a;简单说&#xff0c;所谓事务就是一组操作&#xff0c;这组操作要么都成功执行&#xff0c;要么都不执行。二、 事务的使用流程1. 第一步&#xff1a;开启事务&#xff0c;start transaction&#xff1b;2. 第二步&#xff1a;正常操作SQL语句&#…

微软发布正式版SQL Server 2016

微软于6.2 在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本&#xff08;GA&#xff09;&#xff0c;历时一年多&#xff0c;微软为该软件发布了多个公共预览版和候选版本&#xff0c;而今天最终版本终于上线了。在博客中&#xff0c;微软数据集团的企业副总裁 Josep…

怎样用bootsrapcol-md来实现四分屏_用会议平板提升会议效率,做好这两点

图片&#xff1a;皓丽编辑&#xff1a;好哩据相关科学研究显示&#xff0c;百分之 90% 的会议&#xff0c;完全可以在低于 30 分钟的时间内完成&#xff0c;而人的注意力集中的时间差不多也是在 40-45 分钟&#xff0c;所以提升会议效率&#xff0c;保持会议节奏的连续性和抓住…

JAVA 通过 Socket 实现 TCP 编程

转载自 JAVA 通过 Socket 实现 TCP 编程简介 TCP简介 TCP&#xff08;Transmission Control Protocol 传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793定义。在简化的计算机网络OSI模型中&#xff0c;它完成第四层…

Asp.net core与golang web简单对比测试

最近因为工作需要接触了go语言&#xff0c;又恰好asp.net core发布RC2&#xff0c;就想简单做个对比测试。 下面是测试环境: CPU&#xff1a;E3-1230 v2 内存&#xff1a;16G 电脑有点不给力 操作系统:Centos7.0(虚拟机单核2G内存) asp.net core rc2 golang v1.7beta1 下面是各…

mfc定义了变量仍提示未定义标识符_JavaScript-变量

好好学习&#xff0c;天天向上本章主要内容是&#xff1a;变量声明、命名规则、赋值变量变量&#xff08;variables&#xff09; 是计算机内存中存储数据的标识符&#xff0c;根据变量名称可以获取到内存中存 储的数据变量相当于一个容器&#xff0c;内部可以存储任意类型的数据…

Java基于socket服务实现UDP协议的方法

转载自 Java基于socket服务实现UDP协议的方法这篇文章主要介绍了Java基于socket服务实现UDP协议的方法,通过两个简单实例分析了java通过socket实现UDP发送与接收的技巧,需要的朋友可以参考下本文实例讲述了Java基于socket服务实现UDP协议的方法。分享给大家供大家参考。具体如下…

EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因

今天我们来聊聊EF的日志记录. 一个好的数据库操作记录不仅仅可以帮你记录用户的操作, 更应该可以帮助你获得效率低下的语句来帮你提高运行效率 废话不多说,我们开始 环境和相关技术 本文采用的环境与技术 系统:WIN7 数据库:SQL Server2008 相关技术:MVC5 EF6.0 简单的记录 …

日期相减 python_如果将excel的数字转化为日期(高级教程)

不知道大家有没有这样的体会&#xff0c;明明我们在单元格里输入的是一个日期&#xff0c;但是excel却提示我们输入的是一个数字&#xff0c;这个东西就很奇怪了&#xff0c;43471怎么就成了日期了那&#xff1f;实际上这和计算机的底层设置有关系&#xff0c;计算机是无法直接…

JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

转载自 JSOUP 教程—— Java爬虫&#xff0c;简易入门&#xff0c;秒杀htmlparser关于爬虫&#xff0c;之前一直用做第一个站的时候&#xff0c;记得那时候写的 爬虫 是爬sina 的数据&#xff0c;用的就是 htmlparser 可能是由于好奇和满足我当时的需求&#xff0c;那开始就各…

3到6年的.NETer应该掌握哪些知识

我们组的开发人力一直比较紧张&#xff0c;今年春节后&#xff0c;高层终于给了几个headcount&#xff0c;我们可以开始招人了。从三月初我们就开始找简历&#xff0c;渠道有拉钩&#xff0c;内推&#xff0c;我司自己的招聘网站和智联等。简历筛了很多&#xff0c;也打了很多电…

多边形上点的顺序排序_一种寻找多边形视觉中心的新算法

遇到的问题在一个多边形上放置文本标签或工具提示的最佳位置通常位于其“视觉中心”的某个位置&#xff0c;即多边形内部的一个点&#xff0c;周围有尽可能多的空间。计算这样一个中心首先想到的是多边形质心。你可以用一个简单快速的公式计算多边形中心&#xff0c;但如果形状…

通过Jexus 部署 dotnetcore版本MusicStore 示例程序

ASPNET Music Store application 是一个展示最新的.NET 平台&#xff08;包括.NET Core/Mono等&#xff09;上使用MVC 和Entity Framework的示例程序&#xff0c;本文将展示如何在CentOS上运行.NET Core版本的MusicStore&#xff0c;并通过Jexus对外发布。 上篇文章 《结合Jexu…

java爬虫之基于httpclient的简单Demo(二)

转载自 java爬虫之基于httpclient的简单Demo(二)延续demo1的 java爬虫的2种爬取方式&#xff08;HTTP||Socket&#xff09;简单Demo(一)&#xff0c;demo2出炉啦&#xff0c;大家想学爬虫都可以从这个网盘学习哦&#xff1a;https://pan.baidu.com/s/1pJJrcqJ#list/path%2F 免费…

神经网络中的最小二乘_深度神经网络:噪声中解读出科学

该研究介绍了一种基于深度神经网络的基本新方法&#xff0c;以基于已知的物理模型将函数形式拟合到噪声数据。来自美国橡树林国家实验室的Stephen Jesse领导的团队&#xff0c;提出了一种新的方法&#xff0c;可用来逆向解决问题&#xff0c;可从基于光谱成像数据的最小二乘拟合…

微软开放Holographic平台,意在统一VR的操作系统?

在刚刚结束的台北电脑展上&#xff0c;微软没有发布很多新品&#xff0c;而是宣布向第三方开放Windows Holographic&#xff08;全息&#xff09;平台&#xff0c;鼓励其他VR/AR头显使用该平台。近日外媒engadget发表文章&#xff0c;文中作者讲述了微软的野心&#xff0c;有意…

java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)

转载自 java爬虫的2种爬取方式&#xff08;HTTP||Socket&#xff09;简单Demo(一)最近在找java的小项目自己写着玩&#xff0c;但是找不到合适的&#xff0c;于是写开始学一点爬虫&#xff0c;自己也是感觉爬虫比较有趣。这里自己找了一个教程&#xff0c;这一次写的是基于Sock…