Consul 使用

Consul 使用http www jianshu com p b4aaf267f7ba 官网 Document nbsp https www consul io docs index html 一 介绍 Consul 有很多组件 但总的来说 它主要用来发现和配置服务 1 服务发现 Consul 的客户端可以 provide 一个 service 例如 api 或 mysql 其他客户端可以使用 Consul

(3)consul集群:

consul集群:当一个consul agent启动后,它不知道任何其他节点,要学习到集群中的其他节点,agent必须加入一个已经存在的集群(cluster)。要加入这样的集群,它只需要知道这个集群中的一个节点即可。它加入后,将会和这个member gossip(交谈)并迅速发现集群中的其他节点。一个consul agent可以加入任何类型的其他agent,而不只是那些运行于server mode的agent。

server节点的启动:

consul agent -server -bootstrap-expect 1 -node=agent-one -bind=10.0.209.123 -data-dir /tmp/consul -config-dir /etc/consul.d

-server 以server模式运行

-bootstrap-expect n:表示期望有多少个server nodes加入。这个选项的目的是delay the bootstrapping of the replicated log 直到所有的server都成功加入

-node=node-name 集群中的每个node必须有一个唯一的名称。默认情况下,Consul使用机器的hostname

-bind=ip 表示Consul监听的地址,而且它必须能够被集群中的其他节点访问。Consul默认会监听第一个private IP,但最好还是提供一个。生产设备上的服务器通常有好几个网卡,所以指定一个不会出错

-data-dir 指定数据目录

-config-dir指定配置文件夹,Consul会加载其中的所有文件

-datacenter 指定数据中心名称,默认是dc1

client节点的启动

consul agent -node=agent-two -bind=10.0.209.122 -data-dir /tmp/consul -config-dir /etc/consul.d

那如何在启动时自动加入一个cluster呢?

consul agent … -join 1.1.1.1 1.1.1.2 #或-retry-join

或者在配置文件中使用 start_join

(5)服务声明和查询:

注:虽然这里使用的是通过文件声明服务,但一般都是使用 HTTP API 动态地增加、移除和修改services。

(6)健康检查:

定义 Checks

一个检查可以通过提供一个check定义文件或调用HTTP API来注册

这里介绍使用check定义文件的方式

echo ‘{“check”: {“name”: “ping”,”script”: “ping -c1 google.com >/dev/null”,”interval”: “30s”}}’ >/etc/consul.d/ping.json

echo ‘{“service”: {“name”: “web”, “tags”: [“rails”], “port”: 80,”check”: {“script”:”curl 127.0.0.1 >/dev/null 2>&1″, “interval”: “10s”}}}’ >/etc/consul.d/web.json

第一个definition增加了一个host-level check,名字为ping。这个check每30秒运行一次,调用ping -c1 google.com . 基于脚本的健康检查,在运行脚本时使用的用户就是启动consul agent的用户。如果脚本以非0值退出,那么这个node被标记为unhealthy。

第二个definition修改了web service,增加了一个check,每10秒运行一次,使用curl来验证web server是否可访问。如果脚本以非0值退出,那么这个service被标记为unhealthy。

consul reload #重新载入配置文件

然后我们可以看到service.web is now critical,因为实际上我们还没有在第二个节点上运行web server,check失败了。

?recurse表示取得遍历所有的key的值,在删除时也一样

curl http://127.0.0.1:8500/v1/kv/web/key1 #单个key的查询

curl -X DELETE http://127.0.0.1:8500/v1/kv/web/sub?recurse #删除

更新值时consul提供了一个Check-and-Set操作,通过使用?cas=[ModifyIndex],这个值在get的结果里通过 ModifyIndex提供。如果该值不是get结果里的 ModifyIndex ,那么更新操作将失败。

例如上面的例子中,假设当前的web/key1的ModifyIndex是97,那么第一次更新成功,第二次更新就会失败。

curl “http://127.0.0.1:8500/v1/kv/web/key2?index=101&wait=5s” #表示等待web/key2的ModifyIndex大于等于101,并且最多等5秒,然后返回当前的值

另外,查询是还可以指定?dc=xx,默认是查询agent所在的Datacenter,注意到每个Datacenter都有自己的kv系统,并且没有内置的replication。

consul reload:触发重新加载配置文件。等于kill -1或kill -HUP

consul configtest -config-file 或 -config-dir #只验证配置文件,不真正启动agent。

consul kv delete/export/get/import/put #kv操作

consul event #fire一个自定义的user event到整个Datacenter。它们可以用于自动化部署、重启services、或执行其他协同动作。events可以通过使用watch的方式被处理。 event通过gossip协议传播,不保证一定传播到。不像其他的大部分consul data(它们都通过consensus协议被replicated),event数据是通过gossip 一点一点传播的。这意味着它没有被持久化并且没有顺序(例如fire两个event,不代表后面fire的就一定后收到)。 同时event的payload也有限制,但是没有一个准确的值,一般应该小于100bytes。

consul exec #在集群中所有的节点上远程执行并返回命令回显。例如,可以运行uptime命令在所有提供web service的机制上。 远程执行通过在KV中存储一个job,然后通过event系统通知节点有新的job并执行。 注意命令的输出结果不要太多,输出结果也是存储在KV中,如果有一个大的集群,这可能会让集群不可达。

consul lock #提供了一种简单的分布式锁机制。锁或semaphore通过给定的前缀在KV里创建,并且只有持有时,子进程才调用。如果lock丢失了或通信破坏了,子进程就被终止了。

consul maint #提供了对service和node的maintenance mode的control。使用这个命令,可以 标记某个节点提供的一个service或者某个节点整体为“under maintenance” 。在这种模式下,service和node将不会出现在DNS查询结果里或API结果里。实际上这让service或node离开了available “healthy” nodes 池。 实际上,maintenance mode是在health check为critical status时激活,取消注册health check后去激活。

consul operator #提供集群级别的工具,例如与Raft subsystem交互。使用这个命令要特别特别小心。因为不适当的使用可能导致Consul中断甚至丢失数据。

consul rtt #估算两个节点之间网络往返时间。round trip time

consul watch #监控一个节点的data view(list of nodes,services members,key value等等)的变化,并且调用一个进程(使用data view的最新的数据)。如果没有指定process,当前值会被dumped到stdout。

  • default : 如果没有指定,default一般都是强一致的。除了短暂的leader重选时的空窗期。
  • consistent : 一般不要使用这种模式,除非你实在不能忍受 a stale read。
  • stale : 这个模式允许任意的server来服务读请求,而不管它是不是leader。这意味着read可以任意的stale(不新鲜)。然而一般来说result都会在50ms内被同步完成。
    要想切换这些模式,应该在请求url中提供 stale 或 consistent 参数,如果同时提供会报错。
    为了支持数据的staleness不新鲜程度,response的HTTP Header中会包含 X-Consul-LastContact(表示最近和leader node的通信时间毫秒数)、X-Consul-KnownLeader(表明是否有已知的leader) 字段。这些数据可以被client用来判断数据的不新鲜程度并作出相应的动作决策。
    6、默认情况下,所有的response输出都是最小化的JSON格式的。如果请求url中传递了pretty参数,会返回格式化的JSON数据。
    7、HTTP 方法:Consul的API目标是RESTful,虽然有一些例外。API响应标准的HTTP GET、PUT、DELETE方法。例子:
    curl –request PUT –data ‘hello world!’ https://consul.rocks/v1/kv/foo
    8、有些库文件可以用来更方便的调用API。一些是官方的,一些是第三方提供的。
    https://www.consul.io/api/libraries-and-sdks.html
    9、具体的API请自行查看。
    10、一些常用的:
    agent相关的API










    列出所有的members

    curl http://10.245.6.90:8500/v1/agent/members

    列出所有注册到本地agent的checks,本地知道的checks可能和catalog报告的不一致。

    curl http://10.245.6.90:8500/v1/agent/checks

    注册check到本地agent。checks可以是script、HTTP、TCP或TTL 类型。agent负责管理check的状态并同步到catalog。

    curl –request PUT –data @payload.json http://10.245.6.90:8500/v1/agent/check/register

    取消注册check到本地agent。agent会小心的从catalog中取消注册check。如果提供的check ID不存在,则不采取任何动作

    curl –request PUT http://10.245.6.90:8500/v1/agent/check/deregister/:check_id

    TTL check pass

    curl http://10.245.6.90:8500/v1/agent/check/pass/:check_id

    TTL check warn

    curl http://10.245.6.90:8500/v1/agent/check/warn/:check_id

    TTL check fail

    curl http://10.245.6.90:8500/v1/agent/check/fail/:check_id

    TTL check update

    curl http://10.245.6.90:8500/v1/agent/check/update/:check_id

    列出所有注册到本地agent的服务

    curl http://10.245.6.90:8500/v1/agent/services

    注册服务到本地agent、可以同时提供健康检查。agent负责管理服务的状态,并同步到global catalog

    curl –request PUT –data @payload.json http://10.245.6.90:8500/v1/agent/service/register

    取消注册服务到本地agent,如果服务不存在,则不采取任何动作。agent负责从catalog中删除该服务。如果该服务关联了一个check,那么check也会被删除。

    curl –request PUT http://10.245.6.90:8500/v1/agent/service/deregister/:service_id

    将服务设置为maintenance mode,这个模式下的服务被标记为不可达而且对外不可见。而且服务的这个状态会被持久化,当agent重启时服务也会自动恢复到这个状态。

    curl –request PUT http://10.245.6.90:8500/v1/agent/service/maintenance/:service_id

    catalog相关的API

    注册Entity,是较低级别的注册或更新entries到catalog。一般都是使用agent endpoints来注册。

    curl –request PUT –data @payload.json http://10.245.6.90:8500/v1/catalog/register

    取消注册Entity,

    curl –request PUT –data @payload.json http://10.245.6.90:8500/v1/catalog/register

    列出所有的datacenters

    curl http://10.245.6.90:8500/v1/catalog/datacenters

    列出所有的nodes

    curl http://10.245.6.90:8500/v1/catalog/nodes

    列出所有的服务

    curl http://10.245.6.90:8500/v1/catalog/services

    列出提供某服务的所有节点

    curl http://10.245.6.90:8500/v1/catalog/service/:service

    列出提供某节点提供的所有服务 :node是”Node”字段的值 不是”ID”的值

    curl http://10.245.6.90:8500/v1/catalog/node/:node

    KV相关的API

    读取 Key 的值

    curl http://10.245.6.90:8500/v1/kv/:key

    创建/更新 key ,返回的内容只有true或false

    curl –request PUT –data ‘xxx’ http://10.245.6.90:8500/v1/kv/:key

    删除key ,返回的内容只有true或false

    curl –request DELETE http://10.245.6.90:8500/v1/kv/:key

    Health相关的API

    列出某个节点的所有Checks

    curl http://10.245.6.90:8500/v1/health/node/:node

    列出某服务的所有Checks

    curl http://10.245.6.90:8500/v1/health/checks/:service

    列出某服务的所有节点

    curl http://10.245.6.90:8500/v1/health/service/:service

    列出某状态的所有Checks

    curl http://10.245.6.90:8500/v1/health/state/:state

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212761.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:19
下一篇 2026年3月18日 下午7:20


相关推荐

  • idea2021.5.5激活码[在线序列号]

    idea2021.5.5激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    104
  • filter builder_苹果数据分析代码怎么看

    filter builder_苹果数据分析代码怎么看在FilterDispatcher中首先关注的方法是init()和doFilter(),两个有用的局部变量(或者状态)[code="java"]privateFilterConfigfilterConfig;protectedDispatcherdispatcher;[/code]filterConfig用来向filter传递信息,提供了四个方法:[code="java"]…

    2022年8月16日
    7
  • Hive函数row_number实现[通俗易懂]

    Hive函数row_number实现[通俗易懂]需求:查询一批用户最后三次登陆时间,ip数据row_number实现”’importorg.apache.hadoop.hive.ql.exec.UDF;publicclassRowNumberextendsUDF{privatestaticintMAX_VALUE=50;privatestaticStringcomparedColumn[]=newString[

    2022年5月8日
    141
  • mybatis log plugin 激活码[最新免费获取][通俗易懂]

    (mybatis log plugin 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M3Q9SD5XW-eyJsa…

    2022年3月28日
    43
  • java properties读取配置文件_jdk的path变量应该怎么设置

    java properties读取配置文件_jdk的path变量应该怎么设置JettywarNamewarWEB-INFjetty-webxmlTomcatMETA-INFcontextxmlServerxml默认contextxmlURL:http://hostname.com/contextPath/servletPath/pathInfoJetty如果没有contextPath,则默认使用root上下文,root上下文的路

    2025年12月13日
    9
  • 结构体和类的区别

    结构体和类的区别结构体和类的区别 在做一个项目时 使用了较多的结构体 并且存在一些结构体的嵌套 即某结构体成员集合包含另一个结构体等 总是出现一些奇怪的错误 才终于下决心好好分析一下到底类和结构体有啥不同 虽然它们很相似 但确实有很大的不同 用不好难免出的问题会比较多 现总结一下 一 结构体和类非常相似 1 定义和使用非常相似 例子如下 publicstruct st

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号