微服務Consul系列之叢集搭建

五月君發表於2019-04-07

在上一篇中講解了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_namebind_addrclient_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技術棧

相關文章