Consul
https://www.consul.io/
https://developer.hashicorp.com/consul/commands
https://developer.hashicorp.com/consul/docs/agent/config – agent 配置
https://developer.hashicorp.com/consul/docs/agent/config/cli-flags – agent 命令行参考
https://developer.hashicorp.com/consul/docs/agent/config/config-files – agent 配置文件参考
Linux部署
解压
1 2 3
| mkdir /opt/local/consul unzip /opt/local/consul_1.20.3_linux_amd64.zip -d /opt/local/consul chmod +x /opt/local/consul/consul
|
启动(agent命令行)
注意:编写的启动脚本,必须以类似 #!/bin/bash
作为开头,无法使用systemd。
vim /opt/local/consul/consul-startup.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/bash BASE_DIR=/opt/local/consul
mkdir -p $BASE_DIR/data mkdir -p $BASE_DIR/log
$BASE_DIR/consul agent \ -node=node-name-1 \ -datacenter=dc-1 \ -client 0.0.0.0 \ -bind=192.168.0.7 \ -data-dir=$BASE_DIR/data \ -log-file=$BASE_DIR/log/ \ -log-level=info \ -ui \ -server \ -bootstrap-expect=1
|
启动
1 2
| chmod +x /opt/local/consul/consul-startup.sh /opt/local/consul/consul-startup.sh
|
启动(agent配置文件)使用中
1 2 3 4
| BASE_DIR=/opt/local/consul mkdir -p $BASE_DIR/data mkdir -p $BASE_DIR/config mkdir -p $BASE_DIR/log
|
vim $BASE_DIR/config/server.json
,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| { "server": true, "node_name": "node-name-1", "datacenter": "dc-1", "client_addr": "127.0.0.1 192.168.0.7", "bind_addr": "192.168.0.7", "advertise_addr": "192.168.0.7", "ports": { "http": 8500, "dns": 8600, "server": 8300 }, "data_dir": "/opt/local/consul/data", "log_file": "/opt/local/consul/log/", "log_level": "INFO", "ui_config": { "enabled": true, "content_path": "/ui/" }, "bootstrap_expect": 0, "server_rejoin_age_max": "876000h0m0s", "acl": { "enabled": true, "default_policy": "deny", "enable_token_persistence": true } }
|
注意:此 Json 的任何位置都不支持 # 注释。
client_addr
: 指定用于客户端与 Consul 交互的地址,控制 Consul 服务的 HTTP API 和 DNS 接口在哪个网络地址上监听(通常是客户端请求的地址),类似于Redis的bind。默认127.0.0.1,支持使用 空格分隔的多个地址。
bind_addr
:默认0.0.0.0,指定了 Consul 实际绑定的网络接口地址(私有 IP 地址),它用于 内部通信。即 Consul 会在该地址上监听并与其他节点进行数据交换。
advertise_addr
:指定了 Consul 向外界宣布的地址(公共 IP 地址),其他节点或客户端将通过该地址与当前节点进行通信。它是 Consul 向集群或客户端广告的地址。
bootstrap
:此标志用于控制服务器是否处于“引导”模式。每个数据中心在此模式下运行的服务器不得超过一台。单例模式下,才需要配置 bootstrap=true
或 bootstrap_expect=1
。
bootstrap_expect
:此标志提供数据中心中预期的服务器数量。不应提供此值,或者该值必须与集群中的其他服务器一致。此标志需要 -server
模式。
1 2 3
| /opt/local/consul/consul agent \ -config-file=/opt/local/consul/config/server.json
|
enable_token_persistence
:开启 token 持久化后,Bootstrap Token 及其他 ACL Token 会被保存数据目录 tree /opt/local/consul/data/
,Bootstrap Token 一旦丢失无法找回,因为 data_dir
下的文件无法以明文查看。
启用 ACL 功能
见 server.json
的 acl
选项配置。
在 Consul 启动状态下,创建初始管理令牌(Bootstrap Token)。
1 2 3 4 5 6 7 8
| [root@zlq consul]# ./consul acl bootstrap AccessorID: ae0da69b-e66f-89e1-a8b2-7ab347329de4 SecretID: a7564416-1a14-95e0-300b-204d29cae600 Description: Bootstrap Token (Global Management) Local: false Create Time: 2025-04-22 14:04:52.227454167 +0800 CST Policies: 00000000-0000-0000-0000-000000000001 - global-management
|
一旦启用 Consul 的 ACL 功能,绝大多数与 Consul 交互的操作都需要附带一个 有效的 ACL Token,否则就会被拒绝访问(403 权限错误 或 ACL not found)。以下是两种携带 ACL token 的方式:
1 2 3 4 5
| export CONSUL_HTTP_TOKEN=a7564416-1a14-95e0-300b-204d29cae600
./consul acl token read -self -token=a7564416-1a14-95e0-300b-204d29cae600
|
创建普通 ACL Token(随机 UUID)
1 2 3
| ./consul acl token create \ -description "My Token" \ -policy-name global-management
|
创建固定 UUID 的 ACL Token
1 2 3 4 5 6
| ./consul acl token create --help ./consul acl token create \ -description "My Token" \ -policy-name global-management \ -secret 02185dbe-5bd9-ed9d-0f0e-88918868b028
|
开机自启
vim /etc/systemd/system/consul.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [Unit] Description=Consul After=network.target
[Service] # Type=forking 会导致 systemctl start service 阻塞 Type=simple User=root Group=root ExecStart=/opt/local/consul/consul agent -config-file=/opt/local/consul/config/server.json Restart=on-failure
[Install] WantedBy=multi-user.target
|
systemctl
管理
1 2 3 4
| systemctl daemon-reload systemctl start consul systemctl stop consul systemctl enable consul
|
windows启动脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| title %~nx0
set BASE_DIR=X:\deploy\consul_1.20.3_windows_386 call %BASE_DIR%/consul agent ^ -node=node-name-1 ^ -datacenter=dc-1 ^ -client 0.0.0.0 ^ -bind=192.168.0.3 ^ -data-dir=%BASE_DIR%/data ^ -config-dir=%BASE_DIR%/config ^ -log-file=%BASE_DIR%/log/ ^ -log-level=info ^ -ui ^ -bootstrap-expect=1 ^ -server
pause
|
Nacos