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?版本。
$ docker pull consul:1.4.4
1.4.4: Pulling from library/consul
5d20c808ce19: Pull complete
ded83912d17e: Pull complete
a7fbb7ddd3ea: Pull complete
6cdcd1f7ea42: Pull complete
a0ea9ef64acd: Pull complete
267ee3fb0b30: Pull complete
Digest: sha256:9113b1043308b4193d2be8516c64fcdc2e9740e3c626be058076de697c407be7
Status: Downloaded newer image for consul:1.4.4
Consul 鏡像提供了幾個個常用環境變量
CONSUL_CLIENT_INTERFACE?:配置 Consul 的?-client=<interface ip>?命令參數。
CONSUL_BIND_INTERFACE?:配置 Consul 的?-bind=<interface ip>?命令參數。
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?并且主機上不顯示任何服務。
$ 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'
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 的宕機導致整個集群掛掉的風險。
通過命令查一下當前運行 Consul 集群信息
$ docker?exec?consul_server_1 consul members
Node? Address? Status? Type? Build? Protocol?DC??Segment
1? 172.17.0.2:8301?alive server??1.4.4? 2?dc1??<all>
加入到集群, 命名為?-node=2?、-node=3。?
上面通過命令獲取到引導 Consul 的 Ip 地址?172.17.0.2?,
// -node=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'
5d999ade4f96e04b5a1dbbcb69dc117fafa11d450fd17268884b1254971a7450
// -node=3
$ 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'
459948e6bd26e2b0b556ac6b4c5593b5dba2e4dc2b79d506d6ba4644f4ab0970
通過 Web 管理器查看是否成功加入集群中?
Client 加入集群
Client 在 Consul 集群中起到了代理 Server 的作用,Client 模式不持久化數據。一般情況每臺應用服務器都會安裝一個 Client ,這樣可以減輕跨服務器訪問帶來性能損耗。也可以減輕 Server 的請求壓力。
加入集群
$ 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'
6e0604490eb49363d28249a5277c03173b258aa55965d70eb5b5438a0a6b7eea
$ 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'
25e9792c6d5949ba3fcf73432ed2933568726d214d6819ab52d2b6eaa00d7842
$ 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'
c7333068c1679f8f9e8c8c0be0fcf68f93f85b2c45dd177e4757217bdfa55d7a
檢查 Client 是否加入集群中
$ docker?exec?consul_server_1 consul members
Node? Address? Status? Type? Build? Protocol?DC??Segment
1? 172.17.0.2:8301?alive server??1.4.4? 2?dc1??<all>
2? 172.17.0.3:8301?alive server??1.4.4? 2?dc1??<all>
3? 172.17.0.4:8301?alive server??1.4.4? 2?dc1??<all>
25e9792c6d59? 172.17.0.6:8301?alive client??1.4.4? 2?dc1?<default>
6e0604490eb4? 172.17.0.5:8301?alive client??1.4.4? 2?dc1?<default>
c7333068c167??172.17.0.7:8301?alive client??1.4.4? 2dc1??<default>
總結
Docker 部署 Consul 其實很簡單,Consul 集群的配置主要是 Consul 的命令需要了解,建議多看看 Consul 的官方文檔。
引用和附件
Consul 原理和使用簡介 :?https://blog.coding.net/blog/intro-consul?type=hot
Consul 鏡像倉庫地址 :https://hub.docker.com/_/consul
Consul 鏡像使用文檔:https://github.com/docker-library/docs/tree/master/consul
Consul 官方文檔 :https://www.consul.io/docs/agent/basics.html
使用Consul和Registration對Docker容器進行服務發現?
https://livewyer.io/blog/2015/02/05/service-discovery-docker-containers-using-consul-and-registrator
基于Consul+Registrator+Nginx實現容器服務自動發現的集群框架?
http://www.mamicode.com/info-detail-2222200.html
.NET Core微服務之基于Consul實現服務治理?
https://www.cnblogs.com/edisonchou/p/9124985.html
作品轉載于【DotNET技術圈】,作者來自于長沙.NET技術社區成員【阿凌】
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的Docker - 容器部署 Consul 集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《从零开始学ASP.NET CORE M
- 下一篇: VS2017创建ASP.NET Core