Consul是一个网络工具,提供了一个功能齐全的service-mesh控制层,服务发现,配置,和分区。
一.安装
1.安装consul
下载consul,这里我下载的是linux版本的,
下载下来的是一个zip压缩文件,解压后得到一个consul二进制文件,解压后,确保consul文件可被环境变量访问
# 解压consul
$ unzip consul_1.7.2_linux_amd64.zip
# 查看PATH变量
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
#我这里把consul文件放在/usr/local/bin目录下,保证consul可以访问到
$ mv consul /usr/local/bin
2.验证是否安装成功,在命令行中输入consul
$ consul
usage: consul [--version] [--help] <command> [<args>]
Available commands are:
agent Runs a Consul agent
event Fire a new event
...
如果您得到一个无法找到consul的错误,说明你的PATH环境变量没有正确设置。请确保您的PATH变量包含安装了consul的目录
二.运行consul代理
安装领事后,你需要启动consul代理。以下将以开发模式运行consul代理,这种模式不安全,也不具有可伸缩性,但是可以让你轻松体验consul的大多数功能,而不需要额外的配置。你还将知道如何优雅地关闭consul代理
服务端和客户端代理
在生产环境中,可以在服务器或客户端模式下运行每个consul代理。每个consul数据中心必须至少有一个服务器,负责维护consul的状态。这包括关于其他consul服务器和客户端的信息、可用于发现的服务以及允许哪些服务与哪些其他服务进行通信。
为了确保即使服务器发生故障也能维护consul的状态,您应该始终在生产环境中运行3或5个服务器。服务器的奇数(不超过5个)在性能和容错之间取得平衡
非服务器代理在客户端模式下运行。客户机是一个轻量级进程,它注册服务、运行健康检查并将查询转发到服务器。客户端必须运行在运行服务的consul数据中心的每个节点上,因为客户端是服务健康状况的真实来源。
当你准备在生产使用时,可以在部署指南中找到关于服务器和客户端的生产部署的更多指导。现在,让我们以开发模式启动本地代理,这是一种内存服务器模式,为便于使用启用了一些公共特性(尽管存在安全风险),并且关闭了所有持久性选项。
启动consul代理
在开发模式下启动consul代理。
$ consul agent -dev
==> Starting Consul agent...
Version: 'v1.7.2'
Node ID: '58b5abd3-4071-f5d5-bf6d-d87e0e7fb079'
Node name: 'alias'
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:
2020-03-18T20:14:44.575+0800 [DEBUG] agent: Using random ID as node ID: id=58b5abd3-4071-f5d5-bf6d-d87e0e7fb079
2020-03-18T20:14:44.575+0800 [DEBUG] agent.tlsutil: Update: version=1
2020-03-18T20:14:44.576+0800 [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
2020-03-18T20:14:44.576+0800 [INFO] agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:58b5abd3-4071-f5d5-bf6d-d87e0e7fb079 Address:127.0.0.1:8300}]"
2020-03-18T20:14:44.576+0800 [INFO] agent.server.serf.wan: serf: EventMemberJoin: alias.dc1 127.0.0.1
2020-03-18T20:14:44.576+0800 [INFO] agent.server.serf.lan: serf: EventMemberJoin: alias 127.0.0.1
2020-03-18T20:14:44.577+0800 [INFO] agent: Started DNS server: address=127.0.0.1:8600 network=udp
2020-03-18T20:14:44.577+0800 [INFO] agent.server.raft: entering follower state: follower="Node at 127.0.0.1:8300 [Follower]" leader=
2020-03-18T20:14:44.579+0800 [INFO] agent.server: Adding LAN server: server="alias (Addr: tcp/127.0.0.1:8300) (DC: dc1)"
2020-03-18T20:14:44.579+0800 [INFO] agent.server: Handled event for server in area: event=member-join server=alias.dc1 area=wan
2020-03-18T20:14:44.580+0800 [INFO] agent: Started DNS server: address=127.0.0.1:8600 network=tcp
2020-03-18T20:14:44.581+0800 [INFO] agent: Started HTTP server: address=127.0.0.1:8500 network=tcp
2020-03-18T20:14:44.581+0800 [INFO] agent: started state syncer
==> Consul agent running!
2020-03-18T20:14:44.581+0800 [INFO] agent: Started gRPC server: address=127.0.0.1:8502 network=tcp
2020-03-18T20:14:44.614+0800 [WARN] agent.server.raft: heartbeat timeout reached, starting election: last-leader=
2020-03-18T20:14:44.614+0800 [INFO] agent.server.raft: entering candidate state: node="Node at 127.0.0.1:8300 [Candidate]" term=2
2020-03-18T20:14:44.615+0800 [DEBUG] agent.server.raft: votes: needed=1
2020-03-18T20:14:44.615+0800 [DEBUG] agent.server.raft: vote granted: from=58b5abd3-4071-f5d5-bf6d-d87e0e7fb079 term=2 tally=1
2020-03-18T20:14:44.615+0800 [INFO] agent.server.raft: election won: tally=1
2020-03-18T20:14:44.615+0800 [INFO] agent.server.raft: entering leader state: leader="Node at 127.0.0.1:8300 [Leader]"
2020-03-18T20:14:44.615+0800 [INFO] agent.server: cluster leadership acquired
启动日志显示,consul代理已经启动,并正在传输一些日志数据。他们还报告说,代理正在作为服务器运行,并声称为leader。此外,本地代理已被标记为数据中心的健康成员。
Datacenter Members
在新的终端窗口中运行consul members命令,检查consul数据中心的成员关系。输出列出了数据中心中的代理。稍后我们将介绍如何将领事代理连接在一起,但目前只有一个成员(当前的机器)。
$ consul members
Node Address Status Type Build Protocol DC Segment
alias 127.0.0.1:8301 alive server 1.7.2 2 dc1 <all>
输出显示出你的代理、IP地址、健康状态、代理在数据中心中的角色以及一些版本信息。你可以使用-detailed
标记来发现额外的元数据。
mem