HashiCorp Consul 是微服務網路解決方案之一, 用於管理跨網路和多雲環境服務之間的安全網路連線, 提供服務發現, 服務網格, 流量管理和自動更新. 可以單獨部署, 也可以分散式部署.
下載地址 https://developer.hashicorp.com/consul/downloads, 根據自己的系統選擇對應的二進位制檔案, 對應 Linux AMD64 的, 檔案還不小, 50MB, 解壓後只有一個可執行檔案, 127MB, 將其放到 /opt/consul/ 目錄, 並將owner改為 root:root
Consul 的執行形式就是 Agent, 可以執行為 server 或 client 模式. Agent 的啟動命令格式為
consul agent <options>
具體的命令引數可以通過consul agent --help
檢視, 常用的引數
用-dev
引數可以快速建立一個開發模式的server, 資料不儲存, Node ID隨機生成, Node name使用當前的hostname, 監聽 127.0.0.1, 可以看下面的控制檯輸出, HTTP等服務使用的是127.0.0.1地址, 只能從本機存取
$ consul agent -dev
==> Starting Consul agent...
Version: '1.15.2'
Build Date: '2023-03-30 17:51:19 +0000 UTC'
Node ID: 'ab2e7536-867a-c12f-5bd6-8a825b31af90'
Node name: 'centos7001'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Gossip Encryption: false
Auto-Encrypt-TLS: false
HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2
==> Log data will now stream in as it occurs:
2023-05-17T06:31:23.337Z [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.ab2e7536-867a-c12f-5bd6-8a825b31af90/server.dc1 from=<none> to=<none>
如果在遠端伺服器上執行, 需要加上-client
引數, 指定伺服器網口IP地址, 這樣就可以從本地存取 http://192.168.11.22:8500 的 Web控制檯了
consul agent -dev -client=192.168.11.22
在另一個終端視窗中, 可以通過consul members
命令檢視節點, 如果不加-http-addr
引數, 預設存取本地127.0.0.1
$ consul members -http-addr=http://192.168.11.22:8500
Node Address Status Type Build Protocol DC Partition Segment
centos7001 127.0.0.1:8301 alive server 1.15.2 2 dc1 default <all>
通過consul leave
停止consul服務
$ consul leave -http-addr=http://192.168.11.22:8500
Graceful leave complete
如果不使用-dev
, 就要手工指定一些引數, 否則啟動會有錯誤
consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22
去掉了 -dev
引數, 增加了三個新引數,
叢集模式下, 每個 Datacenter 必須至少有一臺 server. 建議是3或5臺, 單server在宕機時會造成資料丟失. 其它 Agent 執行為 client 模式.
下面以一臺Server, 一臺Client為例說明
在 11.22 主機上執行 Server
consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22
在 11.23 主機上執行 Client, 並 Join 到 11.22
consul agent -ui -data-dir=./data -client=192.168.11.23 -bind=192.168.11.23 -retry-join=192.168.11.22
Join 成功後, 在兩邊的控制檯上會顯示相應資訊. 這時候通過consul members
可以看到兩個Node:
/opt/consul/consul members -http-addr=http://192.168.11.22:8500
Node Address Status Type Build Protocol DC Partition Segment
centos7001 192.168.11.22:8301 alive server 1.15.2 2 dc1 default <all>
54120-nc01 192.168.11.23:8301 alive client 1.6.1 2 dc1 default <default>
不留紀錄檔
nohup /opt/consul/consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >/dev/null 2>&1 &
紀錄檔輸出到檔案
nohup /opt/consul/consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >path/to/log/consul.log 2>&1 &
這樣consul會在後臺執行, 需要用 consul leave 退出