[root@controller ~]# consul agent -dev -config-dir /etc/consul.d ==> Starting Consul agent... Version: '1.11.4' Node ID: '76590d82-0f5e-b8be-1248-ec541e4ab541' Node name: 'controller' Datacenter: 'dc1' (Segment: '<all>') Server: true (Bootstrap: false) Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false ==> Log data will now stream in as it occurs: 。。。。(省略)
5 集群成员
新开一个终端窗口运行consul members, 你可以看到Consul集群的成员.
[root@controller ~]# consul members Node Address Status Type Build Protocol DC Partition Segment controller 127.0.0.1:8301 alive server 1.11.4 2 dc1 default <all>
这个输出显示我们自己的节点.运行的地址,健康状态,自己在集群中的角色,版本信息.添加-detailed选项可以查看到额外的信息.
6 停止Agent
Ctrl-C
在退出中,Consul提醒其他集群成员,这个节点离开了.如果你强行杀掉进程.集群的其他成员应该能检测到这个节点失效了.当一个成员离开,他的服务和检测也会从目录中移除.当一个成员失效了,他的健康状况被简单的标记为危险,但是不会从目录中移除.Consul会自动尝试对失效的节点进行重连.允许他从某些网络条件下恢复过来.离开的节点则不会再继续联系.
7 注册服务
7.1 定义一个服务
可以通过提供服务定义或者调用HTTP API来注册一个服务.服务定义文件是注册服务的最通用的方式.
首先,为Consul配置创建一个目录.Consul会载入配置文件夹里的所有配置文件.centos 路径为 /etc/consul.d
然后,将编写服务定义配置文件.假设有一个名叫web的服务运行在 80端口.另外,我们将给他设置一个标签.这样我们可以使用他作为额外的查询方式:
echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \ >/etc/consul.d/web.json
重启agent , 设置配置目录:
consul agent -dev -config-dir /etc/consul.d ==> Starting Consul agent... ... [INFO] agent: Synced service 'web' ...
此时输出了 “synced” 了 web这个服务.意思是这个agent从配置文件中载入了服务定义,并且成功注册到服务目录.
7.2 查询服务
可以通过DNS或者HTTP的API来查询服务.
DNS API
在DNS API中,服务的DNS名字是 NAME.service.consul. 虽然是可配置的,但默认的所有DNS名字会都在consul命名空间下.这个子域告诉Consul,我们在查询服务,NAME则是服务的名称.
上面注册的Web服务.它的域名是 web.service.consul :
dig @127.0.0.1 -p 8600 web.service.consul
HTTP API
curl http://localhost:8500/v1/catalog/service/web [{"Node":"hdp2","Address":"10.0.0.52","ServiceID":"web","ServiceName":"web","ServiceTags":["rails"],"ServiceAddress":"","ServicePort":80,"ServiceEnableTagOverride":false,"CreateIndex":4,"ModifyIndex":254}]
7.3 更新服务
服务定义可以通过配置文件并发送SIGHUP给agent来进行更新.这样你可以让你在不关闭服务或者保持服务请求可用的情况下进行更新.
8 建立集群
当一个agent启动时,他开始不知道其他节点的信息,他是一个成员的孤立集群.为了了解其他集群成员这个agent必须加入一个已经存在的集群.要加入一个已经存在的集群,只需要知道一个已经存在的集群成员.通过与这个成员的沟通来发现其他成员,Consul agent可以加入任何agent而不只是出于server模式的agent.
启动了另外的2台主机, 192.168.143.192 和192.168.143.194,先安装consul
每个集群中的节点都必须要一个唯一的名字.Consul默认会使用机器的hostname.我们可以使用-node手动覆盖他.也可以使用-bind指定一个绑定的地址让Consul在这个地址上进行监听,这个地址必须可以被其他集群成员访问到.绑定地址不是必须提供,Consul选择第一个私有IP进行监听,不过最好还是指定一个.生产环境的服务器通常有多个网络接口.所以指定一个不会让Consul绑错网络接口.
第一个节点将扮演集群的唯一server,我们使用-server指定他.
最后,加入 config-dir选项,指定服务和健康检查定义文件存放的路径.
创建server
#创建文件夹 mkdir -p /consul/{config,data} #配置10.10.20.200节点 consul agent -server -bootstrap-expect=2 -data-dir=/consul/data -node=192.168.143.203 -bind=10.10.20.200 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui & [1] 20336 #配置10.10.20.194节点 consul agent -server -bootstrap-expect=2 -data-dir=/consul/data -node=192.168.143.194 -bind=10.10.20.194 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui & [1] 208893
参数解释:
-node:节点的名称 -bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址 -server:表示这个节点是个Server -bootstrap-expect:表示期望提供的Server节点数目。数目一达到,它就会被激活,然后就是leader了 -data-dir:Agent用于存储状态的数据目录,这是所有Agent所必需的 -datacenter:指明数据中心的名字,默认是"dc1"。同一数据中心中的节点应位于单个LAN上 -client:将Client接口(包括HTTP和DNS服务器)绑定到的地址 -ui:启动UI
创建client
consul agent -data-dir=/consul/data -node=192.168.143.192 -bind=10.10.20.192 -enable-script-checks=true -config-dir=/consul/config -client 0.0.0.0 -ui & [1] 160873
报错:
- [ERROR] agent.anti_entropy: failed to sync remote state: error=“No cluster leader”
未加入集群,就没有leader ,正常现象 - [ERROR] tain an address: Failed to start TCP listener on “10.10.20.192” port 8301: listen tcp 10.10.20.192:8301: bind: cannot assign requested address"
-bind=10.10.20.192这里要写内网IP - [ERROR] agent.anti_entropy: failed to sync remote state: error=“No known Consul servers”
client未加入集群,正常现象
加入集群
重开一个终端
除了203以外的节点:
[root@stone ~]# consul join 10.10.20.200 Successfully joined cluster by contacting 1 nodes.
正确输出:
2022-04-15T11:39:27.230+0800 [INFO] agent.server.serf.lan: serf: EventMemberJoin: 192.168.143.194 10.10.20.194 2022-04-15T11:39:27.230+0800 [INFO] agent.server: Adding LAN server: server="192.168.143.194 (Addr: tcp/10.10.20.194:8300) (DC: dc1)" 2022-04-15T11:39:27.230+0800 [INFO] agent.server: member joined, marking health alive: member=192.168.143.194 partition=default 2022-04-15T11:39:27.231+0800 [INFO] agent.server.serf.wan: serf: EventMemberJoin: 192.168.143.194.dc1 10.10.20.194 2022-04-15T11:39:27.231+0800 [INFO] agent.server: Handled event for server in area: event=member-join server=192.168.143.194.dc1 area=wan 2022-04-15T11:39:36.037+0800 [INFO] agent.server.serf.lan: serf: EventMemberJoin: 192.168.143.192 10.10.20.192 2022-04-15T11:39:36.037+0800 [INFO] agent.server: member joined, marking health alive: member=192.168.143.192 partition=default
验证:
root@controller ~]# consul members Node Address Status Type Build Protocol DC Partition Segment 192.168.143.194 10.10.20.194:8301 alive server 1.11.4 2 dc1 default <all> 192.168.143.203 10.10.20.200:8301 alive server 1.11.4 2 dc1 default <all> 192.168.143.192 10.10.20.192:8301 alive client 1.11.4 2 dc1 default <default> ### 最后的话 最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家! ### 资料预览 给大家整理的视频资料: ![](https://ucc.alicdn.com/images/user-upload-01/img_convert/a64708ed868f00a956c70a87547309eb.png) 给大家整理的电子书资料: ![](https://ucc.alicdn.com/images/user-upload-01/img_convert/b7613bedcba90267c681751b62455a3f.png) **如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!** **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** ,让我有持续创作的动力!** **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**