2. 部署指南

本节部署指南包含了安装和配置如上节参考架构所述的单个 Consul 集群方案。

虽然现实中的实践不一定尽如前述架构,但仍强烈建议使用类似的架构体系。例如在多台物理主机或者虚拟机(配好防火墙)上实现高可用性。

为提供高可用性单集群架构,我们建议按照该架构在集群中部署不止一个 Consul server。

架构图

所有的 Consul 主机上都要完成以下步骤。

  • 下载 Consul
  • 安装 Consul
  • 配置 systemd
  • 配置 Consul (server) 或 (client)
  • 启动 Consul

本手册适用于运行着 systemd 和服务管理器的类 Linux 主机。

下载 Consul

可以从 https://releases.hashicorp.com/consul/ 下载预编译好的二进制文件。企业版请从指定地址下载。

下载完成后校验一下压缩包完整性。官方提供了校验方案

  1. CONSUL_VERSION="1.4.0"
  2. curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip
  3. curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_SHA256SUMS
  4. curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_SHA256SUMS.sig

安装 Consul

解压已下载的包,移动 consul/usr/local/bin,检查是否在系统路径可用。

  1. unzip consul_${CONSUL_VERSION}_linux_amd64.zip
  2. sudo chown root:root consul
  3. sudo mv consul /usr/local/bin/
  4. consul --version

consul 命令支持参数、标识和子命令的自动补全,建议启用:

  1. consul -autocomplete-install
  2. complete -C /usr/local/bin/consul consul

创建一个没有权限的系统用户来运行 Consul,并分配一个数据目录:

  1. sudo useradd --system --home /etc/consul.d --shell /bin/false consul
  2. sudo mkdir --parents /opt/consul
  3. sudo chown --recursive consul:consul /opt/consul

配置 systemd

Systemd 使用文档中的默认设置,所以需要写配置文件来定义非默认服务。

创建一个配置文件:

  1. sudo touch /etc/systemd/system/consul.service

配置 Consul 服务:

  1. [Unit]
  2. Description="HashiCorp Consul - A service mesh solution"
  3. Documentation=https://www.consul.io/
  4. Requires=network-online.target
  5. After=network-online.target
  6. ConditionFileNotEmpty=/etc/consul.d/consul.hcl
  7. [Service]
  8. User=consul
  9. Group=consul
  10. ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
  11. ExecReload=/usr/local/bin/consul reload
  12. KillMode=process
  13. Restart=on-failure
  14. LimitNOFILE=65536
  15. [Install]
  16. WantedBy=multi-user.target

下面是 [Unit] 节的参数说明:

下面是 [Service] 节的参数说明:

  • User, Group - 以 consul 用户和组来运行 Consul
  • ExecStart - 用 agent 命令启动并制定配置文件目录
  • ExecReload - 服务重新加载的执行指令
  • KillMode - 把 Consul 当成单个进程
  • Restart - 如果异常退出就重新启动进行
  • LimitNOFILE - 限制文件描述符数量

下面是 [Install] 节的参数说明:

  • WantedBy - 为多用户运行级别创建弱依赖

配置 Consul (server)

Consul 使用该文档的默认配置,自定义的配置可以从多个文件中读取,参见文档了解配置是如何加载和覆盖默认值的。

Consul server agent 需要的配置是 client agent 的超集。我们用 consul.hcl 表示普通 Consul 配置文件,用 server.hcl 表示 server agent 的配置。

通常配置

创建一个配置文件 /etc/consul.d/consul.hcl

  1. sudo mkdir --parents /etc/consul.d
  2. sudo touch /etc/consul.d/consul.hcl
  3. sudo chown --recursive consul:consul /etc/consul.d
  4. sudo chmod 640 /etc/consul.d/consul.hcl

consul.hcl 加入如下配置:

{% hint style=”warning” %} 提示 datacenter 参数标识该集群所在的数据中心。encrypt 参数用 consul keygen 的输出来替换,而且每台机器配置都要保持一致。 {% endhint %}

  1. datacenter = "dc1"
  2. data_dir = "/opt/consul"
  3. encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
  • datacenter - agent 所在的数据中心。
  • data_dir - agent 存储状态的目录。
  • encrypt - Consul 网络通信的加密密钥。

自动加入集群

retry_join 参数可以通过 DNS 地址、IP 地址或云机制,通过一个 Consul server配置集群里所有 Consul agent,而不需要手动加入这些节点了。

该参数可以写到 consul.hcl 配置里:

{% hint style=”warning” %} 提示 可以用 DNS 地址、IP 地址或者云服务自动加入标识来配置 retry_join 参数。 {% endhint %}

  1. retry_join = ["172.16.0.11"]
  • retry_join - 要加入的集群某个 agent 的地址。

Performance 参数

performance 参数允许调整不同 Consul 中子系统的性能。

添加到 consul.hcl 配置文件:

  1. performance {
  2. raft_multiplier = 1
  3. }
  • raft_multiplier - Consul 控制 Raft 计时的伸缩因子。设置为 1 会使 Raft 运行在高性能模式(默认值是 0.7),建议用于生产环境。

更多关于 Raft 调优和 raft_multiplier 设置的信息,参见文档

Telemetry 参数

telemetry 参数指定 Consul 如何度量上游系统。

如果你要改这个参数,请详细阅读监控和指标指南

Server 配置

创建配置文件 /etc/consul.d/server.hcl

  1. sudo mkdir --parents /etc/consul.d
  2. sudo touch /etc/consul.d/server.hcl
  3. sudo chown --recursive consul:consul /etc/consul.d
  4. sudo chmod 640 /etc/consul.d/server.hcl

按如下修改 server.hcl

{% hint style=”warning” %} 提示 bootstrap_expect 是你要用的 server 数,推荐 3 或 5。 {% endhint %}

  1. server = true
  2. bootstrap_expect = 3
  • server - 表示该 agent 运行在 server 模式还是 client 模式。
  • bootstrap-expect - 表示该数据中心有多少 server 节点。集群中的所有 server 节点的该字段都应一致。

Consul UI

Consul 提供了基于 Web 的用户界面,可以在上面查看所有服务、节点和 Intention,比使用 CLI 或者 API 方便得多。

{% hint style=”warning” %} 提示 你应该选择一台服务器来提供 Consul UI 服务。 {% endhint %}

将 UI 选项加入 server.hcl 即可启用 Consul UI:

  1. ui = true

配置 Consul (client)

Consul client agent 的配置其实是 server 的一个子集,参见前面配置一下 consul.hcl 就可以了。其他特殊配置,也只需要逐一写配置文件即可。

启动 Consul

使用 systemctl 来添加和启用 Consul 服务。也可以用 systemctl 查看 Consul 服务状态:

  1. sudo systemctl enable consul
  2. sudo systemctl start consul
  3. sudo systemctl status consul

总结

In this guide you configured servers and clients in accordance to the reference architecture. This is the first step in deploying your first datacenter. In the next guide, you will learn how to configure backups to ensure the cluster state is save encase of a failure situation.

To create a secure cluster, we recommend completing the ACL bootstrap guide, agent encryption guide, and certificates guide. All three guides are in the Day 1 learning path.

Finally, we also recommend reviewing the Windows agent guide and Consul in containers guide for a mixed workload environment.