目錄
- Spring Cloud開發(fā)實踐(一): 簡介和根模塊
- Spring Cloud開發(fā)實踐(二): Eureka服務(wù)和接口定義
- Spring Cloud開發(fā)實踐(三): 接口實現(xiàn)和下游調(diào)用
- Spring Cloud開發(fā)實踐(四): Docker部署
- Spring Cloud開發(fā)實踐(五): Consul - 服務(wù)注冊的另一個選擇
- Spring Cloud開發(fā)實踐(六): 基于Consul和Spring Cloud 2021.0的演示項目
關(guān)于 Consul
HashiCorp Consul 是微服務(wù)網(wǎng)絡(luò)解決方案之一, 用于管理跨網(wǎng)絡(luò)和多云環(huán)境服務(wù)之間的安全網(wǎng)絡(luò)連接, 提供服務(wù)發(fā)現(xiàn), 服務(wù)網(wǎng)格, 流量管理和自動更新. 可以單獨部署, 也可以分布式部署.
Consul 的特點
- CP(強(qiáng)一致性),使用Raft復(fù)制狀態(tài)
- 服務(wù)可以通過任意Server注冊, 通過 Raft 仲裁
- 內(nèi)建安全通信選項
- 一致性提供鎖定和集群協(xié)調(diào)
- 帶配置功能, 健康檢查, Lock, KV, ACL
- 通過 DNS 支持非 REST 節(jié)點, 允許更多類型資源連接
- 使用 Go 語言編寫, 啟動資源消耗小, 只需要50-60MB內(nèi)存, 相對比 Nacos 默認(rèn)配置512M, 啟動需要600M以上內(nèi)存.
- 腳本化配置, 對容器部署方式更友好
安裝
下載地址 https://developer.hashicorp.com/consul/downloads, 根據(jù)自己的系統(tǒng)選擇對應(yīng)的二進(jìn)制文件, 對應(yīng) Linux AMD64 的, 文件還不小, 50MB, 解壓后只有一個可執(zhí)行文件, 127MB, 將其放到 /opt/consul/ 目錄, 并將owner改為 root:root
運(yùn)行 Agent
Consul 的運(yùn)行形式就是 Agent, 可以運(yùn)行為 server 或 client 模式. Agent 的啟動命令格式為
consul agent <options>
具體的命令參數(shù)可以通過consul agent --help
查看, 常用的參數(shù)
- -bind=
用于cluster通信的地址 - -client=
用于client訪問的地址, 包含 RPC, DNS, HTTP, HTTPS, gRPC (if configured). - -config-dir=
配置文件所在目錄, 讀取所有 .json 后綴的文件作為配置, 可以指定多次 - -config-file=
配置文件路徑, 可以指定多次 - -data-dir=
指定agent狀態(tài)數(shù)據(jù)存儲目錄 - -dev 以開發(fā)模式啟動
- -log-file=
指定日志文件路徑 - -log-json 使用JSON格式記錄日志
- -log-level=
日志級別 - -log-rotate-bytes=
日志文件字節(jié)數(shù)約束 - -log-rotate-duration=
日志文件時間跨度 - -log-rotate-max-files=
日志保留的文件數(shù) - -node=
指定本節(jié)點名稱, 在 Cluster 內(nèi)必須唯一 - -node-id=
指定Node ID, 默認(rèn)為自動生成并記錄到 data-dir - -retry-join=
啟動時嘗試加入的 Agent 地址 - -server 服務(wù)器模式
- -ui 啟用內(nèi)建的靜態(tài)Web UI界面
- -ui-content-path=
UI界面地址, 默認(rèn)為 /ui/
開發(fā)模式
用-dev
參數(shù)可以快速創(chuàng)建一個開發(fā)模式的server, 數(shù)據(jù)不保存, Node ID隨機(jī)生成, Node name使用當(dāng)前的hostname, 監(jiān)聽 127.0.0.1, 可以看下面的控制臺輸出, HTTP等服務(wù)使用的是127.0.0.1地址, 只能從本機(jī)訪問
$ 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>
如果在遠(yuǎn)程服務(wù)器上運(yùn)行, 需要加上-client
參數(shù), 指定服務(wù)器網(wǎng)口IP地址, 這樣就可以從本地訪問 http://192.168.11.22:8500 的 Web控制臺了
consul agent -dev -client=192.168.11.22
在另一個終端窗口中, 可以通過consul members
命令查看節(jié)點, 如果不加-http-addr
參數(shù), 默認(rèn)訪問本地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服務(wù)
$ consul leave -http-addr=http://192.168.11.22:8500
Graceful leave complete
單Server模式
如果不使用-dev
, 就要手工指定一些參數(shù), 否則啟動會有錯誤
consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22
去掉了 -dev
參數(shù), 增加了三個新參數(shù),
- -ui 開啟 8500 端口的 web 控制臺, 這個不是必須的
- -server 和 -bootstrap-expect=1 一起使用, 前者表示用server模式啟動, 后者表示只有一臺服務(wù)器, 可以立即產(chǎn)生leader, 也必須指定. 如果不指定后者, consul會一直等待 leader 的產(chǎn)生
集群模式
集群模式下, 每個 Datacenter 必須至少有一臺 server. 建議是3或5臺, 單server在宕機(jī)時會造成數(shù)據(jù)丟失. 其它 Agent 運(yùn)行為 client 模式.
下面以一臺Server, 一臺Client為例說明
在 11.22 主機(jī)上運(yùn)行 Server
consul agent -ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22
在 11.23 主機(jī)上運(yùn)行 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 成功后, 在兩邊的控制臺上會顯示相應(yīng)信息. 這時候通過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>
后臺運(yùn)行
不留日志
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 &
日志輸出到文件文章來源:http://www.zghlxwxcb.cn/news/detail-448343.html
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會在后臺運(yùn)行, 需要用 consul leave 退出文章來源地址http://www.zghlxwxcb.cn/news/detail-448343.html
參考
- Eureka vs Consul https://gist.github.com/StevenACoffman/de394d6511a387ada9ab988e33be8583
- Get Started: Consul Agent https://developer.hashicorp.com/consul/docs/agent
- Consul建立集群 https://book-consul-guide.vnzmi.com/06_setup_cluster.html
到了這里,關(guān)于Spring Cloud開發(fā)實踐(五): Consul - 服務(wù)注冊的另一個選擇的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!