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
-bootstrap-expect:在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個叢集,該標記不能和bootstrap公用
-bind:該地址用來在叢集內部的通訊,叢集內的所有節點到地址都必須是可達的,預設是0.0.0.0
-client:consul繫結在哪個client地址上,這個地址提供HTTP、DNS、RPC等服務,預設是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:加入一個已經啟動的agent的ip地址,可以多次指定多個agent的地址。如果consul不能加入任何指定的地址中,則
-retry-join:和join類似,但是允許你在第一次失敗後進行嘗試。
-retry-interval:兩次join之間的時間間隔,預設是30s
-retry-max:嘗試重複join的次數,預設是0,也就是無限次嘗試
-log-level:consul agent啟動後顯示的日誌資訊級別。預設是info,可選:trace、debug、info、warn、err。
-node:節點在叢集中的名稱,在一個叢集中必須是唯一的,預設是該節點的主機名
-protocol:consul使用的協議版本
-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方案中,每個提供服務的節點上都要部署和執行consul的agent,所有執行consul agent節點的集合構成consul cluster。
consul agent有兩種執行模式:server和client。這裡的server和client只是consul叢集層面的區分,與搭建在cluster之上的應用服務無關。
以server模式執行的consul agent節點用於維護consul叢集的狀態,官方建議每個consul cluster至少有3個或以上的執行在server mode的agent,client節點不限。
1.2 consul_1.0.0_linux_amd64安裝
我們這裡以安裝三個節點為例,環境配置如下:
172.16.0.27 以server模式執行
172.16.0.26,192.168.1.72以client模式執行
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系統的防火牆沒關,可能會報下面的錯,需要將server跟client的防火牆都關閉:
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 關閉節點
1、consul leave -http-addr=172.16.0.26:8500
2、停止agent服務,在第一個終端中,你可以使用ctrl-c來優雅的停止agent,如果你停止的是client,當你優雅的離開後,consul會通知叢集中的其他成員你這個節點以及處於left狀態。如果你是強制killed掉agent,叢集中的其他成員會認為你是failed了。當成員leaves後,該成員的services和checks會從catalog被移除,當成員fails後,該成員的健康狀態會被簡單的標記為critical,但是不會從catalog刪除。consul會自動的嘗試連結failed的節點,這樣允許節點在某些網路狀況中恢復,如果節點是left狀態,則不會再聯絡該節點。
注意:
之前版本中預設server的http埠是8400,次consul1.0的http是8500
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=="}]