本节将介绍基础知识,有意省略一些不必要的细节,可以快速了解Consul的工作方式。
向Consul提供服务的每个节点都运行着Consul的代理,当用来发现服务 或者 获取配置的键值对数据时,代理可以不需要。代理负责节点上的服务以及节点本身的健康检测。
代理与一台或多台Consul服务器通信。Consul服务器是存储和复制数据的地方。服务器本身选举一个领导者。虽然Consul可以在一台服务器上运行,但建议3到5个节点,以避免发生故障导致数据丢失。建议为每个数据中心都使用Consul服务器集群。
服务器维护一个目录,该目录是通过汇总代理提交的数据生成的。该目录维护着集群的高级视图,包括哪些服务可用,哪些节点运行这些服务,运行状况信息等等。
需要发现其他服务或节点的基础组件,可以查询任何Consul服务器或任何Consul代理。代理将查询自动转发到服务器。
每个数据中心运行一个Consul服务器集群。当发出跨数据中心的服务发现或配置请求时,本地Consul服务器将请求转发到远程数据中心并返回结果。
Consul的安装我这里安装为了环境方便,采用的是docker的方式,之前也尝试过虚拟机,笔记本物理机等等,都不如用docker安装方便。
-
docker pull consul
网络慢的,可能需要执行大约几分钟的时间,可以配置docker镜像的方式解决,我配置了阿里镜像
-
➜ docker images -f 'reference=consul'
-
REPOSITORY TAG IMAGE ID CREATED SIZE
-
consul latest 2823bc69f80f 4 weeks ago 120MB
-
➜ docker images -f 'reference=consul'
-
REPOSITORY TAG IMAGE ID CREATED SIZE
-
consul latest 2823bc69f80f 4 weeks ago 120MB
-d: 表示后台启动
-p: 表示映射本机的8500和8600到docker容器的8500和8600/udp端口
最后一行就是consul 启动服务器的命令
因为刚才是后台启动的,也看不到日志情况,可以通过下面的方式查看
-
➜ docker logs d2806ac2b7e1 // 后面的这个id就是容器的id,可以通过 docker -ps -l 查看
看到这样的日志,说明就是启动没问题的
-
==> Starting Consul agent...
-
Version: '1.9.1'
-
Node ID: '5cea9bb5-53f2-e71e-1a46-b23f188da307'
-
Node name: 'server-1'
-
Datacenter: 'dc1' (Segment: '<all>')
-
Server: true (Bootstrap: true)
-
Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
-
Cluster Addr: 172.17.0.2 (LAN: 8301, WAN: 8302)
-
Encrypt: Gossip: false, TLS-Outgoing: false, TLS
-
....
-
==> Consul agent running!
-
....
现在服务端启动了,接下来应该要启动一个客户端去连接这个服务端,这里有个问题,我怎么知道我启动这个服务端的IP地址和端口号,docker提供了可以直接执行容器内Consul命令的方式。
-
➜ docker exec d2806ac2b7e1 consul members
-
Node Address Status Type Build Protocol DC Segment
-
server-1 172.17.0.2:8301 alive server 1.9.1 2 dc1 <all>
当然你也可以直接进去到容器内部,进去容器内部,使用的是exec命令
-
docker exec -it d2806ac2b7e1 /bin/sh
-
//然后执行
-
consul members
docker执行容器内支持的命令方式为:
-
docker exec <container_id> consul members
这里发现 服务端的地址是172.17.0.2:8301
-
docker run
-
-
consul agent -node=client-1 -join=172.17.0.2
看到下面的输出说明没有问题,注意这里的name是指的容器参数
-
==> Starting Consul agent...
-
==> Joining cluster...
-
Join completed. Synced with 1 initial agents
-
==> Consul agent running!
-
Version: 'v1.4.4'
-
Node ID: '4b6da3c6-b13f-eba2-2b78-446ffa627633'
-
Node name: 'client-1'
-
Datacenter: 'dc1' (Segment: '')
-
Server: false (Bootstrap: false)
-
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
-
Cluster Addr: 172.17.0.4 (LAN: 8301, WAN: 8302)
-
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
通过再次在容器中执行consul Members命令来检查客户端是否已加入
-
docker exec d2806ac2b7e1 consul members
发现已经变成两个了,并且状态都是可用状态
-
docker exec d2806ac2b7e1 consul members
-
Node Address Status Type Build Protocol DC Segment
-
server-1 172.17.0.2:8301 alive server 1.9.1 2 dc1 <all>
-
client-1 172.17.0.3:8301 alive client 1.9.1 2 dc1 <default>
现在有了一个小的数据中心,就可以注册服务或者配置数据玩了。

(编辑:应用网_丽江站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|