安裝Consul叢集

jerrysun發表於2021-09-09

TIPS

  • 本文基於Consul 1.5.3,理論適用於Consul 1.6及更低版本。
  • 安裝單機版Consul詳見:

知識預熱

Consul常用命令

命令 解釋 示例
agent 執行一個consul agent consul agent -dev
join 將agent加入到consul叢集 consul join IP
members 列出consul cluster叢集中的members consul members
leave 將節點移除所在叢集 consul leave

參考文件

這裡只列出幾個常用的命令,consul有將近20個命令,本文不作展開,詳見:

consul agent 命令詳解

常用選項

consul agent 命令的常用選項如下:

  • -data-dir
    • 作用:指定agent儲存狀態的資料目錄
    • 這是所有agent都必須的
    • 對於server尤其重要,因為他們必須持久化叢集的狀態
  • -config-dir
    • 作用:指定service的配置檔案和檢查定義所在的位置
    • 通常會指定為”某一個路徑/consul.d”(通常情況下,.d表示一系列配置檔案存放的目錄)
  • -config-file
    • 作用:指定一個要裝載的配置檔案
    • 該選項可以配置多次,進而配置多個配置檔案(後邊的會合並前邊的,相同的值覆蓋)
  • -dev
    • 作用:建立一個開發環境下的server節點
    • 該引數配置下,不會有任何持久化操作,即不會有任何資料寫入到磁碟
    • 這種模式不能用於生產環境(因為第二條)
  • -bootstrap-expect
    • 作用:該命令通知consul server我們現在準備加入的server節點個數,該引數是為了延遲日誌複製的啟動直到我們指定數量的server節點成功的加入後啟動。
  • -node
    • 作用:指定節點在叢集中的名稱
    • 該名稱在叢集中必須是唯一的(預設採用機器的host)
    • 推薦:直接採用機器的IP
  • -bind
    • 作用:指明節點的IP地址
    • 有時候不指定繫結IP,會報Failed to get advertise address: Multiple private IPs found. Please configure one.的異常
  • -server
    • 作用:指定節點為server
    • 每個資料中心(DC)的server數推薦至少為1,至多為5
    • 所有的server都採用raft一致性演算法來確保事務的一致性和線性化,事務修改了叢集的狀態,且叢集的狀態儲存在每一臺server上保證可用性
    • server也是與其他DC互動的門面(gateway)
  • -client
    • 作用:指定節點為client,指定客戶端介面的繫結地址,包括:HTTP、DNS、RPC
    • 預設是127.0.0.1,只允許迴環介面訪問
    • 若不指定為-server,其實就是-client
  • -join
    • 作用:將節點加入到叢集
  • -datacenter(老版本叫-dc,-dc已經失效)
    • 作用:指定機器加入到哪一個資料中心中

示例1:命令引數方式執行

consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145

示例2:配置檔案方式執行

準備一個配置檔案,名稱任意,例如consul.json,內容如下:

{
    "datacenter": "us-east-1",
    "data_dir": "/Users/zhouli/develop/software/consul-data/",
    "addresses": {
        "https": "0.0.0.0"
    },
    "ports": {
        "http": 8500
    },
    "acl" : {
        "enabled": true,
        "default_policy": "deny",
        "down_policy": "extend-cache",
        "tokens" : {
          "master" : "b1gs33cr3t"
        }
      }
}

啟動時,讓consul讀取配置檔案:

consul agent -dev -config-file="consul-config/consul.json"

參考文件

consul agent 有20來個選項,本文只列出了常用選項,其他選項未作展開,詳見:

Consul叢集搭建

圖片描述

主機規劃

準備三臺CentOS 7的虛擬機器,主機規劃如下:

主機名稱 IP 作用 是否允許遠端訪問
node0 192.168.11.143 consul server
node1 192.168.11.144 consul client
node2 192.168.11.145 consul client

搭建步驟

  • 啟動node0機器上的Consul(node0機器上執行):
consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.11.143 -datacenter=dc1 -ui -client=192.168.11.143 -server -bootstrap-expect 1
  • 啟動node1機器上的Consul(node1機器上執行):
consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.11.144 -datacenter=dc1 -ui
  • 啟動node2機器上的Consul(node2機器上執行):
consul agent -data-dir /tmp/node2 -node=node2 -bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145
  • 將node1節點加入到node0上(node1機器上執行):
consul join 192.168.11.143
  • 將node2節點加入到node0上(node2機器上執行):
consul join -rpc-addr=192.168.11.145:8400  192.168.11.143
  • 這樣一個簡單的Consul叢集就搭建完成了,在node1上檢視當前叢集節點:
consul members -rpc-addr=192.168.11.143:8400

結果如下:

Node   Address              Status  Type    Build  Protocol  DC
node0  192.168.11.143:8301  alive   server  0.7.0  2         dc1
node1  192.168.11.144:8301  alive   client  0.7.0  2         dc1
node2  192.168.11.145:8301  alive   client  0.7.0  2         dc1

說明叢集已經搭建成功了。

我們分析一下,為什麼第5步和第6步需要加-rpc-addr 選項,而第4步不需要加任何選項呢?原因是-client 指定了客戶端介面的繫結地址,包括:HTTP、DNS、RPC,而consul joinconsul members 都是透過RPC與Consul互動的。

訪問測試

如上,我們三個節點都加了-ui 引數啟動了內建的介面。我們可以透過:http://192.168.11.143:8500/ui/ 或者 http://192.168.11.145:8500/ui/ 進行訪問,也可以在node1機器上透過 進行訪問,原因是node1沒有開啟遠端訪問 ,三種訪問方式結果一致。

必看文章

本文首發

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/151/viewspace-2824544/,如需轉載,請註明出處,否則將追究法律責任。

相關文章