windows下搭建Consul集群
Consul 是 HashiCorp 公司的一個用於實現分佈式系統的服務發現與配置工具。Consul內置瞭服務註冊與發現框 架、分佈一致性協議實現、健康檢查、Key/Value存儲、多數據中心方案。由於出現得晚些,Consul具有功能完善、部署簡單、使用方便等特點。
安裝consul:
Consul由Go語言開發,因此也繼承瞭Go語言跨平臺,易安裝的特點。可以在其官網https://www.consul.io/downloads.html下載,各個平臺的安裝包都提供瞭。基本解壓就可以使用。
這裡以Windows平臺為例,我這裡下載的是64位版本,解壓後就一個exe程序,直接以如下命令啟動:
consul agent-dev
這裡有兩個參數: agent表面啟動瞭一個服務實例, -dev則是以快速開發的方式啟動這個實例。這個參數包含瞭大多數常用的功能,可以比較方便我們演示後面的功能,但它不對服務進行序列化,因此是不能應用於生產環境的。
啟動後,可以看到如下提示信息:
> consul agent –dev ==> Starting Consul agent... ==> Consul agent running! Version: 'v1.4.0' Node ID: 'e59c9885-c8df-608a-f870-dab9078f5c0d' Node name: 'Develop-PC1' Datacenter: 'dc1' (Segment: '<all>') Server: true (Bootstrap: false) Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
Web界面:
Consul自帶一個界面美觀,功能強大的,開箱即用的Web界面。通過該界面我們可以查看所有的服務以及節點,查看所有的健康監測及其當前的狀態,以及讀取和設置鍵/值數據。
該界面被映射到/ui上,和HTTP API使用相同的端口。默認就是http://localhost:8500/ui。
如果你要在其它機器上訪問該Web界面,可以加上-client參數指定綁定的IP。
consul agent -dev -bind=192.168.2.210 -client 0.0.0.0
靜態配置服務
consul支持配置文件的方式靜態配置服務,首先我們定義一個json格式的配置文件:
{ "service": { "name": "web", "tags": [ "rails" ], "port": 80 } }
配置文件主要指定的是服務名稱,地址,端口等信息。
然後用-config-dir指定配置文件目錄啟動consul,consul會自動加載該目錄下的所有json文件,每個文件作為一個靜態配置服務。
> consul agent -dev -bind=192.168.0.211 -config-dir ./services
==> Starting Consul agent... ==> Consul agent running! ... 2018/12/05 11:43:23 [DEBUG] agent: Node info in sync 2018/12/05 11:43:23 [DEBUG] agent: Service "web" in sync 2018/12/05 11:43:23 [DEBUG] agent: Node info in sync 2018/12/05 11:43:25 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically 2018/12/05 11:43:25 [DEBUG] agent: Service "web" in sync 2018/12/05 11:43:25 [DEBUG] agent: Node info in sync
從輸出信息中可以看到名為"web"的服務已經同步進來。
也可以在web界面上看到該服務:
動態註冊服務
除瞭靜態配置外,使用的最多的還是服務主動註冊的方案。consul提供瞭一系列rest接口使得我們可以方便的註冊自己的服務。
創建服務
-
接口地址:http://localhost:8500/v1/agent/service/register
-
操作方式:PUT
{ "ID": "redis1", "Name": "redis", "Tags": [ "primary", "v1" ], "Address": "127.0.0.1", "Port": 8000, "EnableTagOverride": false, "Check": { "DeregisterCriticalServiceAfter": "90m", "Script": "/usr/local/bin/check_redis.py", "HTTP": "http://localhost:5000/health", "Interval": "10s" } }
刪除服務
-
接口地址:http://localhost:8500/v1/agent/service/deregister/redis1
-
操作方式:PUT
查詢指服務信息
-
接口地址: http://localhost:8500/v1/catalog/service/web
-
操作方式: GET
查看服務的健康狀態
-
接口地址: http://localhost:8500/v1/catalog/service/web?passing
-
操作方式: GET
更多接口
更多API使用可參考:https://www.consul.io/api/index.html
集群搭建
consul的集群拓撲架構如下圖所示:
它主要具有如下兩種狀態的節點:
Server: 有完整功能的代理,這些功能包括參與Raft選舉,維護集群狀態,響應RPC查詢,與其他數據中心交互WAN gossip和轉發查詢給leader或者遠程數據中心。
Client:一個Client是一個轉發所有RPC到server的代理。這個client是相對無狀態的。client唯一執行的後臺活動是加入LAN gossip池。這有一個最低的資源開銷並且僅消耗少量的網絡帶寬。
consul的集群搭建本身涉及的內容比較多,具體可參看文章Consul 集群部署。本文這裡就介紹一個最簡單的拓撲情況:1server + nclient的場景。
啟動Server:
啟動Server的指令一般如下:
consul agent -data-dir=./data -node=node0 -bind=192.168.0.211 -datacenter=dc1 -ui -client=0.0.0.0 -server -bootstrap-expect 1
這裡用到瞭不少參數,這裡就簡單的介紹下:
-
-data-dir=./data 必須,指定數據文件存儲路徑
-
-node=node0 必須,指定瞭節點的名稱,該名稱在整個網絡中必須唯一。
-
-bind=192.168.0.211 多Ip地址機器上必須,指定瞭綁定的Ip地址
-
-datacenter=dc1 可選,指定瞭所屬的數據中心,默認為dc1
-
-ui 可選,是否啟用web服務器
-
-client=0.0.0.0 可選,指定瞭可以訪問的客戶端范圍,默認是127.0.0.1
-
-server 必須,表明瞭該節點是server節點
-
-bootstrap-expect 1 可選
有瞭上述知識後,在最簡單的場景下,一般可以簡化為如下形式:
consul agent -data-dir ./data -node=node0 -bind=192.168.0.211 -ui -server
啟動Client:
啟動Client的指令一般如下:
consul agent -data-dir=./data -node=node1 -bind=192.168.0.210 -datacenter=dc1 -ui -client=0.0.0.0 -join 192.168.0.211
同樣,基於前面的介紹,我們也可以把啟動客戶端指令簡化如下:
consul agent -data-dir=./data -node=node1 -bind=192.168.0.210 -ui -join 192.168.0.211
相比啟動Server的指令,少瞭一個-server,表明它是一個客戶端agent,同是,多瞭一個-join 192.168.0.211,表明瞭它需要連接到那個server。這個參數也可以不配置,通過命令行consul join 192.168.0.211手動加入。
啟動瞭client後,就可以通過consul members
指令查看成員瞭:
> consul members Node Address Status Type Build Protocol DC Segment node0 192.168.0.211:8301 alive server 1.4.0 2 dc1 <all> node1 192.168.0.210:8301 alive client 1.4.0 2 dc1 <default>
也可以通過Http接口查看:
http://localhost:8500/v1/catalog/nodes
[ { "ID": "4314607d-629c-24a0-9e6c-d787efebe8c9", "Node": "node0", "Address": "192.168.0.211", "Datacenter": "dc1", "TaggedAddresses": { "lan": "192.168.0.211", "wan": "192.168.0.211" }, "Meta": { "consul-network-segment": "" }, "CreateIndex": 5, "ModifyIndex": 6 }, { "ID": "0a59426a-1723-6389-8681-0a16b54965e4", "Node": "node1", "Address": "192.168.0.210", "Datacenter": "dc1", "TaggedAddresses": { "lan": "192.168.0.210", "wan": "192.168.0.210" }, "Meta": { "consul-network-segment": "" }, "CreateIndex": 456, "ModifyIndex": 457 } ]
同樣,也可以在web界面查看:
收拾到此這篇關於windows下搭建Consul集群的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 使用docker compose搭建consul集群環境的例子
- Docker容器Consul部署概述
- 一文詳解Golang中consul的基本使用
- Consul的搭建和.Net5的註冊和獲取方法(Win10簡單版)
- Python腳本讀取Consul配置信息的方法示例