Consul:5:服務註冊示例

在這裏插入圖片描述
這篇文章結合具體的示例來介紹如何在Consul中進行服務的註冊。

事前準備

Consul安裝

本文示例使用的Consul版本信息如下

liumiaocn:~ liumiao$ consul --version
Consul v1.7.1
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
liumiaocn:~ liumiao$ 

服務定義

使用服務定義只最爲通用的服務註冊的方式,在Consul中也可以通過HTTP API方式進行,在本文中直接使用Consul配置方式,通過-config-dir選項指定配置文件所在的目錄,在啓動時會講指定目錄下服務定義文件全部讀入並進行註冊。

本文示例中使用如下兩個服務定義在Consul啓動時進行註冊:

liumiaocn:consul.d liumiao$ ls
service-nginx.json	service-tornado.json
liumiaocn:consul.d liumiao$ cat service-nginx.json 
{
	"service": {
		"name": "nginx",
		"tags": ["nginx-tag"],
		"port": 80
	}
}
liumiaocn:consul.d liumiao$ 
liumiaocn:consul.d liumiao$ cat service-tornado.json 
{
	"service": {
		"name": "tornado",
		"tags": ["tornado-tag"],
		"port": 8080
	}
}
liumiaocn:consul.d liumiao$ 
服務定義文件名稱 服務名稱 tag信息 端口信息
service-nginx.json nginx nginx-tag 80
service-tornado.json tornado tornado-tag 8080

啓動Consul服務

使用開發模式啓動Consul服務,並指定配置文件所在的目錄(本例中使用當前目錄)

執行命令:consul agent -dev -enable-script-checks -config-dir=.

注意事項:注意enable-script-checks選項中可能會有一定的安全隱患,某些設定可能引入遠程執行的漏洞從而被惡意軟件所利用,在生產環境中官方建議使用enable-local-script-checks選項進行替代。

啓動日誌如下所示:

liumiaocn:consul.d liumiao$ ls
service-nginx.json	service-tornado.json
liumiaocn:consul.d liumiao$ consul agent -dev -enable-script-checks -config-dir=.
==> Starting Consul agent...
           Version: 'v1.7.1'
           Node ID: '714da227-6852-8f47-4734-acfd64f09dee'
         Node name: 'liumiaocn'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

    2020-02-29T11:52:46.162+0800 [DEBUG] agent: Using random ID as node ID: id=714da227-6852-8f47-4734-acfd64f09dee
    2020-02-29T11:52:46.163+0800 [DEBUG] agent.tlsutil: Update: version=1
    2020-02-29T11:52:46.163+0800 [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
    2020-02-29T11:52:46.164+0800 [INFO]  agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:714da227-6852-8f47-4734-acfd64f09dee Address:127.0.0.1:8300}]"
    2020-02-29T11:52:46.164+0800 [INFO]  agent.server.raft: entering follower state: follower="Node at 127.0.0.1:8300 [Follower]" leader=
    2020-02-29T11:52:46.164+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: liumiaocn.dc1 127.0.0.1
    2020-02-29T11:52:46.165+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: liumiaocn 127.0.0.1
    2020-02-29T11:52:46.165+0800 [INFO]  agent.server: Adding LAN server: server="liumiaocn (Addr: tcp/127.0.0.1:8300) (DC: dc1)"
    2020-02-29T11:52:46.165+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=liumiaocn.dc1 area=wan
    2020-02-29T11:52:46.165+0800 [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=tcp
    2020-02-29T11:52:46.165+0800 [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=udp
    2020-02-29T11:52:46.165+0800 [INFO]  agent: Started HTTP server: address=127.0.0.1:8500 network=tcp
    2020-02-29T11:52:46.165+0800 [INFO]  agent: Started gRPC server: address=127.0.0.1:8502 network=tcp
    2020-02-29T11:52:46.165+0800 [INFO]  agent: started state syncer
==> Consul agent running!
    2020-02-29T11:52:46.218+0800 [WARN]  agent.server.raft: heartbeat timeout reached, starting election: last-leader=
    2020-02-29T11:52:46.218+0800 [INFO]  agent.server.raft: entering candidate state: node="Node at 127.0.0.1:8300 [Candidate]" term=2
    2020-02-29T11:52:46.218+0800 [DEBUG] agent.server.raft: votes: needed=1
    2020-02-29T11:52:46.218+0800 [DEBUG] agent.server.raft: vote granted: from=714da227-6852-8f47-4734-acfd64f09dee term=2 tally=1
    2020-02-29T11:52:46.218+0800 [INFO]  agent.server.raft: election won: tally=1
    2020-02-29T11:52:46.218+0800 [INFO]  agent.server.raft: entering leader state: leader="Node at 127.0.0.1:8300 [Leader]"
    2020-02-29T11:52:46.218+0800 [INFO]  agent.server: cluster leadership acquired
    2020-02-29T11:52:46.218+0800 [INFO]  agent.server: New leader elected: payload=liumiaocn
    2020-02-29T11:52:46.222+0800 [DEBUG] connect.ca.consul: consul CA provider configured: id=07:80:c8:de:f6:41:86:29:8f:9c:b8:17:d6:48:c2:d5:c5:5c:7f:0c:03:f7:cf:97:5a:a7:c1:68:aa:23:ae:81 is_primary=true
    2020-02-29T11:52:46.235+0800 [INFO]  agent.server.connect: initialized primary datacenter CA with provider: provider=consul
    2020-02-29T11:52:46.235+0800 [INFO]  agent.leader: started routine: routine="CA root pruning"
    2020-02-29T11:52:46.235+0800 [DEBUG] agent.server: Skipping self join check for node since the cluster is too small: node=liumiaocn
    2020-02-29T11:52:46.235+0800 [INFO]  agent.server: member joined, marking health alive: member=liumiaocn
    2020-02-29T11:52:46.308+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
    2020-02-29T11:52:46.308+0800 [INFO]  agent: Synced node info
    2020-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=nginx
    2020-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=tornado
    2020-02-29T11:52:48.224+0800 [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado

從日誌信息中我們可以看到如下內容,可以看到Synced service: service=nginx和Synced service: service=tornado的提示信息,這些就是Consul在加載指定配置目錄下的服務定義文件的輸出信息。

    2020-02-29T11:52:46.308+0800 [INFO]  agent: Synced node info
    2020-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=nginx
    2020-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=tornado
    ... 省略
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2020-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado

結果確認

從Consul的web UI也能很清楚地進行結果的確認
在這裏插入圖片描述
nginx服務的詳細信息
在這裏插入圖片描述
tornado服務的詳細信息
在這裏插入圖片描述
注意:本文示例中註冊的服務還尚未啓動,我們並沒有事前在80端口啓動一個nginx服務,在8080端口啓動一個tornado服務,在Consul中可以註冊尚未啓動和運行的服務。

參考內容

https://learn.hashicorp.com/consul/getting-started/services?utm_source=consul.io&utm_medium=docs

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章