本手册适用于运行着 systemd 和服务管理器的类 Linux 主机。
可以从 https://releases.hashicorp.com/consul/ 下载预编译好的二进制文件。企业版请从指定地址下载。
下载完成后校验一下压缩包完整性。官方提供了校验方案。
CONSUL_VERSION="1.8.0"
curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip
curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_SHA256SUMS
curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_SHA256SUMS.sig
解压已下载的包,移动 consul 到 /usr/local/bin,检查是否在系统路径可用。
unzip consul_${CONSUL_VERSION}_linux_amd64.zip
sudo chown root:root consul
sudo mv consul /usr/local/bin/
consul --version
consul 命令支持参数、标识和子命令的自动补全,建议启用:
consul -autocomplete-install
创建一个没有权限的系统用户来运行 Consul,并分配一个数据目录:
sudo useradd --system --home /etc/consul.d --shell /bin/false consul
sudo mkdir --parents /opt/consul
sudo chown --recursive consul:consul /opt/consul
Systemd 使用文档中的默认设置,所以需要写配置文件来定义非默认服务。
创建一个配置文件:
sudo touch /etc/systemd/system/consul.service
配置 Consul 服务:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl
[Service]
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/usr/local/bin/consul reload
KillMode=process
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
下面是 [Unit] 节的参数说明:
下面是 [Service] 节的参数说明:
下面是 [Install] 节的参数说明:
Consul 使用该文档的默认配置,自定义的配置可以从多个文件中读取,参见文档了解配置是如何加载和覆盖默认值的。
Consul server agent 需要的配置是 client agent 的超集。我们用 consul.hcl 表示普通 Consul 配置文件,用 server.hcl 表示 server agent 的配置。
创建一个配置文件 /etc/consul.d/consul.hcl:
sudo mkdir --parents /etc/consul.d
sudo touch /etc/consul.d/consul.hcl
sudo chown --recursive consul:consul /etc/consul.d
sudo chmod 640 /etc/consul.d/consul.hcl
向 consul.hcl 加入如下配置:
提示 datacenter 参数标识该集群所在的数据中心。encrypt 参数用 consul keygen 的输出来替换,而且每台机器配置都要保持一致。
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
retry_join 参数可以通过 DNS 地址、IP 地址或云机制,通过一个 Consul server配置集群里所有 Consul agent,而不需要手动加入这些节点了。
该参数可以写到 consul.hcl 配置里:
提示 可以用 DNS 地址、IP 地址或者云服务自动加入标识来配置 retry_join 参数。
retry_join = ["172.16.0.11"]
创建配置文件 /etc/consul.d/server.hcl
sudo mkdir --parents /etc/consul.d
sudo touch /etc/consul.d/server.hcl
sudo chown --recursive consul:consul /etc/consul.d
sudo chmod 640 /etc/consul.d/server.hcl
按如下修改 server.hcl:
提示 bootstrap_expect 是你要用的 server 数,推荐 3 或 5。
server = true
bootstrap_expect = 2
Consul 提供了基于 Web 的用户界面,可以在上面查看所有服务、节点和 Intention,比使用 CLI 或者 API 方便得多。
提示 你应该选择一台服务器来提供 Consul UI 服务。
将 UI 选项加入 server.hcl 即可启用 Consul UI:
ui = true
Consul client agent 的配置其实是 server 的一个子集,参见前面配置一下 consul.hcl 就可以了。其他特殊配置,也只需要逐一写配置文件即可。
使用 systemctl 来添加和启用 Consul 服务。也可以用 systemctl 查看 Consul 服务状态:
sudo systemctl enable consul
sudo systemctl start consul
sudo systemctl status consul
或者s
consul agent -server -bind=0.0.0.0 -client=0.0.0.0 -config-dir=/etc/consul.d/