首先,從這個網址下載consul,解壓後發現就是個可執行文件,若是不能夠執行,chmod +x consul 一下。html
爲了試驗Consul較多的功能,這裏咱們打算啓用一個dev模式,帶ACL控制的Consul代理。
配置文件config.json以下node
{ "datacenter":"dc1", "primary_datacenter":"dc1", "data_dir":"/opt/consul/data/", "enable_script_checks":false, "bind_addr":"127.0.0.1", "node_name":"consul-dev", "enable_local_script_checks":true, "log_file":"/opt/consul/log/", "log_level":"info", "log_rotate_bytes":100000000, "log_rotate_duration":"24h", "encrypt":"krCysDJnrQ8dtA7AbJav8g==", "acl":{ "enabled":true, "default_policy":"deny", "enable_token_persistence":true, "tokens":{ "master":"cd76a0f7-5535-40cc-8696-073462acc6c7" } } }
下面是參數說明:linux
接着咱們以dev模式啓動agent。web
./consul agent -dev -config-file ./config.json
啓動完以後,你會發現出現下面的錯誤
這個錯誤是沒有設置agent-token形成的,agent-token主要用於客戶端和服務器執行內部操做.好比catalog api的更新,反熵同步等。redis
1.先建立agent-tokenjson
curl \ --request PUT \ --header "X-Consul-Token: cd76a0f7-5535-40cc-8696-073462acc6c7" \ --data \ '{ "Name": "Agent Token", "Type": "client", "Rules": "node \"\" { policy = \"write\" } service \"\" { policy = \"read\" }" }' http://127.0.0.1:8500/v1/acl/create
注意這裏面的X-Consul-Token與上面config.json 裏面的acl.tokens.master要是同一個值,此時你會看到生成成功,d118b1fc-77af-d870-8417-667c04b29cdf這一串就是agent-token了。
2.設置agent-token
因爲這裏只有一個agent,須要調用接口來設置agent-token。vim
curl \ --request PUT \ --header "X-Consul-Token: cd76a0f7-5535-40cc-8696-073462acc6c7" \ --data \ '{ "Token": "d118b1fc-77af-d870-8417-667c04b29cdf" }' http://127.0.0.1:8500/v1/agent/token/acl_agent_token
而後你會發現以前的錯誤就消失了。
如此,一個帶有ACL控制的agent就啓動好了。若是你想搭建一個帶ACL控制的集羣,請參見個人另外一篇文章。api
consul 子命令挺多的,以下圖,但不要慌,一個個來。
最後設置一下環境變量,增長CONSUL_HTTP_TOKEN。
我這裏是Mac,改的是~/.bash_profile;其餘系統的,請自行搜索。安全
sudo vim ~/.bash_profile
在末尾添加bash
export CONSUL_HTTP_TOKEN=cd76a0f7-5535-40cc-8696-073462acc6c7
而後讓新的環境變量生效:
source ~/.bash_profile
關於acl部分,後面咱們會在web-ui裏面進行控制,我會單獨寫一篇文章系統介紹Consul ACL如何設置。不過,你能夠先看我以前的文章,Consul ACL集羣配置說明以及ACL Token的用法, 但這篇文章只告訴了怎麼用,並無講清楚爲何這麼用。
agent就是啓動consul代理部分。這裏面主要是一些配置信息,如何啓動。後面會把完整版的配置翻譯出來,供你們參考,不過仍是強烈建議你們讀讀命令行的幫助說明, 即 ./consul agent --help
與consul的catalog打交道。
列出全部的數據中心: ./consul catalog datacenters
列出全部的節點:./consul catalog nodes
列出全部的服務:./consul catalog services
config命令用於與Consul的中央配置系統進行交互。
裝備一個配置文件servie-defaults.hcl
Kind = "service-defaults" Name = "web" Protocol = "http"
寫入一個配置:
./consul config write service-defaults.hcl
讀取剛寫入的配置:
./consul config read -kind service-defaults -name web
列出特定類型的配置:
./consul config list -kind service-defaults
刪除一個配置:
./consul config delete -kind service-defaults -name web
和Consul Connect的進行交互。Consul Connect使用相互TLS提供服務到服務鏈接受權和加密。應用程序可使用sidecar代理自動爲入站和出站鏈接創建TLS鏈接,而根本不知道Connect。應用程序還能夠與Connect本機集成,以實現最佳性能和安全性。
consul debug命令在指定時間內監視Consul代理,將有關代理,集羣和環境的信息記錄到寫入當前目錄的歸檔中。
下面是執行./consul debug的結果,更多使用說明請執行./consul debug --help
能夠看到輸出文件被保存到命令行所在路徑/consul-debug-1559985864.tar.gz中。你能夠解壓該文件,進行debug.
監視(watch)能夠監視數據視圖(例如,節點列表,KV對,健康檢查)的更新。檢測到更新時,將調用外部處理程序。處理程序能夠是任何可執行文件或HTTP端點。
./consul watch -type=event -name=helloserviceevent /Use/cuixin/ConsulStudy/mac-dev/echo_handler.sh -helloservice
上面咱們指定監視的類型是event, 名稱是helloserviceevent的事件, 當收到該事件時,將觸發執行echo_handler.sh這個腳本,而且參數爲helloservice。
下面是echo_handler.sh這個腳本的內容:
#!/bin/bash echo 「hello $1」 >> test.txt
很簡單,會將內容追加到test.txt中。
注意這裏須要給echo_handler.sh加下執行權限
chmod +x echo_handler.sh
event命令提供了一種將自定義用戶事件觸發到整個數據中心的機制。這些事件對Consul不透明,但它們可用於構建腳本基礎結構,以執行自動部署,從新啓動服務或執行任何其餘編排操做。可使用watch(監視)處理事件。使用八卦協議傳播事件。
雖然細節對於使用事件並不重要,但理解語義頗有用。八卦層將盡最大努力發放活動,但沒有保證發放成功。與大多數使用共識複製的Consul數據不一樣,事件數據純粹是點對點的八卦。這意味着它沒有持久化,也沒有總排序。實際上,這意味着您不能依賴消息郵件傳遞的順序。然而,優勢是即便在沒有服務器節點或停機期間仍可使用事件。
基礎八卦也設置了用戶事件消息大小的限制。很難給出一個確切的數字,由於它取決於事件的各類參數,但有效載荷應保持很是小(<100字節)。指定太大的事件將返回錯誤。
有了上面watch部分提供的監視,下面咱們就產生對應的事件就行。./consul event -name=helloserviceevent
這個觸發事件的命令能夠執行屢次,每次觸發事件以後,你都會看到test.txt多了一行「hello -helloservice」
## exec
exec命令提供了一種遠程執行機制。 例如,這可用於在提供Web服務的全部計算機上運行uptime命令。這裏因爲安全性問題,咱們在配置裏面禁用了遠程執行( "enable_script_checks":false)。
不然你能夠執行./consul exec uptime 來查看各個節點已經啓動多長時間了。
force-leave命令強制Consul集羣的成員進入「left」狀態。 若是該成員仍然存活,它最終將從新加入羣集。 此方法的真正目的是強制刪除「failed」狀態的節點。
./consul force-leave node-name
info命令提供對操做員有用的各類調試信息。 根據代理是客戶端仍是服務器,將返回有關不一樣子系統的信息。
目前有頂級鍵:
agent:提供有關代理的信息
consul:有關Consul(客戶或服務器)的信息
raft:提供有關Raft共識庫的信息
serf_lan:提供有關LAN八卦池的信息
serf_wan:提供有關WAN八卦池的信息
./consul info
意圖經過Connect定義服務的訪問控制,用於控制哪些服務能夠創建鏈接。能夠經過API,CLI或UI管理意圖。 (這部分和Consul Connect聯繫較爲緊密,後面我研究透了,會單獨寫篇文章)。
建立一個容許「web」與「db」對話的意圖:
$ consul intention create web db
測試是否容許「web」鏈接到「db」:
$ consul intention check web db
找到與「db」服務進行通訊的全部意圖:
$ consul intention match db
經過指定至少一個現有成員,告知正在運行的Consul代理(使用「consul agent」)加入羣集
./consul join cluster_member1_address
其中 cluster_member1_address 是ip:port的格式,能夠經過運行./consul members 發現現有集羣的地址。
keygen命令生成可用於Consul代理流量加密的加密密鑰。 keygen命令使用加密強僞隨機數生成器來生成密鑰。你也能夠選擇本身生成一個UUID。
./consul keygen
keyring命令用於檢查和修改Consul的Gossip Pools中使用的加密密鑰。 它可以向集羣分發新的加密密鑰,淘汰舊的加密密鑰,以及更改集羣用來加密消息的密鑰。
查看集羣目前使用的全部祕鑰
./consul keyring -list
這個值,與咱們配置文件中指定的 "encrypt":"krCysDJnrQ8dtA7AbJav8g=="是一致的。
kv命令用於經過命令行與Consul的KV存儲進行交互。它公開了用於從KV存儲中插入,更新,讀取和刪除的頂級命令。
使用值「5」建立或更新名爲「redis / config / connections」的鍵:
./consul kv put redis/config/connections 5
讀回這個值:
./consul kv get redis/config/connections
或獲取詳細的關鍵信息:
./consul kv get -detailed redis/config/connections
最後,刪除密鑰:
./consul kv delete redis/config/connections
leave命令觸發代理的正常離開和關閉進程。 它用於確保其餘節點將代理視爲「離開了」而不是「失敗了」。 離開了的節點在帶快照從新啓動時不會嘗試從新加入羣集。
這個是企業級consul所帶功能,略。
lock命令提供了一種簡單分佈式鎖的機制。在KV存儲中的給定前綴處建立鎖(或信號量),而且僅在保持時,調用子進程。若是鎖丟失或通訊中斷,子進程將終止。
當-n = 1時,只存在一個提供互斥的鎖持有者或領導者。 設置更高的值會切換到容許多個持有者協調的信號量。另外,提供的前綴必須具備寫權限
下面舉個互斥鎖的例子:
得到鎖的進程會睡眠10s, 沒拿到鎖的會在1s內因超時被終止。
1.首先在kv存儲放入一個鍵值對。
./consul kv put redis/config/connections 1
2.而後打開兩個終端,切換到consul安裝的目錄,分別執行如下命令。
./consul lock -n=1 -timeout=1s redis/config/connections sleep 10
拿到鎖的正常執行,睡眠10s後,執行完畢。
沒拿到鎖的因獲取鎖超時(這裏設置是1s)被停止。
login命令將使用請求的auth方法將提供的第三方憑證與新建立的Consul ACL令牌交換。 配對命令consul logout應該用於銷燬以這種方式建立的任何令牌,以免資源泄漏。
$ consul login -method 'minikube' \
-bearer-token-file '/run/secrets/kubernetes.io/serviceaccount/token' \ -token-sink-file 'consul.token'
$ cat consul.token
36103ae4-6731-e719-f53a-d35188cfa41d
因爲這裏我尚未學習kubernetes,後面有機會能夠補上。
若是是從consul login建立的,則logout命令將銷燬提供的令牌。
$ consul logout -token-file 'consul.token'
maint命令提供對服務維護模式的控制。 使用該命令,能夠將節點提供的服務或節點上的全部服務標記爲「維護中」。 在此操做模式下,該服務不會出如今DNS查詢結果或API結果中。 這有效地將服務從服務的可用「健康」節點池中取出。
經過在服務的緊急狀態下注冊運行情況檢查來激活維護模式,並經過取消註冊運行情況檢查來取消激活維護模式。
下面註冊一個helloservice1,在postman中,對應位置輸入如下參數。
PUT http://localhost:8500/v1/agent/service/register?token=cd76a0f7-5535-40cc-8696-073462acc6c7 { "ID": "helloservice1", "Name": "helloservice", "Tags": [ "v1", "master" ], "Address": "127.0.0.1", "Port": 8000, "Meta": { "api_version": "1.0" }, "EnableTagOverride": false, "Check": { "DeregisterCriticalServiceAfter": "90m", "HTTP": "http://www.baidu.com/", "Interval": "10s" } }
讓服務處於維護狀態
./consul maint -enable -service helloservice1 -reason "need to update"
讓服務取消維護狀態
./consul maint -disable -service helloservice1
members命令輸出Consul代理知道的當前成員列表及其狀態。 節點的狀態只能是「alive」,「left」或「failed」。
處於「failed」狀態的節點仍然列出,由於在故障實際上只是網絡分區的狀況下,Consul會嘗試在必定時間內從新鏈接故障節點。
單機版輸出:
集羣版輸出:
monitor命令用於鏈接和跟蹤正在運行的Consul代理的日誌。 Monitor將顯示最近的日誌,而後繼續關注日誌,直到中斷或遠程代理退出以前不會退出。
monitor命令的強大之處在於它容許您以相對較高的日誌級別(例如「warn」)記錄代理,但仍然能夠訪問debug日誌並在必要時查看debug日誌。
舉個例子
./consul monitor debug
operator命令爲Consul操做員提供集羣級工具,例如與Raft子系統交互。具體子命令的使用說明記得使用--help
好比:
./consul operator raft --help
下面列出raft對等集:
單機版
集羣版
能夠看到只有server agent才參加raft 對等集的一部分。
reload命令會觸發代理的配置文件從新加載。
SIGHUP信號一般用於觸發從新加載配置,但在某些狀況下,觸發CLI可能更方便。
此命令與信號的操做相同,這意味着它將觸發從新加載,但不會等待從新加載完成。 從新加載的任何錯誤都將出如今代理日誌中,而不會出如今此命令的輸出中。
注意
並不是全部配置選項均可從新加載。 有關支持哪些選項的詳細信息,請參閱代理選項頁面上的可從新加載配置部分。
舉個例子:
咱們將一開始的配置文件,config.json 中的 log_level 由 info 改成 debug 。
./consul reload
能夠在consul agent運行的命令行中看到在從新加載配置。
rtt命令使用Consul的集羣網絡座標模型估計兩個節點之間的網絡往返時間。
因爲這裏須要多個server,因此這裏我用了前面一篇文章在虛擬機上搭建的集羣。
這裏因爲我只有一個數據中心,無法實驗多個數據中心的rtt, 不過使用方法相似,以下
$ consul rtt -wan n1.dc1 n2.dc2 Estimated n1.dc1 <-> n2.dc2 rtt: 1.275 ms (using WAN coordinates)
services命令具備子命令,用於與向本地代理註冊的Consul服務進行交互。 它們提供了有用的命令,例如註冊和註銷,以便在腳本,開發模式等中輕鬆註冊服務。要查看目錄中的全部服務,而不是僅查看代理本地服務,請使用./consul catalog services命令。
建立一個簡單的服務:
./consul services register -name=web
從一個配置 文件中 建立服務
$ cat web.json { "Service": { "Name": "web" } } $ ./consul services register web.json
註銷一個服務(兩種方式均可以):
$ ./consul services deregister web.json $ ./consul services deregister -id web
snapshot命令具備子命令,用於保存,恢復和檢查Consul服務器的狀態以進行災難恢復。 這些是原子時間點快照,包括鍵/值條目,服務目錄,準備好的查詢,會話和ACL。
save:保存Consul服務器狀態的快照
restore: 恢復Consul服務器狀態的快照
inspect: 顯示有關Consul快照文件的信息
tls命令用於幫助爲Consul TLS設置CA和證書。
consul validate命令對Consul配置文件執行完全的健全性測試。 對於給定的每一個文件或目錄,該命令將嘗試像consul agent命令那樣解析內容,並捕獲任何錯誤。
這對於僅對配置進行測試頗有用,而無需實際啓動代理。 這將執行代理程序將執行的全部驗證,所以應該爲此提供將由代理程序加載的完整配置文件集。 此命令沒法對部分配置片斷進行操做,由於這些片斷不會經過完整的代理驗證。
好比說驗證下咱們一開始的配置文件
./consul validate config.json
version命令打印Consul的版本以及它與其餘代理進行通訊時理解的協議版本。
./consul version
1.因爲篇幅有限,本文的大致上是對命令行的基本介紹,想要用好命令行還須要讀讀官方文檔和linux的說明文檔。
2.另外文中出現的集羣版:請參考個人另外一篇文章,Consul1.5.0 帶ACL控制集羣搭建
https://www.consul.io/docs/co...
https://www.consul.io/docs/ac...
https://www.consul.io/docs/ag...