微服务管理|Consul 安装、配置与使用

发布时间 2024-01-04 00:32:24作者: 漫思

微服务管理|Consul 安装、配置与使用

2022-05-263,185阅读8分钟
 
专栏: 
Mac 开发工具
 

本文已参与「新人创作礼」活动,一起开启掘金创作之路

Consul

  • Consul概述 consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务,consul属于微服务架构的基础设置中用于发现和配置服务的一个工具。Consul提供如下的几个核心功能:

    • 服务发现:Consul的某些客户端可以提供一个服务,其他客户端可以使用Consul去发现这个服务的提供者。
    • 健康检查:Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务,比如心跳包的检测。
    • 键值存储:应用实例可以使用Consul提供的分层键值存储,比如动态配置,特征标记,协作等。通过HTTP API的方式进行获取。
    • 多数据中心:Consul对多数据中心有非常好的支持。
  • 官方网站: 可以访问www.consul.io/ 查看Consul的相关介绍,获取相关资料。

  • 安装: 在官方文档中,点击Download按钮,进入下载软件界面www.consul.io/downloads.h… ,选择自己本机系统的类型,如下图所示:

image.png

brew 安装太慢了,这里下载二进制文件安装,mac选择Amd64下载

Consul环境配置

  • 1、将下载的consul_1.12.1_darwin_amd64.zip进行解压,解压后得到可执行文件consul。

  • 2、将consul可执行文件拷贝到电脑本地的环境变量中。

    • Unix系统中:可以拷贝到~/bin或**/usr/local/bin**目录下,这两个目录是常见的安装目录。
    • Windows系统:可以将consul安装到**%PATH%**所对应的目录路径中。 以macOS系统为例,属于unix系统,将consul拷贝到/usr/local/bin目录下,如图所示: 

image.png

  • 3、测试配置成功 完成consul的环境配置后,即表示已经将consul完成了安装。可以通过在命令行中运行consul指令验证是否安装成功。打开命令行工具,输入如下指令:

    consul

image.png 在终端中输入consul指令,出现如上指令用法及参数提示,即表示consul安装成功。 如果得到的是**-bash: consul: command not found的错误,则表示path**没有正确设置,需要重新检查consul可执行文件所在路径是否添加到了环境变量PATH中。

Consul启动

安装配置好Consul以后,我们可以通过简单的命令启动consul。先来看最简单的启动方式:

consul agent -dev

在新终端中,执行如上操作。

 
ini
复制代码
istars@wangmingxingdeMacBook-Pro ~ % consul agent -dev

==> Starting Consul agent...

           Version: '1.12.1'

           Node ID: 'fc472dc7-f894-f969-91fc-ae5933a6a2d2'

         Node name: 'wangmingxingdeMacBook-Pro.local'

        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:

\


2022-05-26T15:15:32.343+0800 [WARN]  agent: Node name "wangmingxingdeMacBook-Pro.local" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.

2022-05-26T15:15:32.353+0800 [WARN]  agent.auto_config: Node name "wangmingxingdeMacBook-Pro.local" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.

2022-05-26T15:15:32.370+0800 [INFO]  agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:fc472dc7-f894-f969-91fc-ae5933a6a2d2 Address:127.0.0.1:8300}]"

2022-05-26T15:15:32.371+0800 [INFO]  agent.server.raft: entering follower state: follower="Node at 127.0.0.1:8300 [Follower]" leader=

2022-05-26T15:15:32.373+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: wangmingxingdeMacBook-Pro.local.dc1 127.0.0.1

2022-05-26T15:15:32.374+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: wangmingxingdeMacBook-Pro.local 127.0.0.1

2022-05-26T15:15:32.374+0800 [INFO]  agent.router: Initializing LAN area manager

2022-05-26T15:15:32.375+0800 [INFO]  agent.server: Adding LAN server: server="wangmingxingdeMacBook-Pro.local (Addr: tcp/127.0.0.1:8300) (DC: dc1)"

2022-05-26T15:15:32.377+0800 [INFO]  agent.server.autopilot: reconciliation now disabled

2022-05-26T15:15:32.379+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=wangmingxingdeMacBook-Pro.local.dc1 area=wan

2022-05-26T15:15:32.380+0800 [WARN]  agent: [core]grpc: addrConn.createTransport failed to connect to {dc1-127.0.0.1:8300 wangmingxingdeMacBook-Pro.local.dc1 <nil> 0 <nil>}. Err: connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:0->127.0.0.1:8300: operation was canceled". Reconnecting...

2022-05-26T15:15:32.380+0800 [WARN]  agent: [core]grpc: addrConn.createTransport failed to connect to {dc1-127.0.0.1:8300 wangmingxingdeMacBook-Pro.local <nil> 0 <nil>}. Err: connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:0->127.0.0.1:8300: operation was canceled". Reconnecting...

2022-05-26T15:15:32.380+0800 [WARN]  agent: [core]grpc: addrConn.createTransport failed to connect to {dc1-127.0.0.1:8300 wangmingxingdeMacBook-Pro.local <nil> 0 <nil>}. Err: connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:0->127.0.0.1:8300: operation was canceled". Reconnecting...

2022-05-26T15:15:32.384+0800 [DEBUG] agent.server.autopilot: autopilot is now running

2022-05-26T15:15:32.384+0800 [DEBUG] agent.server.autopilot: state update routine is now running

2022-05-26T15:15:32.388+0800 [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=tcp

2022-05-26T15:15:32.388+0800 [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=udp

2022-05-26T15:15:32.389+0800 [INFO]  agent: Starting server: address=127.0.0.1:8500 network=tcp protocol=http

2022-05-26T15:15:32.390+0800 [INFO]  agent: Started gRPC server: address=127.0.0.1:8502 network=tcp

2022-05-26T15:15:32.390+0800 [INFO]  agent: started state syncer

2022-05-26T15:15:32.390+0800 [INFO]  agent: Consul agent running!

2022-05-26T15:15:32.435+0800 [WARN]  agent.server.raft: heartbeat timeout reached, starting election: last-leader=

2022-05-26T15:15:32.437+0800 [INFO]  agent.server.raft: entering candidate state: node="Node at 127.0.0.1:8300 [Candidate]" term=2

2022-05-26T15:15:32.437+0800 [DEBUG] agent.server.raft: votes: needed=1

2022-05-26T15:15:32.437+0800 [DEBUG] agent.server.raft: vote granted: from=fc472dc7-f894-f969-91fc-ae5933a6a2d2 term=2 tally=1

2022-05-26T15:15:32.437+0800 [INFO]  agent.server.raft: election won: tally=1

2022-05-26T15:15:32.437+0800 [INFO]  agent.server.raft: entering leader state: leader="Node at 127.0.0.1:8300 [Leader]"

2022-05-26T15:15:32.438+0800 [INFO]  agent.server: cluster leadership acquired

2022-05-26T15:15:32.438+0800 [INFO]  agent.server: New leader elected: payload=wangmingxingdeMacBook-Pro.local

2022-05-26T15:15:32.441+0800 [INFO]  agent.server.autopilot: reconciliation now enabled

2022-05-26T15:15:32.442+0800 [INFO]  agent.leader: started routine: routine="federation state anti-entropy"

2022-05-26T15:15:32.442+0800 [INFO]  agent.leader: started routine: routine="federation state pruning"

2022-05-26T15:15:32.444+0800 [DEBUG] connect.ca.consul: consul CA provider configured: id=fb:50:9b:45:1a:65:15:c1:68:57:73:5f:da:cd:b8:0d:0f:e2:26:eb:68:66:43:11:85:9d:67:a9:7a:56:9c:b9 is_primary=true

2022-05-26T15:15:32.447+0800 [INFO]  connect.ca: initialized primary datacenter CA with provider: provider=consul

2022-05-26T15:15:32.447+0800 [INFO]  agent.leader: started routine: routine="intermediate cert renew watch"

2022-05-26T15:15:32.447+0800 [INFO]  agent.leader: started routine: routine="CA root pruning"

2022-05-26T15:15:32.447+0800 [INFO]  agent.leader: started routine: routine="CA root expiration metric"

2022-05-26T15:15:32.447+0800 [INFO]  agent.leader: started routine: routine="CA signing expiration metric"

2022-05-26T15:15:32.447+0800 [INFO]  agent.leader: started routine: routine="virtual IP version check"

2022-05-26T15:15:32.448+0800 [INFO]  agent.leader: stopping routine: routine="virtual IP version check"

2022-05-26T15:15:32.448+0800 [INFO]  agent.leader: stopped routine: routine="virtual IP version check"

2022-05-26T15:15:32.448+0800 [DEBUG] agent.server: successfully established leadership: duration=9.55609ms

2022-05-26T15:15:32.448+0800 [INFO]  agent.server: member joined, marking health alive: member=wangmingxingdeMacBook-Pro.local partition=default

2022-05-26T15:15:32.491+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth

2022-05-26T15:15:32.492+0800 [INFO]  agent: Synced node info

2022-05-26T15:15:32.492+0800 [DEBUG] agent: Node info in sync

2022-05-26T15:15:32.690+0800 [INFO]  agent.server: federation state anti-entropy synced

2022-05-26T15:15:33.354+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth

2022-05-26T15:15:33.354+0800 [DEBUG] agent: Node info in sync

2022-05-26T15:16:59.955+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth

2022-05-26T15:16:59.955+0800 [DEBUG] agent: Node info in sync

上面贴出了Consul启动的输出日志,对日志做如下分析和说明:

  • -dev:dev是consul多种启动模式的一种,dev是development的缩写,代表的是开发模式,该种启动模式仅仅是为了快速便捷的启动单节点consul,比如当前环境。
  • Consul agent running!:表示该consul节点正常运行起来。
  • Datacenter:’dc1′ 表示当前节点所属的数据中心的名称为dc1。
  • Server:true(bootstrap:false) 表示该节点属于Server角色。Consul节点统称为agent,有两类:Client、Server。
  • raft: Heartbeat timeout from "" reached, starting election Raft算法开始进行Leader节点选举。
  • consul: cluster leadership acquired、consul: New leader elected: localhost Leader节点选举结束,本地唯一的节点被选举为leader节点。
  • consul: member ‘localhost’ joined, marking health alive 目前localhost节点是一个健康正常的节点

查看consul节点信息

在consul启动后,可以通过命令查看节点的信息。在原有已经启动consul的终端窗口之外,重新开启新的终端窗口,执行如下命令:

consul members

image.png

输出日志说明:

  • Address:节点地址
  • Status:alive表示节点健康运行
  • Type:节点的类型,有两种:server、client
  • DC:Datacenter的缩写,dc1表示该节点属于Datacenter1

UI界面访问

终端命令行下启动consul的dev模式后,通过members命令查看节点信息,除此以外,还可以使用Http的浏览器访问的模式,查看节点信息。 consul启动,正常运行后,打开浏览器,在地址栏中键入:http://localhost:8500

可以查看节点信息,如下图

image.png

image.png

停止服务

在节点运行终端中执行:ctrl + c,表示退出节点运行。

image.png

退出节点运行。

consul dev模式示意图

上诉consul agent -dev模式下的启动与运行consul节点。集群中只包含一个节点,唯一的节点被选举成为Leader节点。

单节点dev模式示意图