Docker搭建Consul集群


了解 Consul

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

Consul關鍵特性

  • 服務發現:支持服務發現。你可以通過 DNS 或 HTTP 的方式獲取服務信息。
  • 健康檢查:支持健康檢查。可以提供與給定服務相關聯的任何數量的健康檢查(如 web 狀態碼或 cpu 使用率)。
  • K/V 存儲:鍵/值對存儲。你可用通過 consul 存儲如動態配置之類的相關信息。
  • 多數據中心:支持多數據中心,開箱即用。
  • WEB-UI:支持WEB-UI。點點點,你就能夠了解你的服務現在的運行情況,一目了然,對開發運維是非常友好的。

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與其他同類產品優勢

開始實戰

拉取Consul鏡像

docker pull consul

Consul掛載目錄

/consul/data 持久化數據存儲
/consul/config 配置文件

創建Consul Server節點

docker run -d -p 8001:8500 --restart=always \
--mount type=volume,source=consul-data-1,target=/consul/data \
--mount type=volume,source=consul-conf-1,target=/consul/config \
-e CONSUL_BIND_INTERFACE='eth0' \
--name consul-server-1 consul agent -server -node server-1 \
--bootstrap-expect 3 -client 0.0.0.0 -ui \
-data-dir=/consul/data -config-dir=/consul/config -datacenter=dh_dc

創建其他Consul節點並且加入集群

docker run -d -p 8001:8500 --restart=always \
--mount type=volume,source=consul-data-1,target=/consul/data \
--mount type=volume,source=consul-conf-1,target=/consul/config \
-e CONSUL_BIND_INTERFACE='eth0' \
--name consul-server-1 consul agent -server -node server-1 \
--bootstrap-expect 3 -client 0.0.0.0 -ui \
-data-dir=/consul/data -config-dir=/consul/config -datacenter=dh_dc -join=172.17.0.2

創建Consul Client節點

docker run -d -p 8500:8500 --restart=always \
--mount type=volume,source=consul-data-4,target=/consul/data \
--mount type=volume,source=consul-conf-4,target=/consul/config \
-e CONSUL_BIND_INTERFACE='eth0' --name=consul-client-1 consul \
agent -node=client-1 -join=172.17.0.2 -client='0.0.0.0' -datacenter=dh_dc \
-ui -config-dir /consul/config -data-dir=/consul/data

查詢Consul集群信息

docker exec consul-server-1consul members

命令介紹

agent : 表示啟動 Agent 進程。
-server:表示啟動 Consul Server 模式。
-client:表示啟動 Consul Cilent 模式。
-bootstrap:表示這個節點是 Server-Leader ,每個數據中心只能運行一台服務器。技術角度上講 Leader 是通過 Raft 算法選舉的,但是集群第一次啟動時需要一個引導 Leader,在引導群集后,建議不要使用此標志。
-bootstrap-expect:集群期望的 Server 節點數,只有達到這個值才會選舉 Leader
-ui:表示啟動 Web UI 管理器
-node:節點的名稱,集群中必須是唯一的。
-client:表示 Consul 將綁定客戶端接口的地址,0.0.0.0 表示所有地址都可以訪問。
-join:表示加入到某一個集群中去。 如:-join=192.168.1.23
-bind: 指定節點綁定的地址
-datacenter: 數據中心
-config-file: 要加載的配置文件
---
**環境變量介紹**
CONSUL_CLIENT_INTERFACE :配置 Consul 的 -client=<interface ip> 命令參數。
CONSUL_BIND_INTERFACE :配置 Consul 的 -bind=<interface ip> 命令參數。
CONSUL_DATA_DIR :配置 Consul 的數據持久化目錄。
CONSUL_CONFIG_DIR:配置 Consul 的配置文件目錄。

端口介紹

TCP/8300	8300 端口用於服務器節點。客戶端通過該端口 RPC 協議調用服務端節點。服務器節點之間相互調用
TCP/UDP/8301	8301 端口用於單個數據中心所有節點之間的互相通信,即對 LAN 池信息的同步。它使得整個數據中心能夠自動發現服務器地址,分布式檢測節點故障,事件廣播(如領導選舉事件)。
TCP/UDP/8302	8302 端口用於單個或多個數據中心之間的服務器節點的信息同步,即對 WAN 池信息的同步。它針對互聯網的高延遲進行了優化,能夠實現跨數據中心請求。
8500	8500 端口基於 HTTP 協議,用於 API 接口或 WEB UI 訪問。
8600	8600 端口作為 DNS 服務器,它使得我們可以通過節點名查詢節點信息。

使用ACL控制權限

開啟ACL,在Consul配置文件增加如下配置 acl.json

{
  "acl": {
    "enabled": true,
    "default_policy": "deny",
    "down_policy": "extend-cache"
  }
}

進入consul容器

docker exec -it consul-name bin/sh

生成第一個無限權限的令牌

consul acl bootstrap

Consul策略表

在UI 操作ACL,添加策略,分配角色,生成角色Token。

添加策略示例
service_prefix "" {
  policy = "write"
  }
key_prefix "" {
  policy = "write"
  }
node_prefix "" {
  policy = "write"
  }

為什么有了server端,還要再弄一個client?

一個Client是一個轉發所有RPC到server的代理,它本身不持久化這些信息。client是相對無狀態的。client唯一執行的后台動作是加入LAN gossip池。client會提供最低的資源開銷並且僅消耗少量的網絡帶寬。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM