點擊上方"IT牧場",選擇"設為星標"技術乾貨每日送達!
TIPS
•本文基於Consul 1.5.3,理論適用於Consul 1.6及更低版本。•安裝單機版Consul詳見:《安裝單機版Consul》
知識預熱Consul常用命令命令解釋示例agent運行一個consul agentconsul agent -devjoin將agent加入到consul集群consul join IPmembers列出consul cluster集群中的membersconsul membersleave將節點移除所在集群consul leave參考文檔這裡只列出幾個常用的命令,consul有將近20個命令,本文不作展開,詳見:https://www.consul.io/docs/commands/index.html[1]
consul agent 命令詳解常用選項consul agent 命令的常用選項如下:
•-data-dir
•作用:指定agent儲存狀態的數據目錄•這是所有agent都必須的•對於server尤其重要,因為他們必須持久化集群的狀態
•-config-dir
•作用:指定service的配置文件和檢查定義所在的位置•通常會指定為"某一個路徑/consul.d"(通常情況下,.d表示一系列配置文件存放的目錄)
•-config-file
•作用:指定一個要裝載的配置文件•該選項可以配置多次,進而配置多個配置文件(後邊的會合併前邊的,相同的值覆蓋)
•-dev
•作用:創建一個開發環境下的server節點•該參數配置下,不會有任何持久化操作,即不會有任何數據寫入到磁碟•這種模式不能用於生產環境(因為第二條)
•-bootstrap-expect
•作用:該命令通知consul server我們現在準備加入的server節點個數,該參數是為了延遲日誌複製的啟動直到我們指定數量的server節點成功的加入後啟動。
•-node
•作用:指定節點在集群中的名稱•該名稱在集群中必須是唯一的(默認採用機器的host)•推薦:直接採用機器的IP
•-bind
•作用:指明節點的IP位址•有時候不指定綁定IP,會報Failed to get advertise address: Multiple private IPs found. Please configure one.的異常
•-server
•作用:指定節點為server•每個數據中心(DC)的server數推薦至少為1,至多為5•所有的server都採用raft一致性算法來確保事務的一致性和線性化,事務修改了集群的狀態,且集群的狀態保存在每一臺server上保證可用性•server也是與其他DC交互的門面(gateway)
•-client
•作用:指定節點為client,指定客戶端接口的綁定地址,包括:HTTP、DNS、RPC•默認是127.0.0.1,只允許迴環接口訪問•若不指定為-server,其實就是-client
•-join
•作用:將節點加入到集群
•-datacenter(老版本叫-dc,-dc已經失效)•作用:指定機器加入到哪一個數據中心中
示例1:命令參數方式執行consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145示例2:配置文件方式執行準備一個配置文件,名稱任意,例如consul.json,內容如下:
{ "datacenter": "us-east-1", "data_dir": "/Users/zhouli/develop/software/consul-data/", "addresses": { "https": "0.0.0.0" }, "ports": { "http": 8500 }, "acl" : { "enabled": true, "default_policy": "deny", "down_policy": "extend-cache", "tokens" : { "master" : "b1gs33cr3t" } }}啟動時,讓consul讀取配置文件:
consul agent -dev -config-file="consul-config/consul.json"參考文檔consul agent 有20來個選項,本文只列出了常用選項,其他選項未作展開,詳見: https://www.consul.io/docs/agent/options.html[2]
Consul集群搭建主機規劃準備三臺CentOS 7的虛擬機,主機規劃如下:
主機名稱IP作用是否允許遠程訪問node0192.168.11.143consul server是node1192.168.11.144consul client否node2192.168.11.145consul client是搭建步驟•啟動node0機器上的Consul(node0機器上執行):
consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1•啟動node1機器上的Consul(node1機器上執行):
consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui•啟動node2機器上的Consul(node2機器上執行):
consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145•將node1節點加入到node0上(node1機器上執行):
consul join 192.168.11.143•將node2節點加入到node0上(node2機器上執行):
consul join -rpc-addr=192.168.11.145:8400 192.168.11.143•這樣一個簡單的Consul集群就搭建完成了,在node1上查看當前集群節點:
consul members -rpc-addr=192.168.11.143:8400結果如下:
Node Address Status Type Build Protocol DCnode0 192.168.11.143:8301 alive server 0.7.0 2 dc1node1 192.168.11.144:8301 alive client 0.7.0 2 dc1node2 192.168.11.145:8301 alive client 0.7.0 2 dc1說明集群已經搭建成功了。
我們分析一下,為什麼第5步和第6步需要加-rpc-addr 選項,而第4步不需要加任何選項呢?原因是-client 指定了客戶端接口的綁定地址,包括:HTTP、DNS、RPC,而consul join 、consul members 都是通過RPC與Consul交互的。
訪問測試如上,我們三個節點都加了-ui 參數啟動了內建的界面。我們可以通過:http://192.168.11.143:8500/ui/ 或者 http://192.168.11.145:8500/ui/ 進行訪問,也可以在node1機器上通過 http://127.0.0.1:8500/ui/ 進行訪問,原因是node1沒有開啟遠程訪問 ,三種訪問方式結果一致。
必看文章•使用Consul做服務發現的若干姿勢[3]
乾貨分享最近將個人學習筆記整理成冊,使用PDF分享。關注我,回復如下代碼,即可獲得百度盤地址,無套路領取!
•001:《Java並發與高並發解決方案》學習筆記;•002:《深入JVM內核——原理、診斷與優化》學習筆記;•003:《Java面試寶典》•004:《Docker開源書》•005:《Kubernetes開源書》•006:《DDD速成(領域驅動設計速成)》•007:全部•008:加技術討論群
近期熱文•安裝單機版Consul•微服務治理實踐:探尋業務的單點異常自愈能力•支付寶的架構到底有多牛逼!還沒看完我就跪了!•配置熱更新,不想重啟,如何更新Bean的狀態?•如何模擬 5 萬的並發用戶•一篇文章搞定:掃碼登錄實現原理
References[1]: https://www.consul.io/docs/commands/index.html
[2]: https://www.consul.io/docs/agent/options.html
[3] 使用Consul做服務發現的若干姿勢: http://blog.bossma.cn/consul/consul-service-register-and-discovery-style/想知道更多?長按/掃碼關注我吧↓↓↓>>>技術討論群<<<喜歡就點個"在看"唄^_^