1. 程式人生 > >Consul安裝叢集搭建

Consul安裝叢集搭建

Spring Cloud Consul

1 consul的安裝和配置

1.1 consul agent 命令介紹

下載consul_1.0.0_linux_amd64.zip解壓,裡面只有一個consul可執行檔案,其中,consul最常用到的命令是agent

輸入consul agent -h 可以檢視幫助。其中常見的引數解釋如下:

 -advertise:通知展現地址用來改變我們給叢集中的其他節點展現的地址,一般情況下-bind地址就是展現地址  

 -bootstrap:用來控制一個server是否在bootstrap模式,在一個datacenter中只能有一個server處於bootstrap

模式,當一個server處於bootstrap模式時,可以自己選舉為raft leader。  

 -bootstrap-expect:在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個叢集,該標記不能和bootstrap公用  

 -bind:該地址用來在叢集內部的通訊,叢集內的所有節點到地址都必須是可達的,預設是0.0.0.0  

-clientconsul繫結在哪個client地址上,這個地址提供HTTPDNSRPC等服務,預設是127.0.0.1  

 -config-file:明確的指定要載入哪個配置檔案  

 -config-dir:配置檔案目錄,裡面所有以.json結尾的檔案都會被載入  

 -data-dir:提供一個目錄用來存放agent的狀態,所有的agent允許都需要該目錄,該目錄必須是穩定的,系統重啟後都繼續存在  

 -dc:該標記控制agent允許的datacenter的名稱,預設是dc1  

 -encrypt:指定secret key,使consul在通訊時進行加密,key可以通過consul keygen生成,同一個叢集中的節點必須使用相同的key  

 -join:加入一個已經啟動的agentip地址,可以多次指定多個agent的地址。如果consul不能加入任何指定的地址中,則

agent會啟動失敗,預設agent啟動時不會加入任何節點。  

 -retry-join:和join類似,但是允許你在第一次失敗後進行嘗試。  

 -retry-interval:兩次join之間的時間間隔,預設是30s  

 -retry-max:嘗試重複join的次數,預設是0,也就是無限次嘗試  

 -log-levelconsul agent啟動後顯示的日誌資訊級別。預設是info,可選:tracedebuginfowarnerr。  

 -node:節點在叢集中的名稱,在一個叢集中必須是唯一的,預設是該節點的主機名  

 -protocolconsul使用的協議版本  

 -rejoin:使consul忽略先前的離開,在再次啟動後仍舊嘗試加入叢集中。  

-server:定義agent執行在server模式,每個叢集至少有一個server,建議每個叢集的server不要超過5 

 -syslog:開啟系統日誌功能,只在linux/osx上生效  

 -ui-dir: 提供存放web ui資源的路徑,該目錄必須是可讀的  

 -pid-file: 提供一個路徑來存放pid檔案,可以使用該檔案進行SIGINT/SIGHUP(關閉/更新) agent  

要想利用consul提供的服務實現服務的註冊與發現,我們需要建立consul cluster

consul方案中,每個提供服務的節點上都要部署和執行consulagent,所有執行consul agent節點的集合構成consul cluster

consul agent有兩種執行模式:serverclient。這裡的serverclient只是consul叢集層面的區分,與搭建在cluster之上的應用服務無關。

server模式執行的consul agent節點用於維護consul叢集的狀態,官方建議每個consul cluster至少有3個或以上的執行在server modeagentclient節點不限。

1.2 consul_1.0.0_linux_amd64安裝

我們這裡以安裝三個節點為例,環境配置如下:

172.16.0.27 server模式執行

172.16.0.26192.168.1.72client模式執行

1.2.1 配置consul

(三個節點依次按照下面的步驟配置consul

將下載好的安裝包上傳到linux上,存放在/home/user/tools/cluster目錄。

1) 把下載的consul_1.0.0_linux_amd64.zip檔案解壓

unzip -o -d ./ consul_1.0.0_linux_amd64.zip #解壓到當前路徑

2) 並把解壓後的consul拷貝到/opt/consul目錄,然後把/opt/consul目錄加入到環境變數。(如果不是root使用者,執行下面命名之前需要加上sudo)。

mkdir /opt/consul

cp consul /opt/consul

vim /etc/profile  

加入:export PATH=/opt/consul:$PATH

    source /etc/profile

1.2.2 執行

1:在172.16.0.27節點上面進行

cd /opt/consul

mkdir data

consul agent -server -bootstrap -bind=0.0.0.0 -client=172.16.0.27 -data-dir=data -ui -node=172.16.0.27

consul agent -server -bootstrap-expect 1 -data-dir data   -config-dir /etc/consul.d

這樣,就啟動了一個server節點

2:在172.16.0.26節點上面進行

cd /opt/consul

sudo  mkdir data

sudo consul agent -bind=0.0.0.0 -client=172.16.0.26 -data-dir=data -node=172.16.0.26 -join=172.16.0.27 -ui

如果linux系統的防火牆沒關,可能會報下面的錯,需要將serverclient的防火牆都關閉:

centos7系統

#檢視預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running

firewall-cmd --state

使用如下命令關閉firewall

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall開機啟動

3:在另一個linux服務節點上面進行

1.2.3 驗證

全部節點啟動完之後

訪問http://172.16.0.27:8500/  即可檢視consul叢集的管理頁面

在任意節點執行consul members 即可檢視叢集節點資訊。

這裡在172.16.0.27節點執行

或者

consul members -http-addr=172.16.0.27:8500

也可用:

curl localhost:8500/v1/catalog/nodes

1.2.4 關閉節點

1consul leave -http-addr=172.16.0.26:8500

2、停止agent服務,在第一個終端中,你可以使用ctrl-c來優雅的停止agent,如果你停止的是client,當你優雅的離開後,consul會通知叢集中的其他成員你這個節點以及處於left狀態。如果你是強制killedagent,叢集中的其他成員會認為你是failed了。當成員leaves後,該成員的serviceschecks會從catalog被移除,當成員fails後,該成員的健康狀態會被簡單的標記為critical,但是不會從catalog刪除。consul會自動的嘗試連結failed的節點,這樣允許節點在某些網路狀況中恢復,如果節點是left狀態,則不會再聯絡該節點。

注意:

之前版本中預設serverhttp埠是8400,consul1.0http8500

http://172.16.0.26:8500/v1/agent/service/consul-provider-client1/

1.3使用命令註冊服務

1. 建立資料夾/etc/consul.d

.d代表有許多配置檔案在裡面

2. 將服務配置檔案寫入資料夾內

$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}'  >/etc/consul.d/web.json

3. 重啟consul,並將配置檔案的路徑給consul

$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul   -config-dir /etc/consul.d

4. 查詢ip和埠

DNS方式:dig @127.0.0.1 -p 8600 web.service.consul SRV

Http方式:curl http://localhost:8500/v1/catalog/service/web

5. 更新

通過http api能對service配置檔案增刪改查,如果更新完成後,可以通過signup命令來生效

consul agent -server -bootstrap -bind=0.0.0.0 -client=172.16.0.27 -data-dir=data -ui -node=172.16.0.27 -config-dir /etc/consul.d

consul agent -server -bootstrap -bind=0.0.0.0 -client=172.16.0.27 -data-dir=data -ui -node=172.16.0.27 -config-dir /etc/consul.d

Issue:

如果在配置 Consul 的時候,出現了下面錯誤:

==> Error decoding '/etc/consul.d/hwapp_web.json': invalid character 'ï' looking for beginning of value

錯誤的原因是檔案編碼問題,需要將 Encoding 修改為ANSI編碼(可以用 TXT 修改)。

使用curl操作 K/V

consul還提供了鍵/值儲存的功能。

查詢 所有K/V

curl -v http://localhost:8500/v1/kv/?recurse

儲存鍵為web/key2, flags 42, 值為true的記錄。

curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key2?flags=42

true

刪除記錄:

curl -X DELETE http://localhost:8500/v1/kv/web/sub?recurse

更新值:

curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=97

true

更新index

curl "http://localhost:8500/v1/kv/web/key2?index=101&wait=5s"

結果:[{"CreateIndex":98,"ModifyIndex":101,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]