天天看點

Docker之Consul基礎及環境部署

Docker之Consul基礎及環境部署

了解Consul

首先 Consul 有如下幾個關鍵特性:web

服務發現:支援服務發現。你能夠經過 DNS 或 HTTP 的方式擷取服務資訊。

健康檢查:支援健康檢查。能夠提供與給定服務相關聯的任何數量的健康檢查(如 web 狀态碼或 cpu 使用率)。

K/V 存儲:鍵/值對存儲。你可用經過 consul 存儲如動态配置之類的相關資訊。

多資料中心:支援多資料中心,開箱即用。

WEB-UI:支援 WEB-UI。你可以了解你的服務如今的運作狀況,一目了然,對開發運維是很是友好的。

常用元件對比圖如下

Docker之Consul基礎及環境部署

服務發現元件的選型主要從如下幾個方面進行

  1. CAPdocker

一緻性的強制資料統一要求,必然會緻使在更新資料時部分節點處于被鎖定狀态,此時不可對外提供服務,影響了服務的可用性。

2. 一緻性算法伺服器

Raft算法将 Server 分為三種類型:Leader、Follower 和 Candidate。Leader 處理全部的查詢和事務,并向 Follower 同步事務。Follower 會将全部的 RPC 查詢和事務轉發給 Leader 處理,它僅從 Leader 接受事務的同步。資料的一緻性以 Leader 中的資料為準實作。

如下是幾種常見的一緻性算法

Docker之Consul基礎及環境部署

3. 多資料中心

Consul 經過 WAN 的 Gossip 協定,完成跨資料中心的同步;而其餘的産品則須要額外的開發工做來實作;

Gossip 協定是 P2P 網絡中比較成熟的協定。Gossip 協定的最大的好處是,即便叢集節點的數量增長,每一個節點的負載也不會增長不少,幾乎是恒定的。這就容許 Consul 管理的叢集規模能橫向擴充到數千個節點。

Consul 的每一個 Agent 會利用 Gossip 協定互相檢查線上狀态,本質上是節點之間互 Ping,分擔了伺服器節點的心跳壓力。若是有節點掉線,不用伺服器節點檢查,其餘普通節點會發現,而後用 Gossip 廣播給整個叢集。

Docker之Consul基礎及環境部署

Consul 架構

關于consul,官方有一個很直覺的圖檔可供大家了解

Docker之Consul基礎及環境部署

單獨看資料中心 1,能夠看出 consul 的叢集是由 N 個 SERVER,加上 M 個 CLIENT 組成的。而不論是 SERVER 仍是 CLIENT,都是 consul 的一個節點,全部的服務均可以注冊到這些節點上,正是經過這些節點實作服務注冊資訊的共享。

CLIENT

CLIENT 表示 consul 的 client 模式,就是用戶端模式。是 consul 節點的一種模式,這種模式下,全部注冊到目前節點的服務會被轉發到 SERVER,自己是不持久化這些資訊。

SERVER

SERVER 表示 consul 的 server 模式,代表這個 consul 是個 server,這種模式下,功能和 CLIENT 都同樣,惟一不一樣的是,它會把全部的資訊持久化的本地,這樣遇到故障,資訊是能夠被保留的。

SERVER-LEADER

中間那個 SERVER 下面有 LEADER 的字眼,代表這個 SERVER 是它們的老大,它和其它 SERVER 不同的一點是,它須要負責同步注冊的資訊給其它的 SERVER,同時也要負責各個節點的健康監測。

Docker 環境搭建

docker-compose-consul-cluster.yml

version: '3'
services:
  consul-server1:
    image: consul:latest
    hostname: "consul-server1"
    ports:
      - "8500:8500"
      - "53"
    volumes:
      - ./consul/data1:/consul/data
    command: "agent -server -bootstrap-expect 3 -ui -disable-host-node-id -client 0.0.0.0"
  consul-server2:
    image: consul:latest
    hostname: "consul-server2"
    ports:
      - "8501:8500"
      - "53"
    volumes:
      - ./consul/data2:/consul/data
    command: "agent -server -ui -join consul-server1 -disable-host-node-id -client 0.0.0.0"
    depends_on:
      - consul-server1
  consul-server3:
    image: consul:latest
    hostname: "consul-server3"
    ports:
      - "8502:8500"
      - "53"
    volumes:
      - ./consul/data3:/consul/data
    command: "agent -server -ui -join consul-server1 -disable-host-node-id -client 0.0.0.0"
    depends_on:
      - consul-server1
  consul-node1:
    image: consul:latest
    hostname: "consul-node1"
    command: "agent -join consul-server1 -disable-host-node-id"
    depends_on:
      - consul-server1
  consul-node2:
    image: consul:latest
    hostname: "consul-node2"
    command: "agent -join consul-server1 -disable-host-node-id"
    depends_on:
      - consul-server1
           

執行 docker-compose -f docker-compose-consul-cluster.yml up -d 啟動,而後通路

h ttp://localhost:8500,如果可以看到下圖那就算啟動成功了。

Docker之Consul基礎及環境部署

小結:docker consul,consul是領事(零食)的意思,歡迎大家開袋即食,吃的開心!~

Docker之Consul基礎及環境部署
Docker之Consul基礎及環境部署
Docker之Consul基礎及環境部署