歡迎光臨
每天分享高質量文章

Docker – 容器部署 Consul 叢集

目錄    
  • 準備 Consul 映象

  • 安裝單個 Consul

  • 組裝叢集 Consul

  • 啟動 Consul 和 Web 管理器

  • Consul 命令簡單介紹

  • Web 管理器

  • Server 加入叢集

  • Client 加入叢集

  • 瞭解 Consul

  • Consul 使用場景

  • Consul 優勢

  • Consul 中的概念

  • 說明

  • 簡介

  • 安裝

  • 總結

  • 取用和附件

說明

本文主要介紹怎麼使用 Docker 在 Linux 環境部署 Consul 叢集,如果你對 Docker 不瞭解的同學,請先學習一下 Docker。推薦一本學習 Docker 線上書籍 :【Docker入門到實踐】 。

本文介紹 Consul 部署已經在準備好 Docker 環境好前提下開始的。

  • CentOS 7.3

  • Docker CE 18.09.2

簡介

瞭解 Consul

Consul 是一個支援多資料中心分散式高可用的 服務發現 和 配置共享 的服務軟體,由 HashiCorp 公司用 Go 語言開發, 基於 Mozilla Public License 2.0 的協議進行開源。 Consul 支援 健康檢查,並允許 HTTP 、GRPC 和 DNS 協議呼叫 API 儲存鍵值對. 
命令列超級好用的虛擬機器管理軟體 vgrant 也是 HashiCorp 公司開發的產品. 
一致性協議採用 Raft 演演算法,用來保證服務的高可用. 使用 GOSSIP 協議管理成員和廣播訊息, 並且支援 ACL 訪問控制.

Consul 使用場景

  • Docker 實體的註冊與配置共享

  • Coreos 實體的註冊與配置共享

  • SaaS 應用的配置共享、服務發現和健康檢查。

  • vitess 叢集

  • 與 confd 服務整合,動態生成 nginx 和 haproxy 配置檔案

Consul 優勢

市面現在有很多類似的軟體比如:zookeeper 、Etcd、doozerd、eureka,Consul 相比這些軟體有什麼優勢呢? 
官方出了相比較這些軟體區別的一篇 Consul vs. ZooKeeper,doozerd,etcd 文章。

下麵總結一下 Consul 的優勢有那幾點:

  • 使用 Raft 演演算法來保證一致性, 比複雜的 Paxos 演演算法更直接. 相比較而言, zookeeper 採用的是 Paxos, 而 etcd 使用的則是 Raft.

  • 支援 多資料中心,內外網的服務採用不同的埠進行監聽。 多資料中心叢集可以避免單資料中心的單點故障,而其部署則需要考慮網路延遲,分片等情況等. zookeeper 和 etcd 均不提供多資料中心功能的支援。

  • 支援 健康檢查。 etcd 不提供此功能。

  • 支援 HTTP、DNS 和 GPRS 協議介面。 zookeeper 的整合較為複雜,etcd 只支援 http 協議。

  • 官方提供 WEB管理介面,etcd 無此功能。

  • 綜合比較, Consul 作為服務註冊和配置管理的新星,比較值得關註和研究。

Consul 中的概念

  • Client:表示 Consul 客戶端樣式,是 Consul 節點的一種樣式,所有註冊到 Client 節點的服務會被轉發到 Server 。本身無狀態不持久化如何資料。Client 透過 HTTP、DNS、GRPC 介面請求轉發給區域網內的服務端叢集。

  • Server:表示 Consul 的服務端樣式, Server 功能和 Client 都一樣,不同的是 Server 持久化資料到本地。在區域網內與本地 Client 通訊,透過廣域網與其他資料中心通訊。每個資料中心的 Server 數量推薦為 3 個或是 5 個。

  • Server-Leader :表示這個 Server 是它們的老大,它和其它 Server 不一樣的一點是,它需要負責同步註冊的資訊給其它的 Server 節點,同時也要負責各個節點的健康監測。如果 Leader 宕機了,通資料中心的所有 Server 內部會使用 Raft 演演算法來在其中選取一個 Leader 出來。

  • Agent :Agent 是 Consul 的核心行程,Agent 的工作是維護成員關係資訊、註冊服務、健康檢查、響應查詢等等。Consul 叢集的每一個節點都必須執行 agent 行程。

  • 其它 
    需要瞭解 Consul 原理、的通訊方式、協議資訊、演演算法、說明檔案等。有興趣可以前往官方檢視 官方檔案。

    檔案:https://www.consul.io/docs/agent/basics.html 
    官網:https://www.consul.io

安裝

準備 Consul 映象

拉取 Consul 映象到本地,我本次講解的是 Consul V1.4.4 版本。

  1. $ docker pull consul:1.4.4

  2. 1.4.4: Pulling from library/consul

  3. 5d20c808ce19: Pull complete

  4. ded83912d17e: Pull complete

  5. a7fbb7ddd3ea: Pull complete

  6. 6cdcd1f7ea42: Pull complete

  7. a0ea9ef64acd: Pull complete

  8. 267ee3fb0b30: Pull complete

  9. Digest: sha256:9113b1043308b4193d2be8516c64fcdc2e9740e3c626be058076de697c407be7

  10. Status: Downloaded newer image for consul:1.4.4


Consul 映象提供了幾個個常用環境變數

  • CONSUL_CLIENT_INTERFACE :配置 Consul 的 -client= 命令引數。

  • CONSUL_BIND_INTERFACE :配置 Consul 的 -bind= 命令引數。

  • CONSUL_DATA_DIR :配置 Consul 的資料持久化目錄。

  • CONSUL_CONFIG_DIR:配置 Consul 的配置檔案目錄。

Consul 映象的詳細說明請前往官方使用檔案。

安裝單個 Consul

先啟動一個單機版 Consul,由於單機肯定需要安裝 Server 樣式的 Consul。

啟動 Consul 和 Web 管理器

我們啟動一個命名為 consul_server_1 的 Docker 容器來執行 Consul ,啟動的 Consul 的版本是1.4.4。CONSUL_BIND_INTERFACE 設定為預設橋接網路 eth0 並且主機上不顯示任何服務。

  1. $ docker run -d -p 8500:8500 -e CONSUL_BIND_INTERFACE=’eth0′ –name=consul_server_1 consul:1.4.4 agent -server -bootstrap -ui -node=1 -client=’0.0.0.0′

  2. 9e86237f42d3c2cefab5de0dc9888d2bd4ed3e7a1aa2ca8e1ebc54cef9ea47b7


Consul 命令簡單介紹

  • agent : 表示啟動 Agent 行程。

  • -server:表示啟動 Consul Server 樣式。

  • -client:表示啟動 Consul Cilent 樣式。

  • -bootstrap:表示這個節點是 Server-Leader ,每個資料中心只能執行一臺伺服器。技術角度上講 Leader 是透過 Raft 演演算法選舉的,但是叢集第一次啟動時需要一個引導 Leader,在引導群集後,建議不要使用此標誌。

  • -ui:表示啟動 Web UI 管理器,預設開放埠 8500,所以上面使用 Docker 命令把 8500 埠對外開放。

  • -node:節點的名稱,叢集中必須是唯一的。

  • -client:表示 Consul 將系結客戶端介面的地址,0.0.0.0 表示所有地址都可以訪問。

  • -join:表示加入到某一個叢集中去。 如:-json=192.168.1.23

Web 管理器

上面命令已經啟動了 Consul 和 Web 管理器,我們現在開啟 Web 管理器來看一下是否啟動成功。透過瀏覽器瀏覽Http://{serverIp}:8500 。

上圖顯示已經啟動成功了,啟動了一個節點名稱為 -node=1 的節點 ,並且可以透過管理器管理 Node 節點、Key/Value 功能等。 
這裡就不講怎麼使用 Consul ,我在附件中取用幾篇文章你可以去看看,更細化怎麼使用可以去查相關資料。

組裝叢集 Consul

上面完成了一個單機版的 Consul 部署,下麵我們將實現圖中的的叢集架構 Consul 部署。

Server 加入叢集

我們在上面單機版的基礎上面來拓展叢集,這樣可以模擬叢集的一步一步發展。下麵我將加入二個 Server 樣式的 Consul 到叢集中,Server 樣式在叢集中建議是 三個以上,這樣更好的避免因為 Server 的宕機導致整個叢集掛掉的風險。

  1. 透過命令查一下當前執行 Consul 叢集資訊

    1. $ docker exec consul_server_1 consul members

    2. Node  Address  Status  Type  Build  Protocol DC  Segment

    3. 1  172.17.0.2:8301 alive server  1.4.4  2 dc1  

  2. 加入到叢集, 命名為 -node=2 、-node=3。 
    上面透過命令獲取到引導 Consul 的 Ip 地址 172.17.0.2 ,

    1. // -node=2

    2. $ docker run -d -e CONSUL_BIND_INTERFACE=’eth0′ –name=consul_server_2 consul:1.4.4 agent -server -node=2  -join=’172.17.0.2′

    3. 5d999ade4f96e04b5a1dbbcb69dc117fafa11d450fd17268884b1254971a7450

    4. // -node=3

    5. $ docker run -d -e CONSUL_BIND_INTERFACE=’eth0′ –name=consul_server_3 consul:1.4.4 agent -server -node=3  -join=’172.17.0.2′

    6. 459948e6bd26e2b0b556ac6b4c5593b5dba2e4dc2b79d506d6ba4644f4ab0970

  3. 透過 Web 管理器檢視是否成功加入叢集中 

Client 加入叢集

Client 在 Consul 叢集中起到了代理 Server 的作用,Client 樣式不持久化資料。一般情況每臺應用伺服器都會安裝一個 Client ,這樣可以減輕跨伺服器訪問帶來效能損耗。也可以減輕 Server 的請求壓力。

  1. 加入叢集

    1. $ docker run -d -e CONSUL_BIND_INTERFACE=’eth0′ –name=consul_server_4 consul:1.4.4 agent -client -node=4 -join=’172.17.0.2′ -client=’0.0.0.0′

    2. 6e0604490eb49363d28249a5277c03173b258aa55965d70eb5b5438a0a6b7eea

    3. $ docker run -d -e CONSUL_BIND_INTERFACE=’eth0′ –name=consul_server_5 consul:1.4.4 agent -client -node=5 -join=’172.17.0.2′ -client=’0.0.0.0′

    4. 25e9792c6d5949ba3fcf73432ed2933568726d214d6819ab52d2b6eaa00d7842

    5. $ docker run -d -e CONSUL_BIND_INTERFACE=’eth0′ –name=consul_server_6 consul:1.4.4 agent -client -node=5 -join=’172.17.0.2′ -client=’0.0.0.0′

    6. c7333068c1679f8f9e8c8c0be0fcf68f93f85b2c45dd177e4757217bdfa55d7a

  2. 檢查 Client 是否加入叢集中

    1. $ docker exec consul_server_1 consul members

    2. Node  Address  Status  Type  Build  Protocol DC  Segment

    3. 1  172.17.0.2:8301 alive server  1.4.4  2 dc1  

    4. 2  172.17.0.3:8301 alive server  1.4.4  2 dc1  

    5. 3  172.17.0.4:8301 alive server  1.4.4  2 dc1  

    6. 25e9792c6d59  172.17.0.6:8301 alive client  1.4.4  2 dc1 

    7. 6e0604490eb4  172.17.0.5:8301 alive client  1.4.4  2 dc1 

    8. c7333068c167  172.17.0.7:8301 alive client  1.4.4  2dc1  

總結

Docker 部署 Consul 其實很簡單,Consul 叢集的配置主要是 Consul 的命令需要瞭解,建議多看看 Consul 的官方檔案。

取用和附件

  1. Consul 原理和使用簡介 : https://blog.coding.net/blog/intro-consul?type=hot

  2. Consul 映象倉庫地址 :https://hub.docker.com/_/consul

  3. Consul 映象使用檔案:https://github.com/docker-library/docs/tree/master/consul

  4. Consul 官方檔案 :https://www.consul.io/docs/agent/basics.html

  5. 使用Consul和Registration對Docker容器進行服務發現 
    https://livewyer.io/blog/2015/02/05/service-discovery-docker-containers-using-consul-and-registrator

  6. 基於Consul+Registrator+Nginx實現容器服務自動發現的叢集框架 
    http://www.mamicode.com/info-detail-2222200.html

  7. .NET Core微服務之基於Consul實現服務治理 
    https://www.cnblogs.com/edisonchou/p/9124985.html

 

作品轉載於【DotNET技術圈】,作者來自於長沙.NET技術社群成員【阿凌】

贊(0)

分享創造快樂