Consul快速入門(二):Consul集羣安裝部署

1、安裝

1.1、下載

以linux下安裝爲例,首先下載安裝包,下載地址:https://www.consul.io/downloads.html

下載後上傳到linux服務器,或者直接在linux上下載,版本可自行替換

wget https://releases.hashicorp.com/consul/1.7.0/consul_1.7.0_linux_amd64.zip

1.2、解壓縮

unzip consul_1.7.0_linux_amd64.zip -d /usr/local/bin

1.3、設置環境變量

筆者已經將/usr/local/bin目錄設置到環境變量中,如果你還沒有設置環境變量,需要設置下

$ vi /etc/profile
export CONSUL_HOME=/usr/local/bin/consul
export PATH=$PATH:CONSUL_HOME

使用環境變量配置生效

source /etc/profile

1.4、驗證

查看consul版本,驗證是否安裝成功

[root@localhost ~]# consul version
Consul v1.7.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

2、運行

2.1、agent啓動參數說明

consul以agent的方式啓動,相關參數說明:

  • -server 以服務端模式運行,相應的還有客戶端模式-client
  • -ui 啓動內置的Web UI
  • -bootstrap-expect=3 集羣最少節點數,類似zookeeper的配置一樣,爲了防止腦裂,一般爲奇數
  • -data-dir=/data/consul 數據存儲目錄
  • -node=agent-1 集羣的節點名稱
  • -client=0.0.0.0 指定客戶端能訪問的ip,類似於ip白名單。0.0.0.0表示不限制
  • -bind=10.25.84.163 綁定了當前主機的IP地址
  • -datacenter=dc1 數據中心名稱
  • -join agent啓動時加入到代理服務器地址,不指定不會加入任何節點,可以在啓動後通過consul join命令加入

更多參數說明可以通過–help查看

consul agent --help

或者參考官網配置說明:https://www.consul.io/docs/agent/options.html

2.2、啓動agent

接下來搭建consul集羣,首先準備三臺服務器:

  • 10.25.84.163
  • 10.25.84.164
  • 10.25.84.165

分別在三臺服務器輸入以下對應的命令:

// 啓動10.25.84.163
consul agent -server -ui -bootstrap-expect=3 -data-dir=/data/consul -node=server-1 -client=0.0.0.0 -bind=10.25.84.163 -datacenter=dc1

// 啓動10.25.84.164,並加入10.25.84.163節點
consul agent -server -ui -bootstrap-expect=3 -data-dir=/data/consul -node=server-2 -client=0.0.0.0 -bind=10.25.84.164 -datacenter=dc1 -join 10.25.84.163

// 啓動10.25.84.165,並加入10.25.84.163節點
consul agent -server -ui -bootstrap-expect=3 -data-dir=/data/consul -node=server-3 -client=0.0.0.0 -bind=10.25.84.165 -datacenter=dc1 -join 10.25.84.163

啓動日誌:

[root@localhost ~]# consul agent -server -ui -bootstrap-expect=3 -data-dir=/data/consul -node=server-1 -client=0.0.0.0 -bind=10.25.84.163 -datacenter=dc1
bootstrap_expect > 0: expecting 3 servers
==> Starting Consul agent...
           Version: 'v1.7.0'
           Node ID: '4a60c9bd-472b-01a3-57f4-c74b8ba4d3df'
         Node name: 'server-1'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
      Cluster Addr: 10.25.84.163 (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-21T11:28:20.323+0800 [INFO]  agent.server.raft: initial configuration: index=0 servers=[]
    2020-02-21T11:28:20.324+0800 [INFO]  agent.server.raft: entering follower state: follower="Node at 10.25.84.163:8300 [Follower]" leader=
    2020-02-21T11:28:20.325+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: server-1.dc1 10.25.84.163
    2020-02-21T11:28:20.326+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: server-1 10.25.84.163
    2020-02-21T11:28:20.326+0800 [INFO]  agent.server: Adding LAN server: server="server-1 (Addr: tcp/10.25.84.163:8300) (DC: dc1)"
    2020-02-21T11:28:20.326+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=server-1.dc1 area=wan
    2020-02-21T11:28:20.327+0800 [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=tcp
    2020-02-21T11:28:20.327+0800 [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=udp
    2020-02-21T11:28:20.328+0800 [INFO]  agent: Started HTTP server: address=[::]:8500 network=tcp
    2020-02-21T11:28:20.328+0800 [INFO]  agent: started state syncer
==> Consul agent running!
    2020-02-21T11:28:26.317+0800 [WARN]  agent.server.raft: no known peers, aborting election
    2020-02-21T11:28:27.447+0800 [ERROR] agent.anti_entropy: failed to sync remote state: error="No cluster leader"
    2020-02-21T11:28:34.785+0800 [ERROR] agent.http: Request error: method=GET url=/v1/internal/ui/services?dc=dc1&index=10249 from=10.113.116.192:3000 error="No cluster leader"
    2020-02-21T11:28:34.965+0800 [ERROR] agent.http: Request error: method=GET url=/v1/internal/ui/nodes?dc=dc1&index=10249 from=10.113.116.192:3001 error="No cluster leader"
    2020-02-21T11:28:45.387+0800 [ERROR] agent: Coordinate update error: error="No cluster leader"
    2020-02-21T11:28:59.448+0800 [ERROR] agent.anti_entropy: failed to sync remote state: error="No cluster leader"
    2020-02-21T11:29:02.697+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: server-2 10.25.84.164
    2020-02-21T11:29:02.697+0800 [INFO]  agent.server: Adding LAN server: server="server-2 (Addr: tcp/10.25.84.164:8300) (DC: dc1)"
    2020-02-21T11:29:02.698+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: server-2.dc1 10.25.84.164
    2020-02-21T11:29:02.698+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=server-2.dc1 area=wan
    2020-02-21T11:29:19.312+0800 [ERROR] agent: Coordinate update error: error="No cluster leader"
    2020-02-21T11:29:21.261+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: server-3 10.25.84.165
    2020-02-21T11:29:21.261+0800 [INFO]  agent.server: Adding LAN server: server="server-3 (Addr: tcp/10.25.84.165:8300) (DC: dc1)"
    2020-02-21T11:29:21.269+0800 [INFO]  agent.server: Found expected number of peers, attempting bootstrap: peers=10.25.84.163:8300,10.25.84.164:8300,10.25.84.165:8300
    2020-02-21T11:29:21.281+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: server-3.dc1 10.25.84.165
    2020-02-21T11:29:21.281+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=server-3.dc1 area=wan
    2020-02-21T11:29:24.003+0800 [ERROR] agent.anti_entropy: failed to sync remote state: error="No cluster leader"
    2020-02-21T11:29:27.329+0800 [WARN]  agent.server.raft: heartbeat timeout reached, starting election: last-leader=
    2020-02-21T11:29:27.329+0800 [INFO]  agent.server.raft: entering candidate state: node="Node at 10.25.84.163:8300 [Candidate]" term=2
    2020-02-21T11:29:27.351+0800 [INFO]  agent.server.raft: election won: tally=2
    2020-02-21T11:29:27.351+0800 [INFO]  agent.server.raft: entering leader state: leader="Node at 10.25.84.163:8300 [Leader]"
    2020-02-21T11:29:27.351+0800 [INFO]  agent.server.raft: added peer, starting replication: peer=b3d84299-a458-19bf-2b98-ca9031e6aea4
    2020-02-21T11:29:27.351+0800 [INFO]  agent.server.raft: added peer, starting replication: peer=31174405-571f-f598-ef74-0a9aba59a6a8
    2020-02-21T11:29:27.351+0800 [INFO]  agent.server: cluster leadership acquired
    2020-02-21T11:29:27.351+0800 [INFO]  agent.server: New leader elected: payload=server-1
    2020-02-21T11:29:27.352+0800 [INFO]  agent.server.raft: pipelining replication: peer="{Voter 31174405-571f-f598-ef74-0a9aba59a6a8 10.25.84.165:8300}"
    2020-02-21T11:29:27.352+0800 [WARN]  agent.server.raft: appendEntries rejected, sending older logs: peer="{Voter b3d84299-a458-19bf-2b98-ca9031e6aea4 10.25.84.164:8300}" next=1
    2020-02-21T11:29:27.356+0800 [INFO]  agent.server.raft: pipelining replication: peer="{Voter b3d84299-a458-19bf-2b98-ca9031e6aea4 10.25.84.164:8300}"
    2020-02-21T11:29:27.368+0800 [INFO]  agent.leader: started routine: routine="CA root pruning"
    2020-02-21T11:29:27.368+0800 [INFO]  agent.server: member joined, marking health alive: member=server-1
    2020-02-21T11:29:27.381+0800 [INFO]  agent.server: member joined, marking health alive: member=server-2
    2020-02-21T11:29:27.396+0800 [INFO]  agent.server: member joined, marking health alive: member=server-3
    2020-02-21T11:29:28.609+0800 [INFO]  agent: Synced node info

查看集羣啓動結果:

[root@localhost ~]# consul members
Node      Address            Status  Type    Build  Protocol  DC   Segment
server-1  10.25.84.163:8301  alive   server  1.7.0  2         dc1  <all>
server-2  10.25.84.164:8301  alive   server  1.7.0  2         dc1  <all>
server-3  10.25.84.165:8301  alive   server  1.7.0  2         dc1  <all>

命令輸出顯示了集羣節點名稱、IP端口、健康狀態、啓動模式、所在數據中心和版本信息。

2.3、訪問Consul的WebUI控制檯

三臺服務都起來後,我們可以訪問Consul的WebUI控制檯,WEB控制檯默認端口爲:8500,在瀏覽器輸入地址: 10.25.84.163:8500

consul-success-ui-services.PNG

切換nodes標籤頁:

consul-success-ui-nodes.PNG

3、查看數據中心

到目前爲止,我們已經搭建好數據中心了,現在我們可以查看下數據中心中的成員

3.1、通過members命令查看

members命令針對Consul客戶端運行,該客戶端通過gossip協議獲取其信息。

[root@localhost ~]# consul members
Node      Address            Status  Type    Build  Protocol  DC   Segment
server-1  10.25.84.163:8301  alive   server  1.7.0  2         dc1  <all>
server-2  10.25.84.164:8301  alive   server  1.7.0  2         dc1  <all>
server-3  10.25.84.165:8301  alive   server  1.7.0  2         dc1  <all>

命令輸出顯示了數據中心的節點、IP端口、健康狀態、角色、所在數據中心和版本信息。

還可以用過 -detailed 參數獲取更多信息

[root@localhost ~]# consul members -detailed
Node      Address            Status  Tags
server-1  10.25.84.163:8301  alive   acls=0,build=1.7.0:95fb95bf,dc=dc1,expect=3,id=4a60c9bd-472b-01a3-57f4-c74b8ba4d3df,port=8300,raft_vsn=3,role=consul,segment=<all>,vsn=2,vsn_max=3,vsn_min=2,wan_join_port=8302
server-2  10.25.84.164:8301  alive   acls=0,build=1.7.0:95fb95bf,dc=dc1,expect=3,id=b3d84299-a458-19bf-2b98-ca9031e6aea4,port=8300,raft_vsn=3,role=consul,segment=<all>,vsn=2,vsn_max=3,vsn_min=2,wan_join_port=8302
server-3  10.25.84.165:8301  alive   acls=0,build=1.7.0:95fb95bf,dc=dc1,expect=3,id=31174405-571f-f598-ef74-0a9aba59a6a8,port=8300,raft_vsn=3,role=consul,segment=<all>,vsn=2,vsn_max=3,vsn_min=2,wan_join_port=8302

3.2、通過HTTP API查看

curl 10.25.84.163:8500/v1/catalog/nodes

返回數據:

[
    {
        "ID":"99f8e10c-edda-bb40-21b4-8719ba851308",
        "Node":"agent-1",
        "Address":"10.25.84.163",
        "Datacenter":"dc1",
        "TaggedAddresses":{
            "lan":"10.25.84.163",
            "lan_ipv4":"10.25.84.163",
            "wan":"10.25.84.163",
            "wan_ipv4":"10.25.84.163"
        },
        "Meta":{
            "consul-network-segment":""
        },
        "CreateIndex":5,
        "ModifyIndex":11
    },
    {
        "ID":"824a86e6-9713-a136-8037-c489222a88e1",
        "Node":"agent-2",
        "Address":"10.25.84.164",
        "Datacenter":"dc1",
        "TaggedAddresses":{
            "lan":"10.25.84.164",
            "lan_ipv4":"10.25.84.164",
            "wan":"10.25.84.164",
            "wan_ipv4":"10.25.84.164"
        },
        "Meta":{
            "consul-network-segment":""
        },
        "CreateIndex":7,
        "ModifyIndex":10
    },
    {
        "ID":"5f073f8b-2130-254d-c83f-30d7850e2192",
        "Node":"agent-3",
        "Address":"10.25.84.165",
        "Datacenter":"dc1",
        "TaggedAddresses":{
            "lan":"10.25.84.165",
            "lan_ipv4":"10.25.84.165",
            "wan":"10.25.84.165",
            "wan_ipv4":"10.25.84.165"
        },
        "Meta":{
            "consul-network-segment":""
        },
        "CreateIndex":8,
        "ModifyIndex":9
    }
]

3.3、通過DNS接口查看

除了HTTP API外,我們還可以使用DNS接口查看數據中心成員信息

[root@localhost ~]# dig @10.25.84.163 -p 8600 server-1.node.consul

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @10.25.84.163 -p 8600 server-1.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64004
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;server-1.node.consul.		IN	A

;; ANSWER SECTION:
server-1.node.consul.	0	IN	A	10.25.84.163

;; ADDITIONAL SECTION:
server-1.node.consul.	0	IN	TXT	"consul-network-segment="

;; Query time: 1 msec
;; SERVER: 10.25.84.163#8600(10.25.84.163)
;; WHEN: Fri Feb 21 12:47:15 CST 2020
;; MSG SIZE  rcvd: 101

其中server-1.node.consul中第一部分需要替換成自己的agent節點名

dig命令如果不存在需要安裝下,命令:

yum -y install bind-utils

4、停止agent服務

通過consul leave命令優雅停止服務,我們再打開一個從節點機器終端,運行該命令

[root@localhost ~]# consul leave
Graceful leave complete
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章