在Consul安裝完成後,必須先運行代理。該代理能夠以服務器或者客戶端模式運行。每一個數據中心必須博阿含至少一個服務器,不過一個集羣推薦3或5個服務器。一個單服務器的部署在失敗的狀況下會發生數據丟失所以不推薦使用。html
全部其餘的代理運行在客戶端模式。一個客戶端是一個很是輕量級的進程,它註冊服務,運行健康檢查,以及轉發查詢到服務器。代理必須運行在集羣中的每一個節點上。node
更多的關於啓動一個數據中心的細節,請查看這篇指導。bootstrap
爲了簡單起見,咱們將暫時在開發者模式中啓動Consul代理。這個模式能夠很是容易快速地啓動一個單節點的Consul環境。固然它並非用於生產環境下而且它也不會持久任何狀態。安全
$ consul agent -dev ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running! Node name: 'Armons-MacBook-Air' Datacenter: 'dc1' Server: true (bootstrap: false) Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400) Cluster Addr: 172.20.20.11 (LAN: 8301, WAN: 8302) Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false Atlas: <disabled> ==> Log data will now stream in as it occurs: [INFO] raft: Node at 172.20.20.11:8300 [Follower] entering Follower state [INFO] serf: EventMemberJoin: Armons-MacBook-Air 172.20.20.11 [INFO] consul: adding LAN server Armons-MacBook-Air (Addr: 172.20.20.11:8300) (DC: dc1) [INFO] serf: EventMemberJoin: Armons-MacBook-Air.dc1 172.20.20.11 [INFO] consul: adding WAN server Armons-MacBook-Air.dc1 (Addr: 172.20.20.11:8300) (DC: dc1) [ERR] agent: failed to sync remote state: No cluster leader [WARN] raft: Heartbeat timeout reached, starting election [INFO] raft: Node at 172.20.20.11:8300 [Candidate] entering Candidate state [DEBUG] raft: Votes needed: 1 [DEBUG] raft: Vote granted. Tally: 1 [INFO] raft: Election won. Tally: 1 [INFO] raft: Node at 172.20.20.11:8300 [Leader] entering Leader state [INFO] raft: Disabling EnableSingleNode (bootstrap) [INFO] consul: cluster leadership acquired [DEBUG] raft: Node 172.20.20.11:8300 updated peer set (2): [172.20.20.11:8300] [DEBUG] consul: reset tombstone GC to index 2 [INFO] consul: New leader elected: Armons-MacBook-Air [INFO] consul: member 'Armons-MacBook-Air' joined, marking health alive [INFO] agent: Synced service 'consul'
你能夠看到,Consul代理已經啓動而且輸出了一些日誌信息。從日誌信息中,你能夠看到咱們代理運行在服務器模式而且聲明集羣的leadship。另外,本地的成員已經被標記爲一個健康的集羣成員。bash
OS X用戶注意:Consul使用你的機器名做爲默認的節點名稱。若是你的機器名包涵了點,那麼DNS查詢該節點會不能工做,爲了不這個問題,使用-node顯式設置你的節點名稱。服務器
若是你在另外一個終端中運行 consul members ,你能看到Consul集羣全部的節點。咱們在下一部分介紹如何加入集羣,可是如今你只能看到一個成員(你本身的機器):網絡
$ consul members Node Address Status Type Build Protocol DC Armons-MacBook-Air 172.20.20.11:8301 alive server 0.6.1dev 2 dc1
該命令輸出顯示你本身的節點,運行的地址,它的健康狀態,它在集羣中的角色,以及一些版本信息。另外元數據能夠經過 -detailed 選項來查看。app
members 命令選項的輸出是基於 gossip協議 的而且其內容是最終一致。也就是說,在任什麼時候候,你在本地代理看到的內容也許與當前服務器中的狀態並非絕對一致的。若是須要強一致性的狀態信息,使用HTTP API向Consul服務器發送請求:curl
$ curl localhost:8500/v1/catalog/nodes [{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","CreateIndex":3,"ModifyIndex":4}]
另外對於HTTP API,DNS接口也常被用來查詢節點信息。注意你必須確信你的DNS可以找到Consul代理的DNS服務器,Consul代理的DNS服務器默認運行在8600端口。有關DNS實體(相似於"Armons-MacBook-Air.node.consul")將在後面有更詳細的介紹。ide
$ dig @127.0.0.1 -p 8600 Armons-MacBook-Air.node.consul ... ;; QUESTION SECTION: ;Armons-MacBook-Air.node.consul. IN A ;; ANSWER SECTION: Armons-MacBook-Air.node.consul. 0 IN A 172.20.20.11
你可以使用 Ctrl-C (中斷信號)來優雅地中止代理。中止代理後,你能夠看到它脫離集羣而且關閉的信息。
爲了優雅地離開集羣,Consul會通知其餘的集羣成員本身已經脫離了。若是你強制殺死代理的進程,那麼其餘的集羣成員須要偵測節點是否失效。當一個成員離開,它的服務以及(checks)將從目錄中移除。當一個成員失效,它的健康會簡單地標記爲critical,但它並不會被從目錄中移除。Consul將自動嘗試從新鏈接到失效的節點,並容許它在某些網絡情況下恢復。
另外,若是一個代理以服務器模式啓動,優雅地離開是很是重要的,由於這能夠避免潛在的可用性問題,有關一致性協議,查看指南來獲取更詳細的關於如何安全的增長和移除服務器的信息。
一個簡單的Consul集羣已經啓動了,讓咱們獲取一些[服務]()吧!
翻譯自這裏