Consul入门03 - 注册服务
在前面的步驟,我們運行了第一個代理,看到了集群的成員,并且查詢了節點信息。在這篇指南里,我們將注冊我們第一個服務并且查詢這個服務。
定義一個服務
一個服務能夠通過提供一個服務定義或者調用適當的HTTP API來注冊。
服務定義是最通用的注冊服務方法,那么我們將使用這種方法來注冊服務。我們將建構一個代理配置,前面的步驟已經描述過。
首先,為Consul配置創建一個目錄。Consul裝載配置目錄中所有的配置文件,通常在Unix系統中慣例是建立以名為?/etc/consul.d?的目錄(?.d?后綴暗示這個目錄包含了一些配置文件的集合)。
$ sudo mkdir /etc/consul.d下一步,我們將創建一個服務定義配置文件。我們假設我們有一個名為“web"服務,它運行在80端口。另外我們為它設置一個標記,那么我們就可以通過它來查詢到這個服務:
$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \>/etc/consul.d/web.json現在,我們重啟代理,并提供配置目錄參數:
$ consul agent -dev -config-dir /etc/consul.d ==> Starting Consul agent... ...[INFO] agent: Synced service 'web' ...你會注意到在輸出中"synced service 'web'"。這意味著代理已經從配置文件中裝載了該服務定義,并且已經成功注冊該服務到服務目錄中。
如果你想注冊多個服務,你可以在Consul配置目錄中創建多個服務定義文件。
查詢服務
一旦代理啟動并且服務已經同步,我們就可以使用DNS或者HTTP API來查詢服務了。
DNS API
讓我們首先使用DNS API查詢我們的服務。對于DNS API,服務的DNS名稱是?NAME.service.consul?。默認所有的DNS名稱都是在?consul?名稱空間下,當然這個是可配置的。service?子域名告訴Consul我們正在查詢服務,并且?NAME?就是要查詢的服務的名稱。
對于我們注冊的web服務,對應的查詢設置就是?web.service.consul?:
$ dig @127.0.0.1 -p 8600 web.service.consul ...;; QUESTION SECTION: ;web.service.consul. IN A;; ANSWER SECTION: web.service.consul. 0 IN A 172.20.20.11你可以看到,一個帶了節點的IP地址的?A?記錄被返回了,它就是可用的服務。?A?記錄只能包含IP地址。
你也可以使用DNS API來獲取完整的地址/端口的?SRV?記錄:
$ dig @127.0.0.1 -p 8600 web.service.consul SRV ...;; QUESTION SECTION: ;web.service.consul. IN SRV;; ANSWER SECTION: web.service.consul. 0 IN SRV 1 1 80 Armons-MacBook-Air.node.dc1.consul.;; ADDITIONAL SECTION: Armons-MacBook-Air.node.dc1.consul. 0 IN A 172.20.20.11SRV?記錄顯示了web服務證運行在節點?Armons-MacBook-Air.node.dc1.consul.?的80端口上。額外的部分和?A?記錄返回的內容一樣。
最后,我們可以使用DNS API基于標記來過濾服務,基于標記的服務查詢的格式是?TAG.NAME.service.consul?。 在下面的例子里,我們請求Consul查詢所有含"rails"標記的web服務。我們得到了我們注冊的帶有該標記的服務的響應:
$ dig @127.0.0.1 -p 8600 rails.web.service.consul ...;; QUESTION SECTION: ;rails.web.service.consul. IN A;; ANSWER SECTION: rails.web.service.consul. 0 IN A 172.20.20.11HTTP API
除了DNS API,HTTP API也可以用于服務查詢:
$ curl http://localhost:8500/v1/catalog/service/web [{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","ServiceID":"web", \"ServiceName":"web","ServiceTags":["rails"],"ServicePort":80}]該目錄API返回了指定節點以及指定的服務信息。就像我們馬上要看到了健康檢測,通常我們的查詢只是查詢那些健康的實例,這些實例都是通過了健康檢測的。這也是DNS在底層做的事情。下面的查詢只查詢健康的實例:
$ curl 'http://localhost:8500/v1/health/service/web?passing' [{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","Service":{ \"ID":"web", "Service":"web", "Tags":["rails"],"Port":80}, "Checks": ...}]更新服務
當配置文件修改后服務定義可以被更新,需要發送?SIGHUP?信號給代理。這可以讓代理更新服務而無需停止代理或者讓服務查詢時服務不可用。
可以選擇HTTP API來動態地增加,刪除,以及更改服務。
下一步
我們現在配置了一個單代理,并且注冊了一個服務。進展非常不錯,但是下一步我們會展示Consul里最有價值的特性,[設置我們第一個集群]()!
總結
以上是生活随笔為你收集整理的Consul入门03 - 注册服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Consul入门02 - 运行Consu
- 下一篇: Consul入门04 - Consul集