在上一篇中講解了Consul的安裝、部署、基本的使用,使得大家有一個基本的瞭解,本節開始重點Consul叢集搭建偏實戰,官方推薦3~5臺Server,因為在異常處理中,如果出現Leader掛了,只要有超過一半的Server還處於活躍狀態,consul就會重新選舉新的Leader,保證叢集可以正常工作。
推薦技術部落格: Node.js技術棧
準備工作
測試用建議本地搭建幾臺虛擬機器用於除錯,這裡的虛擬機器分別為3臺Server模式,1臺Client模式,共以下4臺:
-
192.168.6.128 Server模式(初始設定為Leader)
-
192.168.6.129 Server模式
-
192.168.6.130 Server模式
-
192.168.6.131 Client模式
下載相應平臺版本的Consul解壓copy至/usr/local/bin/
(系統的環境變數)目錄,這裡以1.4.0版本為例,具體安裝參照上篇-consul下載安裝指南。
建立 /usr/src/consul
目錄,存放Consul的啟動配置檔案consul_config.json
:
{
"datacenter": "consul_cluster",
"node_name": "consul_1",
"server": true,
"bootstrap_expect": 3,
"data_dir": "/usr/src/consul/data",
"log_level": "DEBUG",
"enable_syslog": true,
"enable_script_checks": true,
"bind_addr": "192.168.6.128",
"client_addr": "192.168.6.128",
}
複製程式碼
- node_name:節點名稱,等同於-node
- data_dir:資料存放目錄
- enable_syslog:consul日誌寫入系統的syslog目錄是否啟用
- enable_script_checks:是否啟用監控檢測指令碼
- bind_addr:等同於-bind
- client_addr:等同於-client
Server端部署
- 部署第一臺192.168.6.128
注意:在第一臺啟動的時候加上-ui,只初始化一次,在其它2個節點進行相同操作,但是配置檔案中的node_name
、bind_addr
、client_addr
要進行更改,每臺機器保持唯一。
$ sudo consul agent -ui -config-file=/usr/src/consul/consul_config.json
-config-file:
載入啟動的配置檔案
- 部署第二臺192.168.6.129
修改/usr/src/consul/consul_config.json
:
{
"datacenter": "consul_cluster",
"node_name": "consul_2",
"server": true,
"bootstrap_expect": 3,
"data_dir": "/usr/src/consul/data",
"log_level": "DEBUG",
"enable_syslog": true,
"enable_script_checks": true,
"bind_addr": "192.168.6.129",
"client_addr": "192.168.6.129",
}
複製程式碼
執行命令啟動命令
$ sudo consul agent -config-file=/usr/src/consul/consul_config.json
複製程式碼
- 部署第三臺192.168.6.130
修改/usr/src/consul/consul_config.json
:
{
"datacenter": "consul_cluster",
"node_name": "consul_3",
"server": true,
"bootstrap_expect": 3,
"data_dir": "/usr/src/consul/data",
"log_level": "DEBUG",
"enable_syslog": true,
"enable_script_checks": true,
"bind_addr": "192.168.6.130",
"client_addr": "192.168.6.130"
}
複製程式碼
執行命令啟動命令
$ sudo consul agent -config-file=/usr/src/consul/consul_config.json
複製程式碼
截止目前服務端已經全部啟動,但是還沒有加入叢集,因此還只是單節點的叢集,可以在某臺機器上檢視成員情況:
注意:直接使用consul members
會報錯,需要繫結ip地址
$ consul members --http-addr 192.168.6.128:8500
Node Address Status Type Build Protocol DC Segment
consul_1 192.168.6.128:8301 alive server 1.4.0 2 consul_cluster <all>
複製程式碼
Server端叢集建立
每個Consul Agent之後,都是相對獨立的並不知道其它節點的存在,現在我們要做的是加入叢集,將上面建立的consul_2、consul_3加入到同一個叢集consul_1中。
- 第二臺192.168.6.129加入到consul_1中
$ consul join --http-addr 192.168.6.129:8500 192.168.6.128
Successfully joined cluster by contacting 1 nodes. # 成功返回的訊息
複製程式碼
- 第三臺192.168.6.130加入到consul_1中
$ consul join --http-addr 192.168.6.130:8500 192.168.6.128
複製程式碼
目前服務端的叢集已經建立完畢,可以看下我們目前的叢集成員情況:
consul members --http-addr 192.168.6.128:8500
Node Address Status Type Build Protocol DC Segment
consul_1 192.168.6.128:8301 alive server 1.4.0 2 consul_cluster <all>
consul_2 192.168.6.129:8301 alive server 1.4.0 2 consul_cluster <all>
consul_3 192.168.6.130:8301 alive server 1.4.0 2 consul_cluster <all>
複製程式碼
- 通過HTTP API的方式檢視叢集leader
$ curl 192.168.6.128:8500/v1/status/leader
"192.168.6.128:8300"
複製程式碼
- 通過HTTP API的方式檢視叢集成員
$ curl 192.168.6.128:8500/v1/status/peers
["192.168.6.129:8300","192.168.6.130:8300","192.168.6.128:8300"]
複製程式碼
Client端部署
現在開始客戶端的部署,方式同服務端有不同
修改/usr/src/consul/consul_config.json
:
{
"datacenter": "consul_cluster",
"node_name": "consul_4",
//"server": true, 不指定為服務端,預設走客戶端
// "bootstrap_expect": 3, 只在server模式有效
"data_dir": "/usr/src/consul/data",
"log_level": "DEBUG",
"enable_syslog": true,
"enable_script_checks": true,
"bind_addr": "192.168.6.131",
"client_addr": "192.168.6.131"
}
複製程式碼
執行啟動命令:
通過-join引數也可以加入一個已經啟動的叢集
$ sudo consul agent -config-file=/usr/src/consul/consul_config.json -join=192.168.6.128
複製程式碼
在檢視當前叢集成員,可以看到為3個Server模式和1個Client模式
$ consul members --http-addr 192.168.6.128:8500
Node Address Status Type Build Protocol DC Segment
consul_1 192.168.6.128:8301 alive server 1.4.0 2 consul_cluster <all>
consul_2 192.168.6.129:8301 alive server 1.4.0 2 consul_cluster <all>
consul_3 192.168.6.130:8301 alive server 1.4.0 2 consul_cluster <all>
consul_4 192.168.6.131:8301 alive client 1.4.0 2 consul_cluster <default>
複製程式碼
管理工具中檢視
在部署第一臺192.168.6.128機器的時候,consul agent之後有跟一個-ui引數,這個是用於啟動WebUI介面,這個是Consul本身所提供的Web視覺化介面,瀏覽器輸入http://192.168.6.128:8500進行訪問
本篇為微服務架構中基於Consul實現的服務註冊系列文章,目錄如下:
作者:五月君
連結:www.imooc.com/article/284…
來源:慕課網
Github: Node.js技術棧