Consul入门04 - Consul集群
我們已經啟動了我們的第一個代理并且在這個代理上注冊和查詢了服務。這些顯示了使用Consul是多么的容易但是并沒有展示Consul的可擴展性以及可用于產品級別的服務發現的基礎設施。在本篇向導中,我們將建立我們第一個多成員的真實的集群。
當一個Consul代理啟動后,它對任何其他的節點都一無所知:它是個單獨的隔離集群。為了讓它感知其他的集群成員,代理必須加入一個現有的集群中去。為了加入一個現有的集群,它只需要知道一個單個的現有成員。它加入后,代理將廣播該成員,并且快速發現集群中的其它成員。一個Consul代理能夠加入任何其它的代理,不僅僅是那些運行在服務模式下的代理。
啟動代理
為了模擬一個相對真實的集群,我們將通過Vagrant啟動兩個節點的集群。接下來使用的Vagrantfile可以在Consul倉庫demo中找到。
我們首先啟動兩個節點:
$ vagrant up一旦該系統可用了,我們就能通過ssh登錄到該系統,并開始配置我們的集群。我們開始登錄到第一個節點:
$ vagrant ssh n1在我們以前的例子里,我們使用 *-dev?標志來快速地設置一個開發服務器。無論如何它并不能用于一個集群的環境下。我們將移除?-dev* 標志,而是替換成指定的用于集群的標志,下面就回涉及該標志。
每個集群節點都必須有一個唯一的名稱。默認下Consul使用計算機的主機名,不過我們可以使用?-node?命令行選項手動地覆蓋它。
我們也可以指定?綁定地址:Consul將在該地址偵聽,并且改地址可以被集群中所有其它的節點訪問到。雖然一個?綁定?的地址不是一個嚴格需要的(Consul將默認偵聽在系統中第一個私有的IP),不過最好提供一個。一個生產環境下的服務通常有多個網絡接口,所以指定一個?綁定?地址將保證你不會把Consul綁定到錯誤的網絡接口上。
第一個節點現在將作為我們集群中的唯一服務器,我們指定它運行在server模式下。
-bootstrap-expect?標志暗示Consul服務器我們會有其它的服務節點將會加入。這個標志的目的是延遲復制日志的引導直到預期的服務節點成功加入。你可以在引導教程里查閱到更多的信息。
最后,我們增加?config-dir,指定將在哪里可以找到服務以及檢查定義。
所有的標志都指定后,將這些設置加入?consul ageng?命令行:
vagrant@n1:~$ consul agent -server -bootstrap-expect 1 \-data-dir /tmp/consul -node=agent-one -bind=172.20.20.10 \-config-dir /etc/consul.d ...現在,在另一終端里,我們連接到第二個節點:
$ vagrant ssh n2這次,我們設置?綁定地址?是第二個節點的IP地址。因為該節點將不會是一個Consul的服務器,所以我們不指定它啟動為服務器模式。
所有的標志都指定后,將這些設置加入?consul ageng?命令行:
vagrant@n2:~$ consul agent -data-dir /tmp/consul -node=agent-two \-bind=172.20.20.11 -config-dir /etc/consul.d ...這時,我們已經有了兩個Consul代理在運行:一個服務器和一個客戶端。這兩個Consul代理現在還對彼此沒有任何感知,它們都為兩個單節點的集群。你可以運行?consul members?來驗證它們,每個集群都僅包含一個成員。
加入集群
現在,我們將告知第一個代理加入第二個代理,在一個新的終端中運行下列命令:
$ vagrant ssh n1 ... vagrant@n1:~$ consul join 172.20.20.11 Successfully joined cluster by contacting 1 nodes.你應該可以在各自的代理日志中看到一些日志的輸出。如果你仔細的查看,你將會看到有節點加入的日志信息。如果你再次運行?consul members,你會看到兩個代理都已經感知到了另一個節點的存在。
vagrant@n2:~$ consul members Node Address Status Type Build Protocol agent-two 172.20.20.11:8301 alive client 0.5.0 2 agent-one 172.20.20.10:8301 alive server 0.5.0 2記住:為了加入一個集群,一個Consul代理只需要知道一個現有的成員。在加入指定的集群后,各個代理會互相傳播完整的成員信息。
啟動時自動加入一個集群
理想情況下,無論什么時候一個新的節點加入了你的數據中心中,它應該自動地加入Consul集群而無需手動操作。為了達到這個目的,你可以使用Atlas by HashiCorp并且指定?-atlas-join?標志。下面就是一個配置例子:
$ consul agent -atlas-join \-atlas=ATLAS_USERNAME/infrastructure \-atlas-token="YOUR_ATLAS_TOKEN"這需要一個Atlas的用戶名和token,在這里創建帳號,然后在你的Consul配置中使用你認證信息的替換各自的值。現在,無論何時一個通過Consul代理啟動的節點加入,它將自動加入你的Consul集群而無需硬編碼任何的配置信息。
另一個可以選擇的是,你可以在啟動的時候使用?-join?標志或者?start_join?指定一個已知Consul代理的地址來加入一個集群。
查詢節點
就像查詢服務一樣,Consul有一個API用戶查詢節點信息。你可以通過DNS或者HTTP API來查詢。
對于DNS API,名稱結構是?NAME.node.consul?或者?NAME.node.DATACENTER.consul。 如果數據中心被移除,Consul將僅僅查詢本地數據中心。
例如,從“agent-one”,我們可以查詢節點"agent-two"的地址:
vagrant@n1:~$ dig @127.0.0.1 -p 8600 agent-two.node.consul ...;; QUESTION SECTION: ;agent-two.node.consul. IN A;; ANSWER SECTION: agent-two.node.consul. 0 IN A 172.20.20.11這種查找節點的能力對于系統管理任務而言是非常有用的。例如知道了節點的地址,我們可以使用ssh登錄到該節點并且可以非常容易地使得該節點成為Consul集群中的一部分并且查詢它。
離開集群
為了離開指定的集群,你可以優雅地退出一個代理(使用?Ctrl-C)或者強制殺死代理進程。優雅地離開可以使得節點轉換成離開狀態;其它情況下,其它的節點檢測這個節點將失敗。其不同的地方在這里有詳細的描述。
下一步
現在有了一個多節點的Consul集群已經啟動并且運行著。讓我們通過[健康檢測]()使我們的服務具有更強的魯棒性。
總結
以上是生活随笔為你收集整理的Consul入门04 - Consul集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Consul入门03 - 注册服务
- 下一篇: Consul入门05 - 健康检测