Docker-Consul入門(一) 簡介,用途,環境搭建-單機

1.    Consul是什麼?

Consul是一個分佈式、高可用的系統,是一個爲了解決在生產環境中服務註冊,服務發現,服務配置的一個工具,它有多個組件,提供如下幾個關鍵功能:

  • 服務發現: Consul的某些客戶端可以提供一個服務,例如api或者mysql,其它客戶端可以使用Consul去發現這個服務的提供者。使用DNS或者HTTP,應用可以很容易的找到他們所依賴的服務。
  • 健康檢查: Consul客戶端可以提供一些健康檢查,這些健康檢查可以關聯到一個指定的服務(服務是否返回200 OK),也可以關聯到本地節點(內存使用率是否在90%以下)。這些信息可以被一個操作員用來監控集羣的健康狀態,被服務發現組件路由時用來遠離不健康的主機。
  • 鍵值存儲: 應用可以使用Consul提供的分層鍵值存儲用於一些目的,包括動態配置、特徵標記、協作、leader選舉等等。通過一個簡單的HTTP API可以很容易的使用這個組件。
  • 多數據中心: Consul對多數據中心有非常好的支持,這意味着Consul用戶不必擔心由於創建更多抽象層而產生的多個區域。

2.    爲什麼要用它?

現在企業應用都向微服務化方向發展,當把我們的系統功能拆分成一個一個的微服務後,存在以下問題

·        需要配置N個服務的網絡位置,加大配置的複雜性

·        服務的網絡位置變化,都需要改變每個調用者的配置

·        集羣的情況下,難以做負載(反向代理的方式除外)

(借用網上的一個圖來描述一下)

那我們該如何處理呢? 這個時候我們就可以通過使用 服務發現 機制系統,來幫助我們來管理這些繁雜的配置。


服務A-N把當前自己的網絡位置註冊到服務發現模塊(這裏註冊的意思就是告訴),服務發現就以K-V的方式記錄下,K一般是服務名,V就是IP:PORT。服務發現模塊定時的輪詢查看這些服務能不能訪問的了(這就是健康檢查)。客戶端在調用服務A-N的時候,就跑去服務發現模塊問下它們的網絡位置,然後再調用它們的服務。這樣的方式是不是就可以解決上面的問題了呢?客戶端完全不需要記錄這些服務網絡位置,客戶端和服務端完全解耦!

3.    搭建docker-consul環境。

3.1從docker-hub上搜索拉取鏡像

docker search consul

docker pull consul

3.2  啓動鏡像

dockerrun -d --name consulserver1 --net=host -e'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' consul agent-server -bind=10.10.10.79 -bootstrap-expect=1  -client0.0.0.0 –ui

–net=host docker參數, 使得docker容器越過了netnamespace的隔離,免去手動指定端口映射的步驟

-server consul支持以server或client的模式運行, server是服務發現模塊的核心, client主要用於轉發請求

-advertise 將本機私有IP傳遞到consul

-bootstrap-expect 指定consul將等待幾個節點連通,成爲一個完整的集羣

-retry-join 指定要加入的consul節點地址,失敗會重試, 可多次指定不同的地址

-client consul綁定在哪個client地址上,這個地址提供HTTP、DNS、RPC等服務,默認是127.0.0.1

-bind 該地址用來在集羣內部的通訊,集羣內的所有節點到地址都必須是可達的,默認是0.0.0.0

-allow_stale 設置爲true, 表明可以從consul集羣的任一server節點獲取dns信息, false則表明每次請求都會經過consul server leader

--name DOCKER容器的名稱

-client 0.0.0.0 表示任何地址可以訪問。

-ui  提供圖形化的界面。

3.3  驗證服務

IE,輸入:http://ip:8500後會出現下去的界面既表示成功。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章