一架梯子,一头程序猿,仰望星空!

Consul安装与部署


Consul安装比较友好,安装包解压缩后只有一个执行程序consul。

下载安装包

官网安装包下载地址:

https://www.consul.io/downloads.html

根据自己的操作系统类型,选择对应的安装包下载即可。

教程以linux为例。

将下载的安装包,解压缩到自己喜欢的目录,例如:

# 创建consul安装目录
mkdir -p ~/local/consul

# 例如,我们下载的压缩包是 consul_xxx_linux_amd64.zip
# 将压缩包内容,解压缩到~/local/consul目录
unzip -o -d ~/local/consul consul_xxx_linux_amd64.zip

为了方便搜索到命令,将~/local/consul添加到PATH环境变量中。

提示:windows系统的安装类似,下载windows版本的安装包,解压缩就得到consul程序了,同样为方便命令行工具可以找到consul命令,把你的consul安装目录,添加到windows的PATH环境变量中。

打开终端输入下面命令,如果没有提示找不到命令,就说明安装成功了。

consul

输出类似内容:

usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    agent          Runs a Consul agent
    event          Fire a new event

...

consul命令介绍

通过前面,consul架构章节说明,我们知道consul主要分server和client两个组件,server负责核心数据的存储和处理数据的读写,通过client可以操作server提供的接口。

consul将server和client两个组件的实现都融合在一个叫consul的命令程序中,所以我们安装consul后,只有一个consul命令。

在consul中,无论server还是client都叫做agent,通过命令参数区分,我们运行的是server还是client。

提示:默认情况下运行的是client,下面章节会介绍如何启动server和client。

Consul默认地址

Consul部署好以后,默认对外提供接口的地址是:127.0.0.1:8500 或者 consul agent ip地址 + 8500端口号。

单机部署开发模式

作为本地开发环境,我们没有必要配置consul集群,只要一条命令就可以,以开发模式启动consul服务。

例如:

consul agent -dev

-dev参数的意思,就是以开发模式启动consul,同时具备server和client的功能,不需要单独部署server和client。

启动后得到类似的输出:

==> Starting Consul agent...
           Version: 'v1.6.1'
           Node ID: '9a8474ac-fd30-36d4-bb6f-e1a4960ab3d3'
         Node name: 'tizidembp'
        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
.....

提示:如果本地开发,只要启动开发模式即可,当然不能关闭命令窗口,否则就退出了,你可以使用consul agent -dev & 命令,在后台启动consul。

基本命令

查询集群节点

consul members

打印出集群中所有的节点信息,可以通过Status状态查看节点是否正常运行。

输出:

Node        Address         Status  Type    Build  Protocol  DC   Segment
tizidembp  127.0.0.1:8301  alive   server  1.6.1  2         dc1  <all>

我们只是启动开发模式,只有一个节点。

重新加载配置文件

consul reload

如果我们修改了配置文件,可以使用这个命令,前面单机模式,我们什么配置文件也不需要,以默认参数启动了。

优雅关闭节点

consul leave

优雅的关闭当前机器上的节点,如果你有多个节点,需要每个节点都要执行关闭命令,否则只是关闭机器中的一个节点。

查询所有注册的服务

consul catalog services

生产环境部署

生产环境节点配置,主要分server节点和client节点,至少部署一个server节点,为了高可用,通常建议部署3-5个server节点,client节点任意,client节点数量可以跟我们服务的节点数量一致,每台服务的节点部署一个client。

下图是单数据中心的部署架构:

部署server节点

通过配置文件配置启动server节点。

mkdir  /etc/consul.d
# 给目录授权
chown -R consul:consul /etc/consul.d
# 创建server配置文件
touch /etc/consul.d/server.hcl
# 给文件授权
chmod 640 /etc/consul.d/server.hcl

配置文件内容:/etc/consul.d/server.hcl

datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
server = true
bootstrap_expect = 3
retry_join = ["172.16.0.11"]

参数说明:

  • datacenter - 数据中心名字,唯一
  • data_dir - 数据目录,有权限读写即可
  • encrypt - consul节点之间通信的密钥
  • server - 代表当前agent以服务端模式启动
  • bootstrap_expect - 代表需要部署3个server节点。
  • retry_join - 其他server节点地址(支持ip地址、域名),填一个即可,会自动加入集群。

提示:启动第一个server节点的时候,不需要配置retry_join参数,因为自己是目前唯一的server节点,没有其他server节点。

启动server命令:

~/local/consul/consul agent -config-dir=/etc/consul.d/

参数说明:

  • -config-dir - 指定配置文件所在目录

注意你安装consul的目录,可能跟这里不一样,输入正确的安装路径。

提示:为了方便开机自动启动consul,你可以根据不同版本的linux系统配置开机启动,例如:centos,配置systemd。

部署client节点

client节点的配置,跟server节点类似,就是少了一些参数。

例子:

mkdir  /etc/consul.d
# 给目录授权
chown -R consul:consul /etc/consul.d
# 创建client配置文件
touch /etc/consul.d/client.hcl
# 给文件授权
chmod 640 /etc/consul.d/client.hcl

配置文件内容:/etc/consul.d/client.hcl

datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
retry_join = ["172.16.0.11"]

参数说明:

  • datacenter - 数据中心名字,唯一
  • data_dir - 数据目录,有权限读写即可
  • encrypt - consul节点之间通信的密钥
  • retry_join - 其他server节点地址,填一个即可,会自动加入集群。

跟server的参数对比,主要就是少了server和bootstrap_expect参数。

启动client的命令跟server一模一样。

~/local/consul/consul agent -config-dir=/etc/consul.d/