Consul入门
簡介
為什么要用consul,這里就不詳細介紹了,本文重點是Consul的搭建和使用過程。
Consul搭建
參考文獻:http://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/
下載consul和consul UI
官方地址:https://www.consul.io/,就一個consul執行文件
2. ?在consul執行文件的目錄下打開命令
3. ?創建server方式
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=你的ip -dc=dc1
相關配置信息說明
a. ?–server指定創建服務端
b. –boostrap-expect 關于服務leader投票等相關的level設定
c.?–data-dir相關信息的文件路徑,不指定的話,就在consul目錄下生成
d.?–node節點名稱
e.?–bind綁定的你服務器的IP
f.?–dc數據中心名稱
更多的配置信息說明,請參考官方內容,地址:https://www.consul.io/docs/agent/options.html
4. ?創建client方式
如上,只是刪掉了-server
consul agent? -data-dir /tmp/consul -node=n3 -bind=你的ip? -dc=dc1
5. ?以配置文件形式創建
命令后面加 -config-file=./conf
consul agent? -data-dir /tmp/consul -node=n3 -bind=你的ip? -dc=dc1 -config-file=./conf
./conf目錄下包含json格式的配置信息,將配置的設置都存放在該文件下,可以注冊服務和healthCheck等等
6. ?搭建服務集群(服務器之間關聯)
Consul join 其中一個服務器的ip,如: consul join 10.5.133.144
7. ?配置web ui的方式
Web ui是consul提供的可視化的服務web界面,可以對key/value和服務、節點進行操作
a.?將下載好的web ui文件內容(包含一個html和一個static文件件)拷貝到consul所在目錄下dist(自己創建)文件夾下
ps. 在原來創建server或者client的時候,需要設置-ui-dir ./dist
如:?consul agent? -data-dir /tmp/consul -node=n3 -bind=你的ip? -dc=dc1 -config-file=./conf?-ui-dir ./dist
b.?打開127.0.0.1:8500?就可以打開界面了。
8. ?常見的consul 命令
Consul members 查看服務集群的所有服務器
Consul info 查看當前服務器的狀況
Consul leave 退出當前服務集群
服務注冊
通過Consul的服務注冊HTTP API,由服務自身在啟動后調用API注冊自己(可以自定義服務客戶端,調用api進行操作)
通過在配置文件中定義服務的方式進行注冊
以上注冊了一個服務名稱為web3地址127.0.0.1端口10000,同時還注冊了一個healthcheck。
服務發現
通過HTTP API查看存在哪些服務(自定義服務發現客戶端)
通過consul agent內置的DNS服務(如果是windows系統可以下載dig工具,發現dns服務,ps. Windows系統不建議作為server)
可以根據服務check的實時狀態動態調整available服務節點列表
dig @127.0.0.1 -p 8600 web3.service.consul SRV
服務發現HTTP API
http://www.codeweblog.com/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E7%B3%BB%E7%BB%9Fconsul-http-api/??
api 提供增刪改查nodes、services、checks、configuration。
以下consul 的http api,距離,查看所有服務,打開地址如下:127.0.0.1:8500/v1/agent/services,就可以查看所有服務的信息
如上圖,找到了一個名為"web3"的服務。
api包含以下幾部分內容
kv - Key/Value存儲
agent - Agent控制
catalog - 管理nodes和services
health - 管理健康監測
session - Session操作
acl - ACL創建和管理
event - 用戶Events
status - Consul系統狀態
2. agent的api
和本地agent交互,用于服務注冊和檢查注冊
/v1/agent/checks : 返回本地agent注冊的所有檢查(包括配置文件和HTTP接口) /v1/agent/services : 返回本地agent注冊的所有 服務 /v1/agent/members : 返回agent在集群的gossip pool中看到的成員 /v1/agent/self : 返回本地agent的配置和成員信息 /v1/agent/join/<address> : 觸發本地agent加入node /v1/agent/force-leave/<node>>: 強制刪除node /v1/agent/check/register : 在本地agent增加一個檢查項,使用PUT方法傳輸一個json格式的數據 /v1/agent/check/deregister/<checkID> : 注銷一個本地agent的檢查項 /v1/agent/check/pass/<checkID> : 設置一個本地檢查項的狀態為passing /v1/agent/check/warn/<checkID> : 設置一個本地檢查項的狀態為warning /v1/agent/check/fail/<checkID> : 設置一個本地檢查項的狀態為critical /v1/agent/service/register : 在本地agent增加一個新的服務項,使用PUT方法傳輸一個json格式的數據 /v1/agent/service/deregister/<serviceID> : 注銷一個本地agent的服務項3.?catalog 的api
注冊、注銷nodes、services、checks
/v1/catalog/register : Registers a new node, service, or check /v1/catalog/deregister : Deregisters a node, service, or check /v1/catalog/datacenters : Lists known datacenters /v1/catalog/nodes : Lists nodes in a given DC /v1/catalog/services : Lists services in a given DC /v1/catalog/service/<service> : Lists the nodes in a given service /v1/catalog/node/<node> : Lists the services provided by a node4.?health
查詢相關的健康信息
/v1/health/node/<node>: 返回node所定義的檢查,可用參數?dc= /v1/health/checks/<service>: 返回和服務相關聯的檢查,可用參數?dc= /v1/health/service/<service>: 返回給定datacenter中給定node中service /v1/health/state/<state>: 返回給定datacenter中指定狀態的服務,state可以是"any", "unknown", "passing", "warning", or "critical",可用參數?dc=session
增刪改查session信息
/v1/session/create: Creates a new session /v1/session/destroy/<session>: Destroys a given session /v1/session/info/<session>: Queries a given session /v1/session/node/<node>: Lists sessions belonging to a node /v1/session/list: Lists all the active sessions5.?acl
增刪改查acl信息
/v1/acl/create: Creates a new token with policy /v1/acl/update: Update the policy of a token /v1/acl/destroy/<id>: Destroys a given token /v1/acl/info/<id>: Queries the policy of a given token /v1/acl/clone/<id>: Creates a new token by cloning an existing token /v1/acl/list: Lists all the active tokens6.?event
觸發event和查詢已有event
/v1/event/fire/<name>: 觸發一個新的event,用戶event需要name和其他可選的參數,使用PUT方法 /v1/event/list: 返回agent知道的events7.?status
consul 集群的信息
/v1/status/leader : 返回當前集群的Raft leader /v1/status/peers : 返回當前集群中同事服務發現客戶端
從nuget上下載consul包,里面包含consul的所有操作。
源碼地址:https://github.com/PlayFab/consuldotnet/。
舉例通過key獲取value
1. 在UI添加一個key/value的內容(也可以在程序中添加)
2. 獲取value代碼如下
static void Main(string[] args){Console.WriteLine(HelloConsul().GetAwaiter().GetResult());Console.ReadLine();} ? ? ? ?public static async Task<string> HelloConsul(){ ? ? ? ? ? ?using (var client = new ConsulClient()){ ? ? ? ? ? ? ? ?var getPair = await client.KV.Get("hello1"); ? ? ? ? ? ? ? ?return Encoding.UTF8.GetString(getPair.Response.Value, 0,getPair.Response.Value.Length);} ? }3. 結果如下:
更多服務發現客戶端的內容,后續補上。
相關文章
使用C# 和Consul進行分布式系統協調
原文地址:http://www.cnblogs.com/ruanyifeng/p/5550102.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
- 上一篇: 微软CEO纳德拉开讲,2016微软开发者
- 下一篇: 细说ASP.NET Core与OWIN的