1. 程式人生 > 其它 >consul簡介 附1 consul常用命令+常用選項

consul簡介 附1 consul常用命令+常用選項


Consul是HashiCorp公司推出的開源工具,用於實現分散式系統的服務發現與配置。 Consul是分散式的、高可用的、可橫向擴充套件的。它具備以下特性 :

服務發現:consul通過DNS或者HTTP介面使服務註冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣註冊。
健康檢查:健康檢測使consul可以快速的告警在叢集中的操作。和服務發現的整合,可以防止服務轉發到故障的服務上面。
鍵/值儲存:一個用來儲存動態配置的系統。提供簡單的HTTP介面,可以在任何地方操作。
多資料中心:無需複雜的配置,即可支援任意數量的區域。

Consul 的優勢

使用 Raft 演算法來保證一致性, 比複雜的 Paxos 演算法更直接. 相比較而言, zookeeper 採用的是 Paxos, 而 etcd 使用的則是 Raft. 
支援多資料中心,內外網的服務採用不同的埠進行監聽。 多資料中心叢集可以避免單資料中心的單點故障,而其部署則需要考慮網路延遲, 分片等情況等. zookeeper 和 etcd 均不提供多資料中心功能的支援. 
支援健康檢查. etcd 不提供此功能. 
支援 http 和 dns 協議介面. zookeeper 的整合較為複雜, etcd 只支援 http 協議. 
官方提供web管理介面, etcd 無此功能.


安裝
# 這裡以 Linux系統為例:
$ wget https://releases.hashicorp.com/consul/1.4.2/consul_1.4.2_linux_amd64.zip

$ unzip consul_1.4.2_linux_amd64.zip
$ mv consul /usr/local/bin/

Consul 的角色
client: 客戶端, 無狀態, 將 HTTP 和 DNS 介面請求轉發給區域網內的服務端叢集.

server: 服務端, 儲存配置資訊, 高可用叢集, 在區域網內與本地客戶端通訊, 通過廣域網與其他資料中心通訊. 每個資料中心的 server 數量推薦為 3 個或是 5 個.

執行 Consul代理
完成Consul的安裝後,必須執行agent. agent可以執行為server或client模式.每個資料中心至少必須擁有一臺server . 建議在一個叢集中有3或者5個server.部署單一的server,在出現失敗時會不可避免的造成資料丟失.

其他的agent執行為client模式.一個client是一個非常輕量級的程序.用於註冊服務,執行健康檢查和轉發對server的查詢.agent必須在叢集中的每個主機上執行.

啟動 Consul Server
#node1:
$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=192.168.110.155 -ui -config-dir /etc/consul.d -rejoin -join 192.168.110.155 -client 0.0.0.0
#執行cosnul agent以server模式
-server : 定義agent執行在server模式
-bootstrap-expect :在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個叢集,該標記不能和bootstrap共用
-data-dir:提供一個目錄用來存放agent的狀態,所有的agent允許都需要該目錄,該目錄必須是穩定的,系統重啟後都繼續存在
-node:節點在叢集中的名稱,在一個叢集中必須是唯一的,預設是該節點的主機名
-bind:該地址用來在叢集內部的通訊,叢集內的所有節點到地址都必須是可達的,預設是0.0.0.0
-ui: 啟動web介面
-config-dir::配置檔案目錄,裡面所有以.json結尾的檔案都會被載入
-rejoin:使consul忽略先前的離開,在再次啟動後仍舊嘗試加入叢集中。
-client:consul服務偵聽地址,這個地址提供HTTP、DNS、RPC等服務,預設是127.0.0.1所以不對外提供服務,如果你要對外提供服務改成0.0.0.0

#node2:
$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=192.168.110.169 -ui -rejoin -join 192.168.110.155

-server : 定義agent執行在server模式
-bootstrap-expect :在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個叢集,該標記不能和bootstrap共用
-bind:該地址用來在叢集內部的通訊,叢集內的所有節點到地址都必須是可達的,預設是0.0.0.0
-node:節點在叢集中的名稱,在一個叢集中必須是唯一的,預設是該節點的主機名
-ui: 啟動web介面
-rejoin:使consul忽略先前的離開,在再次啟動後仍舊嘗試加入叢集中。
-config-dir::配置檔案目錄,裡面所有以.json結尾的檔案都會被載入
-client:consul服務偵聽地址,這個地址提供HTTP、DNS、RPC等服務,預設是127.0.0.1所以不對外提供服務,如果你要對外提供服務改成0.0.0.0
-join 192.168.110.121 : 啟動時加入這個叢集

/tmp/consul與**/etc/consul.d**需要自己建立

啟動 Consul Client
#node3:
$ consul agent -data-dir /tmp/consul -node=n3 -bind=192.168.110.157 -config-dir /etc/consul.d -rejoin -join 192.168.110.155

執行cosnul agent以client模式,-join 加入到已有的叢集中去。

檢視叢集成員
consul members
停止Agent
Ctrl-C

consul leave

註冊服務
為Consul配置建立一個目錄.Consul會載入配置資料夾裡的所有配置檔案.在Unix系統中通常類似 /etc/consul.d (.d 字尾意思是這個路徑包含了一組配置檔案).

mkdir /etc/consul.d
1
編寫服務定義配置檔案,假設我們有一個名叫web的服務執行在 10000埠.另外,我們將給他設定一個標籤.這樣我們可以使用他作為額外的查詢方式:

{
"service": { #服務
"name": "web", #名稱
"tags": ["master"], #標記
"address": "127.0.0.1", #ip
"port": 10000, #埠
"checks": [
{
"http": "http://localhost:10000/health",
"interval": "10s" #檢查時間
}
]
}
}

測試程式
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Println("hello Web3! This is n3或者n2")
fmt.Fprintf(w, "Hello Web3! This is n3或者n2")
}
func healthHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("health check! n3或者n2")
}
func main() {
http.HandleFunc("/", handler)
http.HandleFunc("/health", healthHandler)
http.ListenAndServe(":10000", nil)
}

Consul架構

​ CLIENT表示consul的client模式,就是客戶端模式。是consul節點的一種模式,這種模式下,所有註冊到當前節點的服務會被轉發到SERVER【通過HTTP和DNS介面請求server】,本身是不持久化這些資訊。
​ SERVER表示consul的server模式,表明這個consul是個server,這種模式下,功能和CLIENT都一樣,唯一不同的是,它會把所有的資訊持久化的本地,這樣遇到故障,資訊是可以被保留的
​ SERVER-LEADER:中間那個SERVER下面有LEADER的字眼,表明這個SERVER是它們的老大,它和其它SERVER不一樣的一點是,它需要負責同步註冊的資訊給其它的SERVER,同時也要負責各個節點的健康監測。
————————————————

1、consul的作用

  • 服務發現
    • Consul clients提供服務(例如API)
    • 其他的client發現服務的提供者(通過DNS或http,應用可以輕鬆的發現他們所依賴的服務)
  • 健康檢查
  • Key-Value儲存操作
    • 動態配置
    • leader選舉
    • feature flagging
    • coordination
  • 多資料中心(DC)
    • 用於容災

2、基本架構

  • 一個consul節點對應一個consul agent
    • agent會負責節點的健康檢查和節點上的服務的健康檢查
  • agent分為server和client
    • server
      • 儲存資料
      • 複製資料
      • servers們自己選擇一個leader
      • 每個資料中心推薦有3或5個server(當然1個也沒問題,但是若宕機,很煩,兩臺等於1臺,因為如果兩臺宕了一臺,之後仍舊無法選出leader)
    • client

安裝環境:

  • mac:64bit(檢視mac位數:開啟終端-->"uname -a")
  • consul_0.6.4_darwin_amd64.zip和consul_0.6.4_web_ui.zip,從consul官網https://www.consul.io/downloads.html進行下載就好(選擇好OS和位數)

一、安裝

1、解壓consul_0.6.4_darwin_amd64.zip

2、將解壓後的二進位制檔案consul(上邊畫紅框的部分拷貝到/usr/local/bin下)

說明:使用sudo是因為許可權問題。

3、檢視是否安裝成功

直接在家目錄下執行consul命令即可。

出現如下結果,表示安裝成功。

二、啟動

1、執行命令

檢視顯示結果:

說明:

  • -dev(該節點的啟動不能用於生產環境,因為該模式下不會持久化任何狀態),該啟動模式僅僅是為了快速便捷的啟動單節點consul
  • 該節點處於server模式
  • 該節點是leader
  • 該節點是一個健康節點

2、檢視consul cluster中的每一個consul節點的資訊

說明:

  • Address:節點地址
  • Status:alive表示節點健康
  • Type:server執行狀態是server狀態
  • DC:dc1表示該節點屬於DataCenter1

注意:

  • members命令的輸出是基於gossip協議的,並且是最終一致的(也就是說,某一個時刻你去運用該命令查到的consul節點的狀態資訊可能是有誤的)

三、停止服務(優雅退出)

命令:CTRL+C

說明:

  • 該節點離開後,會通知cluster中的其他節點

第三章 consul服務註冊與服務查詢

1、定義一個服務

https://www.consul.io/docs/agent/services.html

該方法是服務註冊中提供服務的最常用的方法。

關於服務的定義:服務的屬性我們會在後邊每出現一個總結一個,最後再做總結。

2、服務註冊

2.1、建立服務檔案所存放的資料夾

說明:

  • .d做字尾:表示一系列配置檔案的存放目錄(directory)

2.2、建立服務並寫入上述資料夾中的一個檔案

說明:

  • 一個服務我們會配置為json格式:比如上述的單引號之間的形式
  • 一個服務會寫在一個json檔案中

注意:

  • 如果上述資料夾沒有許可權進行操作,先改變資料夾許可權,

3、服務查詢

先啟動consul程序。

切換螢幕-->

說明:

  • 根據-config-dir指定根據服務註冊的目錄中的檔案來啟動服務。

兩種查詢方式:DNS和HTTP

3.1、DNS:

訪問的服務名字:

  • tag.servicename.service.consul  tag和servicename都是建立服務的時候配置的
  • DNS訪問的埠是8600

3.2、HTTP:

說明:

  • 訪問的路徑:host:port/版本號/catalog/service/服務名
  • Address:用於指定一個特定service的IP地址,預設情況下,使用的是該service使用的agent。

4、多個服務註冊的情況

4.1、每一個服務註冊到一個檔案

假設現在又建立了一個secondservice服務,我會將該服務寫入secondservice.json檔案中去,如下:

使用http去訪問:

說明:按照服務名去訪問。

4.2、多個服務寫在同一個json檔案中

說明:

  • 放在services中而不是service裡(上邊的單檔案單服務是放在service裡的)
  • 多個服務放在一個數組裡邊

使用http去訪問:

說明:按照服務名去訪問。

注意:在實際開發中,微服務數量眾多,

如果每個檔案都放在一個檔案裡,檔案會非常多,不好!

如果所有微服務都放在一個檔案裡,檔案太大,也不好!

所以,需要二者結合。例如,假設有100個微服務,放在10個json檔案中去,每個json檔案存放10個服務。

第四章 consul cluster

1、vagrant

為了模擬叢集效果,使用vagrant。

1.1、首先下載vagrant

https://www.vagrantup.com/downloads.html

說明:瀏覽器下載可能比較慢,可以通過迅雷下載。

1.2、下載之後,安裝vagrant

mac中下一步到底就可以。

說明:雖然vagrant需要依賴於virtualbox,需要事先安裝。

1.3、開啟終端,啟動vagrant

1.3.1、初始化:

說明:以上是安裝64bit的Linux系統(Ubuntu),32bit的將數字改為32即可。

參考:https://liuzhichao.com/p/1940.html

1.3.2、修改Vagrantfile檔案

說明:ruby寫的,內容改為如下:

1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 $script = <<SCRIPT
 4 echo Installing dependencies...
 5 sudo apt-get update
 6 sudo apt-get install -y unzip curl
 7 echo Fetching Consul...
 8 cd /tmp/
 9 wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
10 echo Installing Consul...
11 unzip consul.zip
12 sudo chmod +x consul
13 sudo mv consul /usr/bin/consul
14 sudo mkdir /etc/consul.d
15 sudo chmod a+w /etc/consul.d
16 SCRIPT
17 
18 # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
19 VAGRANTFILE_API_VERSION = "2"
20 
21 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
22   config.vm.box = "debian/wheezy64"
23 
24   config.vm.provision "shell", inline: $script
25 
26   config.vm.define "n1" do |n1|
27       n1.vm.hostname = "n1"
28       n1.vm.network "private_network", ip: "172.20.20.10"
29   end
30 
31   config.vm.define "n2" do |n2|
32       n2.vm.hostname = "n2"
33       n2.vm.network "private_network", ip: "172.20.20.11"
34   end
35 end

 1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 $script = <<SCRIPT
 4 echo Installing dependencies...
 5 sudo apt-get update
 6 sudo apt-get install -y unzip curl
 7 echo Fetching Consul...
 8 cd /tmp/
 9 wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
10 echo Installing Consul...
11 unzip consul.zip
12 sudo chmod +x consul
13 sudo mv consul /usr/bin/consul
14 sudo mkdir /etc/consul.d
15 sudo chmod a+w /etc/consul.d
16 SCRIPT
17 
18 # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
19 VAGRANTFILE_API_VERSION = "2"
20 
21 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
22   config.vm.box = "debian/wheezy64"
23 
24   config.vm.provision "shell", inline: $script
25 
26   config.vm.define "n1" do |n1|
27       n1.vm.hostname = "n1"
28       n1.vm.network "private_network", ip: "172.20.20.10"
29   end
30 
31   config.vm.define "n2" do |n2|
32       n2.vm.hostname = "n2"
33       n2.vm.network "private_network", ip: "172.20.20.11"
34   end
35 end

該檔案內容是consul官方推薦的demo。這一塊兒內容可以根據實際情況去修改。(我將節點的IP自己指定了一下,儘量不要與自己本機的IP一樣,否則可能會影響一些功能),以下是我的配置。

1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 $script = <<SCRIPT
 4 echo Installing dependencies...
 5 sudo apt-get update
 6 sudo apt-get install -y unzip curl
 7 echo Fetching Consul...
 8 cd /tmp/
 9 wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
10 echo Installing Consul...
11 unzip consul.zip
12 sudo chmod +x consul
13 sudo mv consul /usr/bin/consul
14 sudo mkdir /etc/consul.d
15 sudo chmod a+w /etc/consul.d
16 SCRIPT
17 
18 # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
19 VAGRANTFILE_API_VERSION = "2"
20 
21 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
22   config.vm.box = "debian/wheezy64"
23 
24   config.vm.provision "shell", inline: $script
25 
26   config.vm.define "n110" do |n1|
27       n1.vm.hostname = "n110"
28       n1.vm.network "private_network", ip: "192.168.21.110"
29   end
30 
31   config.vm.define "n111" do |n2|
32       n2.vm.hostname = "n111"
33       n2.vm.network "private_network", ip: "192.168.21.111"
34   end
35 end

 1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 $script = <<SCRIPT
 4 echo Installing dependencies...
 5 sudo apt-get update
 6 sudo apt-get install -y unzip curl
 7 echo Fetching Consul...
 8 cd /tmp/
 9 wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
10 echo Installing Consul...
11 unzip consul.zip
12 sudo chmod +x consul
13 sudo mv consul /usr/bin/consul
14 sudo mkdir /etc/consul.d
15 sudo chmod a+w /etc/consul.d
16 SCRIPT
17 
18 # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
19 VAGRANTFILE_API_VERSION = "2"
20 
21 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
22   config.vm.box = "debian/wheezy64"
23 
24   config.vm.provision "shell", inline: $script
25 
26   config.vm.define "n110" do |n1|
27       n1.vm.hostname = "n110"
28       n1.vm.network "private_network", ip: "192.168.21.110"
29   end
30 
31   config.vm.define "n111" do |n2|
32       n2.vm.hostname = "n111"
33       n2.vm.network "private_network", ip: "192.168.21.111"
34   end
35 end

只是修改了節點位置,其實上邊的script根本沒讓他去執行,可以去掉。

1.3.3、啟動

說明:當看到日誌輸出到

就可以"ctrl+c"退出了(可能有時候需要"ctrl+c"兩次),否則會將本機~/下的內容同步到n110這個節點,可能n110這個節點的空間會不夠,導致後期工作無法進行。

這時候一個節點啟動起來了,但是第二個沒起來,需要再執行上邊的操作一次。

最後,第三次執行啟動命令。

這樣就好了。

之後針對n110和n111兩個節點分別安裝軟體。

2、安裝軟體

進入/tmp/,下載consul軟體。

之後解壓(前提是"unzip"命令已安裝,如果沒安裝,執行)

解壓之後出現一個二進位制檔案"consul",如下:

之後將這個二進位制檔案移動或拷貝到/usr/bin下

說明:以上步驟分別針對針對n110和n111兩個節點執行一次。

3、n110以server模式啟動服務

關於啟動命令和啟動引數檢視 附1 consul常用命令+常用選項

4、n111以client模式啟動服務

5、join

分別啟動以上兩個服務後,發現其實n110和n111兩個彼此誰都不知道誰(可以通過切換屏幕後,使用來驗證),此時必須其中一個節點join到另一個節點,這時候才能彼此組成叢集。

說明:以上命令將n110節點加入到n111所在的叢集(反過來去join也是沒問題的),之後通過來看n110和n111時,彼此都是一個叢集的兩個member了。

注意:假設一個叢集有2個節點(n1,n2),這時候有一個節點n3想加入叢集,不需要join兩遍,只需要join n1或n2就好。這樣的話,叢集之間通過gossip協議彼此溝通,n3就加入叢集了。

6、建立服務並訪問

這個是我後來寫的,所以節點名字變了。

分別在兩個節點上邊建立一個服務,建立過程參照:第三章 consul服務註冊與服務查詢

服務訪問:

採用DNS訪問:

在client-111和server-110下均可以操作,命令如下:

命令:dig @127.0.0.1 -p 8600 server-110.node.zjgdc1.consul

格式:dig @127.0.0.1 -p 8600 節點名稱.node.資料中心名稱.consul

7、節點離開叢集

"ctrl+c"

第五章 consul key/value

1、key/value作用

  • 動態修改配置檔案
  • 支援服務協同
  • 建立leader選舉
  • 提供服務發現
  • 整合健康檢查

2、使用

2.1、檢視全部key/value

說明:

  • 使用?recurse引數來指定檢視多個KV
  • 沒有值--404

2.2、新增key/value

說明:key--zjg/key1  value--'test'

說明:flags--用於為任意一個KV新增一個有意義的metadata。

注意:上邊的這個就是有問題的,一定要注意是flags而非flag。

2.3、檢視單個key/value

說明:value是test的base64編碼(使用base64編碼是為了允許非UTF-8的字元)

2.4、修改key/value

說明:修改與增加的命令完全一樣,只需要將修改部分的內容修改掉即可。

CAS修改:(原子性的執行修改)

cas的值如果與ModifyIndex相等,則修改成功,若不相等,則修改失敗。

2.5、刪除key/value

2.5.1、刪除單一KV

2.5.2、刪除一定範圍的KV(指定字首範圍內的KV)

說明:

  • 指定刪除的KV的K的字首(zjg)

第六章 consul UI

1、建立三個consul節點(一個server+兩個client)

具體的過程見http://www.cnblogs.com/java-zhao/p/5375132.html

1)在終端下啟動vagrant

vagrant up(Vagrantfile還是建立兩個節點,如下)

 View Code

2)進入n110節點並啟動為server模式

2.1)進入n110節點:vagrant ssh n110

2.2)啟動consul:

說明:

  • -dc:指明資料中心的名字
  • -ui:啟動UI(為了方便後續的UI訪問)

3)進入n111節點並啟動為client模式

3.1)進入n111節點:vagrant ssh n111

3.2)啟動consul:

3.3)加入叢集:

4)將本機節點啟動為client模式並開啟UI

4.1)啟動consul:

說明:本機啟動UI

4.2)加入叢集:

啟動完成後,最好檢視一下每一個節點的consul叢集成員。

2、在本機瀏覽器訪問UI

訪問遠端服務端點的UI

說明:在新版本的consul中訪問遠端服務端點的UI是有問題的,可能需要配置什麼。老版本沒問題。

解決方法:

  • consul agent -server -bootstrap-expect=1  -data-dir=/tmp/consul -node=server-110 -bind=192.168.21.110 -dc=zjgdc1 -client 0.0.0.0 -ui

說明:-client 0 0 0 0 -ui-->使得客戶端可以直接通過url訪問服務端的consul ui

訪問本機的UI

http://localhost:8500/ui/

  • services節點:放置服務
  • nodes節點:放置consul節點
  • key/value節點:放置一些配置資訊
  • zjgdc節點:配置資料中心

開啟nodes節點,如下:

 

第七章 consul docker叢集

--net=host:執行consul的docker映象必須帶有的引數,因為consul的consensus和gossip協議對於網路的延遲和丟包很敏感,所以引入額外的其他網路型別的層是不可取並且不必要的。

/consul/data:資料儲存目錄

/consul/config:配置檔案所在目錄,配置也可以通過環境變數名為CONSUL_LOCAL_CONFIG(其值為json串)來指定

一、下載docker映象

  • docker pull consul:0.7.1
  • docker tag xxx 10.211.55.4:5000/consul:0.7.1
  • docker push 10.211.55.4:5000/consul:0.7.1

二、10.211.55.6

  • docker pull 10.211.55.4:5000/consul:0.7.1
  • docker run -d --net=host 10.211.55.4:5000/consul:0.7.1 agent -server -bind=10.211.55.6 -node=server1 -bootstrap-expect 1 -client 0.0.0.0 -ui
    • --net=host:使用宿主機網路,這是執行consul的docker映象必須帶有的引數,因為consul的consensus和gossip協議對於網路的延遲和丟包很敏感,所以引入額外的其他網路型別的層是不可取並且不必要的。這樣之後,外界可以通過宿主機ip來訪問該consul server。
  • consul ps獲取containerID後,consul logs containerId來檢視日誌

三、10.211.55.7

  • docker pull 10.211.55.4:5000/consul:0.7.1
  • docker run -d --net=host 10.211.55.4:5000/consul:0.7.1 agent -bind=10.211.55.7 -node=client1 -retry-join=10.211.55.6
  • docker exec -t containerID consul members
    • 進入內部檢視consul

四、在本機瀏覽器輸入10.211.55.6:8500/ui,檢視consulUI

附1 consul常用命令+常用選項

之後每用到一個command或options,都會記錄在這裡。

常用命令command

  • agent
    • 作用:執行一個consul agent
  • join
    • 作用:將agent加入到consul cluster
  • members
    • 作用:列出consul cluster叢集中的members

常用選項option

  • -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地址
  • -server
    • 作用:指定節點為server
    • 每個資料中心(DC)的server數推薦為3或5(理想的是,最多不要超過5)
    • 所有的server都採用raft一致性演算法來確保事務的一致性和線性化,事務修改了叢集的狀態,且叢集的狀態儲存在每一臺server上保證可用性
    • server也是與其他DC互動的門面(gateway)
  • -client
    • 作用:指定節點為client
    • 若不指定為-server,其實就是-client
  • -join
    • 作用:將節點加入到叢集
  • -domain
  • -dc
    • 作用:指定機器加入到哪一個dc中
    • 例子:

1、建立三個consul節點(一個server+兩個client)

具體的過程見http://www.cnblogs.com/java-zhao/p/5375132.html

1)在終端下啟動vagrant

vagrant up(Vagrantfile還是建立兩個節點,如下)

 View Code

2)進入n110節點並啟動為server模式

2.1)進入n110節點:vagrant ssh n110

2.2)啟動consul:

說明:

  • -dc:指明資料中心的名字
  • -ui:啟動UI(為了方便後續的UI訪問)

3)進入n111節點並啟動為client模式

3.1)進入n111節點:vagrant ssh n111

3.2)啟動consul:

3.3)加入叢集:

4)將本機節點啟動為client模式並開啟UI

4.1)啟動consul:

說明:本機啟動UI

4.2)加入叢集:

啟動完成後,最好檢視一下每一個節點的consul叢集成員。

2、在本機瀏覽器訪問UI

訪問遠端服務端點的UI

說明:在新版本的consul中訪問遠端服務端點的UI是有問題的,可能需要配置什麼。老版本沒問題。

解決方法:

  • consul agent -server -bootstrap-expect=1  -data-dir=/tmp/consul -node=server-110 -bind=192.168.21.110 -dc=zjgdc1 -client 0.0.0.0 -ui

說明:-client 0 0 0 0 -ui-->使得客戶端可以直接通過url訪問服務端的consul ui

訪問本機的UI

http://localhost:8500/ui/

  • services節點:放置服務
  • nodes節點:放置consul節點
  • key/value節點:放置一些配置資訊
  • zjgdc節點:配置資料中心

開啟nodes節點,如下:

 

第七章 consul docker叢集

--net=host:執行consul的docker映象必須帶有的引數,因為consul的consensus和gossip協議對於網路的延遲和丟包很敏感,所以引入額外的其他網路型別的層是不可取並且不必要的。

/consul/data:資料儲存目錄

/consul/config:配置檔案所在目錄,配置也可以通過環境變數名為CONSUL_LOCAL_CONFIG(其值為json串)來指定

一、下載docker映象

  • docker pull consul:0.7.1
  • docker tag xxx 10.211.55.4:5000/consul:0.7.1
  • docker push 10.211.55.4:5000/consul:0.7.1

二、10.211.55.6

  • docker pull 10.211.55.4:5000/consul:0.7.1
  • docker run -d --net=host 10.211.55.4:5000/consul:0.7.1 agent -server -bind=10.211.55.6 -node=server1 -bootstrap-expect 1 -client 0.0.0.0 -ui
    • --net=host:使用宿主機網路,這是執行consul的docker映象必須帶有的引數,因為consul的consensus和gossip協議對於網路的延遲和丟包很敏感,所以引入額外的其他網路型別的層是不可取並且不必要的。這樣之後,外界可以通過宿主機ip來訪問該consul server。
  • consul ps獲取containerID後,consul logs containerId來檢視日誌

三、10.211.55.7

  • docker pull 10.211.55.4:5000/consul:0.7.1
  • docker run -d --net=host 10.211.55.4:5000/consul:0.7.1 agent -bind=10.211.55.7 -node=client1 -retry-join=10.211.55.6
  • docker exec -t containerID consul members
    • 進入內部檢視consul

四、在本機瀏覽器輸入10.211.55.6:8500/ui,檢視consulUI

附1 consul常用命令+常用選項

之後每用到一個command或options,都會記錄在這裡。

常用命令command

  • agent
    • 作用:執行一個consul agent
  • join
    • 作用:將agent加入到consul cluster
  • members
    • 作用:列出consul cluster叢集中的members

常用選項option

  • -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地址
  • -server
    • 作用:指定節點為server
    • 每個資料中心(DC)的server數推薦為3或5(理想的是,最多不要超過5)
    • 所有的server都採用raft一致性演算法來確保事務的一致性和線性化,事務修改了叢集的狀態,且叢集的狀態儲存在每一臺server上保證可用性
    • server也是與其他DC互動的門面(gateway)
  • -client
    • 作用:指定節點為client
    • 若不指定為-server,其實就是-client
  • -join
    • 作用:將節點加入到叢集
  • -domain
  • -dc
    • 作用:指定機器加入到哪一個dc中
    • 例子:

--net=host:執行consul的docker映象必須帶有的引數,因為consul的consensus和gossip協議對於網路的延遲和丟包很敏感,所以引入額外的其他網路型別的層是不可取並且不必要的。

/consul/data:資料儲存目錄

/consul/config:配置檔案所在目錄,配置也可以通過環境變數名為CONSUL_LOCAL_CONFIG(其值為json串)來指定

一、下載docker映象

  • docker pull consul:0.7.1
  • docker tag xxx 10.211.55.4:5000/consul:0.7.1
  • docker push 10.211.55.4:5000/consul:0.7.1

二、10.211.55.6

  • docker pull 10.211.55.4:5000/consul:0.7.1
  • docker run -d --net=host 10.211.55.4:5000/consul:0.7.1 agent -server -bind=10.211.55.6 -node=server1 -bootstrap-expect 1 -client 0.0.0.0 -ui
    • --net=host:使用宿主機網路,這是執行consul的docker映象必須帶有的引數,因為consul的consensus和gossip協議對於網路的延遲和丟包很敏感,所以引入額外的其他網路型別的層是不可取並且不必要的。這樣之後,外界可以通過宿主機ip來訪問該consul server。
  • consul ps獲取containerID後,consul logs containerId來檢視日誌

三、10.211.55.7

  • docker pull 10.211.55.4:5000/consul:0.7.1
  • docker run -d --net=host 10.211.55.4:5000/consul:0.7.1 agent -bind=10.211.55.7 -node=client1 -retry-join=10.211.55.6
  • docker exec -t containerID consul members
    • 進入內部檢視consul

四、在本機瀏覽器輸入10.211.55.6:8500/ui,檢視consulUI

附1 consul常用命令+常用選項

之後每用到一個command或options,都會記錄在這裡。

常用命令command

  • agent
    • 作用:執行一個consul agent
  • join
    • 作用:將agent加入到consul cluster
  • members
    • 作用:列出consul cluster叢集中的members

常用選項option

  • -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地址
  • -server
    • 作用:指定節點為server
    • 每個資料中心(DC)的server數推薦為3或5(理想的是,最多不要超過5)
    • 所有的server都採用raft一致性演算法來確保事務的一致性和線性化,事務修改了叢集的狀態,且叢集的狀態儲存在每一臺server上保證可用性
    • server也是與其他DC互動的門面(gateway)
  • -client
    • 作用:指定節點為client
    • 若不指定為-server,其實就是-client
  • -join
    • 作用:將節點加入到叢集
  • -domain
  • -dc
    • 作用:指定機器加入到哪一個dc中
    • 例子:

之後每用到一個command或options,都會記錄在這裡。

常用命令command

  • agent
    • 作用:執行一個consul agent
  • join
    • 作用:將agent加入到consul cluster
  • members
    • 作用:列出consul cluster叢集中的members

常用選項option

  • -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地址
  • -server
    • 作用:指定節點為server
    • 每個資料中心(DC)的server數推薦為3或5(理想的是,最多不要超過5)
    • 所有的server都採用raft一致性演算法來確保事務的一致性和線性化,事務修改了叢集的狀態,且叢集的狀態儲存在每一臺server上保證可用性
    • server也是與其他DC互動的門面(gateway)
  • -client
    • 作用:指定節點為client
    • 若不指定為-server,其實就是-client
  • -join
    • 作用:將節點加入到叢集
  • -domain
  • -dc
    • 作用:指定機器加入到哪一個dc中
    • 例子: