這篇文章結合具體的示例來介紹如何在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