天天看點

consul指令行檢視服務_Consul 簡介、安裝、常用指令的使用

1 Consul簡介

Consul 是 HashiCorp 公司推出的開源工具,用于實作分布式系統的服務發現與配置。與其他分布式服務注冊與發現的方案,Consul的方案更“一站式”,内置了服務注冊與發現框 架、分布一緻性協定實作、健康檢查、Key/Value存儲、多資料中心方案,不再需要依賴其他工具(比如ZooKeeper等)。使用起來也較 為簡單。Consul使用Go語言編寫,是以具有天然可移植性(支援Linux、windows和Mac OS X);安裝包僅包含一個可執行檔案,友善部署,與Docker等輕量級容器可無縫配合 。

2 Consul安裝

安裝環境:

mac:64bit(檢視mac位數:打開終端–>”uname -a”)

consul_0.6.4_darwin_amd64.zip和consul_0.6.4_web_ui.zip,從consul官網https://www.consul.io/downloads.html進行下載下傳就好(選擇好OS和位數)

1、解壓consul_0.6.4_darwin_amd64.zip

2、将解壓後的二進制檔案consul(上邊畫紅框的部分拷貝到/usr/local/bin下)

sudo scp consul /usr/local/bin/

說明:使用sudo是因為權限問題。

3、檢視是否安裝成功,

直接在家目錄下執行consul指令即可。出現如下結果,表示安裝成功。

lidongdeMacBook-Pro:bin lidong$ consul

usage: consul [--version] [--help] []

Available commands are:

agent Runs a Consul agent

configtest Validate config file

event Fire a new event

exec Executes a command on Consul nodes

force-leave Forces a member of the cluster to enter the "left" state

info Provides debugging information for operators

join Tell Consul agent to join cluster

keygen Generates a new encryption key

keyring Manages gossip layer encryption keys

kv Interact with the key-value store

leave Gracefully leaves the Consul cluster and shuts down

lock Execute a command holding a lock

maint Controls node or service maintenance mode

members Lists the members of a Consul cluster

monitor Stream logs from a Consul agent

operator Provides cluster-level tools for Consul operators

reload Triggers the agent to reload configuration files

rtt Estimates network round trip time between nodes

snapshot Saves, restores and inspects snapshots of Consul server state

version Prints the Consul version

watch Watch for changes in Consul

3 Consul 啟動

1、執行指令

./consul agent -dev # -dev表示開發模式運作,另外還有-server表示服務模式運作

1

檢視顯示結果:

lidongdeMacBook-Pro:bin lidong$ consul agent -dev

==> Starting Consul agent...

==> Starting Consul agent RPC...

==> Consul agent running!

Version: 'v0.7.5'

Node ID: 'c67a8d03-deac-35b8-8f68-06ff7b687215'

Node name: 'lidongdeMacBook-Pro.local'

Datacenter: 'dc1'

Server: true (bootstrap: false)

Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)

Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)

Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false

Atlas:

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

2017/03/13 12:44:31 [DEBUG] Using unique ID "c67a8d03-deac-35b8-8f68-06ff7b687215" from host as node ID

2017/03/13 12:44:31 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:127.0.0.1:8300 Address:127.0.0.1:8300}]

2017/03/13 12:44:31 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")

2017/03/13 12:44:31 [INFO] serf: EventMemberJoin: lidongdeMacBook-Pro.local 127.0.0.1

2017/03/13 12:44:31 [INFO] consul: Adding LAN server lidongdeMacBook-Pro.local (Addr: tcp/127.0.0.1:8300) (DC: dc1)

2017/03/13 12:44:31 [INFO] serf: EventMemberJoin: lidongdeMacBook-Pro.local.dc1 127.0.0.1

2017/03/13 12:44:31 [INFO] consul: Adding WAN server lidongdeMacBook-Pro.local.dc1 (Addr: tcp/127.0.0.1:8300) (DC: dc1)

2017/03/13 12:44:36 [WARN] raft: Heartbeat timeout from "" reached, starting election

2017/03/13 12:44:36 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2

2017/03/13 12:44:36 [DEBUG] raft: Votes needed: 1

2017/03/13 12:44:36 [DEBUG] raft: Vote granted from 127.0.0.1:8300 in term 2. Tally: 1

2017/03/13 12:44:36 [INFO] raft: Election won. Tally: 1

2017/03/13 12:44:36 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state

2017/03/13 12:44:36 [INFO] consul: cluster leadership acquired

2017/03/13 12:44:36 [INFO] consul: New leader elected: lidongdeMacBook-Pro.local

2017/03/13 12:44:36 [DEBUG] consul: reset tombstone GC to index 3

2017/03/13 12:44:36 [INFO] consul: member 'lidongdeMacBook-Pro.local' joined, marking health alive

2017/03/13 12:44:37 [INFO] agent: Synced service 'consul'

2017/03/13 12:44:37 [DEBUG] agent: Node info in sync

2017/03/13 12:44:39 [INFO] agent.rpc: Accepted client: 127.0.0.1:54095

2017/03/13 12:44:50 [DEBUG] http: Request GET /v1/catalog/datacenters (580.862µs) from=127.0.0.1:54114

2017/03/13 12:44:50 [DEBUG] http: Request GET /v1/catalog/datacenters (34.955µs) from=127.0.0.1:54114

2017/03/13 12:44:50 [DEBUG] http: Request GET /v1/internal/ui/nodes?dc=dc1&token= (1.024476ms) from=127.0.0.1:54112

2017/03/13 12:44:50 [DEBUG] http: Request GET /v1/coordinate/nodes?dc=dc1&token= (361.25µs) from=127.0.0.1:54111

2017/03/13 12:44:50 [DEBUG] http: Request GET /v1/internal/ui/services?dc=dc1&token= (315.405µs) from=127.0.0.1:54111

2017/03/13 12:44:53 [DEBUG] http: Request GET /v1/internal/ui/nodes?dc=dc1&token= (140.095µs) from=127.0.0.1:54111

2017/03/13 12:44:54 [DEBUG] http: Request GET /v1/kv/?keys&seperator=/&dc=dc1&token= (1.368486ms) from=127.0.0.1:54111

2017/03/13 12:44:55 [DEBUG] http: Request GET /v1/acl/list?dc=dc1&token= (9.253µs) from=127.0.0.1:54111

2017/03/13 12:44:57 [DEBUG] http: Request GET /v1/internal/ui/services?dc=dc1&token= (109.196µs) from=127.0.0.1:54111

2017/03/13 12:44:59 [DEBUG] http: Request GET /v1/internal/ui/services?dc=dc1&token= (98.48µs) from=127.0.0.1:54111

2017/03/13 12:45:58 [DEBUG] agent: Service 'consul' in sync

2017/03/13 12:45:58 [DEBUG] agent: Node info in sync

2017/03/13 12:47:55 [DEBUG] agent: Service 'consul' in sync

2017/03/13 12:47:55 [DEBUG] agent: Node info in sync

說明:

-dev(該節點的啟動不能用于生産環境,因為該模式下不會持久化任何狀态),該啟動模式僅僅是為了快速便捷的啟動單節點consul

該節點處于server模式

該節點是leader

該節點是一個健康節點

2、檢視consul cluster中的每一個consul節點的資訊

lidongdeMacBook-Pro:~ lidong$ consul members

Node Address Status Type Build Protocol DC

lidongdeMacBook-Pro.local 127.0.0.1:8301 alive server 0.7.5 2 dc1

1

2

3

4

說明:

Address:節點位址

Status:alive表示節點健康

Type:server運作狀态是server狀态

DC:dc1表示該節點屬于DataCenter1

注意:

members指令的輸出是基于gossip協定的,并且是最終一緻的(也就是說,某一個時刻你去運用該指令查到的consul節點的狀态資訊可能是有誤的)

4 停止服務(優雅退出)

指令:CTRL+C

^C==> Caught signal: interrupt

2017/03/13 12:50:42 [DEBUG] http: Shutting down http server (127.0.0.1:8500)

2017/03/13 12:50:42 [INFO] agent: requesting shutdown

2017/03/13 12:50:42 [INFO] consul: shutting down server

2017/03/13 12:50:42 [WARN] serf: Shutdown without a Leave

2017/03/13 12:50:42 [WARN] serf: Shutdown without a Leave

2017/03/13 12:50:42 [ERR] dns: error starting tcp server: accept tcp 127.0.0.1:8600: use of closed network connection

2017/03/13 12:50:42 [INFO] agent: shutdown complete

1

2

3

4

5

6

7

8

9

說明:

該節點離開後,會通知cluster中的其他節點

注意:

5 Consul常用指令

指令

解釋

示例

agent

運作一個consul agent

consul agent -dev

join

将agent加入到consul叢集

consul join IP

members

列出consul cluster叢集中的members

consul members

leave

将節點移除所在叢集

consul leave

consul agent 指令詳解

輸入consul agent --help ,可以看到consul agent 的選項,如下:

-advertise=addr Sets the advertise address to use

-advertise-wan=addr Sets address to advertise on wan instead of advertise addr

-atlas=org/name Sets the Atlas infrastructure name, enables SCADA.

-atlas-join Enables auto-joining the Atlas cluster

-atlas-token=token Provides the Atlas API token

-atlas-endpoint=1.2.3.4 The address of the endpoint for Atlas integration.

-bootstrap Sets server to bootstrap mode

-bind=0.0.0.0 Sets the bind address for cluster communication

-http-port=8500 Sets the HTTP API port to listen on

-bootstrap-expect=0 Sets server to expect bootstrap mode.

-client=127.0.0.1 Sets the address to bind for client access.

This includes RPC, DNS, HTTP and HTTPS (if configured)

-config-file=foo Path to a JSON file to read configuration from.

This can be specified multiple times.

-config-dir=foo Path to a directory to read configuration files

from. This will read every file ending in ".json"

as configuration in this directory in alphabetical

order. This can be specified multiple times.

-data-dir=path Path to a data directory to store agent state

-dev Starts the agent in development mode.

-recursor=1.2.3.4 Address of an upstream DNS server.

Can be specified multiple times.

-dc=east-aws Datacenter of the agent (deprecated: use 'datacenter' instead).

-datacenter=east-aws Datacenter of the agent.

-encrypt=key Provides the gossip encryption key

-join=1.2.3.4 Address of an agent to join at start time.

Can be specified multiple times.

-join-wan=1.2.3.4 Address of an agent to join -wan at start time.

Can be specified multiple times.

-retry-join=1.2.3.4 Address of an agent to join at start time with

retries enabled. Can be specified multiple times.

-retry-interval=30s Time to wait between join attempts.

-retry-max=0 Maximum number of join attempts. Defaults to 0, which

will retry indefinitely.

-retry-join-wan=1.2.3.4 Address of an agent to join -wan at start time with

retries enabled. Can be specified multiple times.

-retry-interval-wan=30s Time to wait between join -wan attempts.

-retry-max-wan=0 Maximum number of join -wan attempts. Defaults to 0, which

will retry indefinitely.

-log-level=info Log level of the agent.

-node=hostname Name of this node. Must be unique in the cluster

-protocol=N Sets the protocol version. Defaults to latest.

-rejoin Ignores a previous leave and attempts to rejoin the cluster.

-server Switches agent to server mode.

-syslog Enables logging to syslog

-ui Enables the built-in static web UI server

-ui-dir=path Path to directory containing the Web UI resources

-pid-file=path Path to file to store agent PID

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

consul agent 指令的常用選項,如下:

-data-dir

作用:指定agent儲存狀态的資料目錄

這是所有agent都必須的

對于server尤其重要,因為他們必須持久化叢集的狀态

-config-dir

作用:指定service的配置檔案和檢查定義所在的位置

通常會指定為”某一個路徑/consul.d”(通常情況下,.d表示一系列配置檔案存放的目錄)

-config-file

作用:指定一個要裝載的配置檔案

該選項可以配置多次,進而配置多個配置檔案(後邊的會合并前邊的,相同的值覆寫)

-dev

作用:建立一個開發環境下的server節點

該參數配置下,不會有任何持久化操作,即不會有任何資料寫入到磁盤

這種模式不能用于生産環境(因為第二條)

-bootstrap-expect

作用:該指令通知consul server我們現在準備加入的server節點個數,該參數是為了延遲日志複制的啟動直到我們指定數量的server節點成功的加入後啟動。

-node

作用:指定節點在叢集中的名稱

該名稱在叢集中必須是唯一的(預設采用機器的host)

推薦:直接采用機器的IP

-bind

作用:指明節點的IP位址

有時候不指定綁定IP,會報Failed to get advertise address: Multiple private IPs found. Please configure one. 的異常

-server

作用:指定節點為server

每個資料中心(DC)的server數推薦至少為1,至多為5

所有的server都采用raft一緻性算法來確定事務的一緻性和線性化,事務修改了叢集的狀态,且叢集的狀态儲存在每一台server上保證可用性

server也是與其他DC互動的門面(gateway)

-client

作用:指定節點為client,指定用戶端接口的綁定位址,包括:HTTP、DNS、RPC

預設是127.0.0.1,隻允許回環接口通路

若不指定為-server,其實就是-client

-join

作用:将節點加入到叢集

-datacenter(老版本叫-dc,-dc已經失效)

作用:指定機器加入到哪一個資料中心中

使用-client 參數可指定允許用戶端使用什麼ip去通路,例如-client 192.168.11.143 表示可以使用http://192.168.11.143:8500/ui 去通路。

我們嘗試一下:

consul agent -dev -client 192.168.11.143

1

6 Consul 的高可用

Consul Cluster叢集架構圖如下:

consul指令行檢視服務_Consul 簡介、安裝、常用指令的使用

這邊準備了三台CentOS 7的虛拟機,主機規劃如下,供參考:

主機名稱

IP

作用

是否允許遠端通路

node0

192.168.11.143

consul server

node1

192.168.11.144

consul client

node2

192.168.11.145

consul client

6.1 搭建步驟:

啟動node0機器上的Consul(node0機器上執行):

consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1

1

啟動node1機器上的Consul(node1機器上執行):

consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui

1

啟動node2機器上的Consul(node2機器上執行):

consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145

1

将node1節點加入到node0上(node1機器上執行):

consul join 192.168.11.143

1

将node2節點加入到node0上(node2機器上執行):

consul join -rpc-addr=192.168.11.145:8400 192.168.11.143

1

這樣一個簡單的Consul叢集就搭建完成了,在node1上檢視目前叢集節點:

consul members -rpc-addr=192.168.11.143:8400

1

結果如下:

Node Address Status Type Build Protocol DC

node0 192.168.11.143:8301 alive server 0.7.0 2 dc1

node1 192.168.11.144:8301 alive client 0.7.0 2 dc1

node2 192.168.11.145:8301 alive client 0.7.0 2 dc1

1

2

3

4

說明叢集已經搭建成功了。

我們分析一下,為什麼第5步和第6步需要加-rpc-addr 選項,而第4步不需要加任何選項呢?原因是-client 指定了用戶端接口的綁定位址,包括:HTTP、DNS、RPC,而consul join 、consul members 都是通過RPC與Consul互動的。

6.2 通路叢集

consul指令行檢視服務_Consul 簡介、安裝、常用指令的使用

如上,我們三個節點都加了-ui 參數啟動了内建的界面。我們可以通過:http://192.168.11.143:8500/ui/ 或者http://192.168.11.145:8500/ui/進行通路,也可以在node1機器上通過http://127.0.0.1:8500/ui/ 進行通路,原因是node1沒有開啟遠端通路 ,三種通路方式結果是一緻的,如下:7 參考文檔: