Consul是基于GO語言開發的開源工具,主要面向分布式,服務化的系統提供服務注冊、服務發現和配置管理的功能。Consul的功能都很實用,其中包括:服務注冊/發現、健康檢查、Key/Value存儲、多資料中心和分布式一緻性保證等特性。Consul本身隻是一個二進制的可執行檔案,是以安裝和部署都非常簡單,隻需要從官網下載下傳後,在執行對應的啟動腳本即可。
基礎特性
1.服務注冊/發現
為什麼微服務架構下就需要做服務注冊和服務發現呢?微服務的目标就是要将原來大一統的系統架構,拆分成細粒度的按功能職責分成的小系統,這樣就會出現很多小的系統,部署的節點也會随之增加。試想一下,如果沒有一個統一的服務元件來管理各系統間的清單,微服務架構是很難落地實作的。
Consul提供的服務注冊/發現功能在資料強一緻性和分區容錯性上都有非常好的保證,但在叢集可用性下就會稍微差一些(相比Euerka來說)。
2.資料強一緻性保證
Consul采用了一緻性算法Raft來保證服務清單資料在資料中心中各Server下的強一緻性,這樣能保證同一個資料中心下不管某一台Server Down了,請求從其他Server中同樣也能擷取的最新的服務清單資料。資料強一緻性帶來的副作用是當資料在同步或者Server在選舉Leader過程中,會出現叢集不可用。
3.多資料中心
Consul支援多資料中心(Data Center),多個資料中心之間通過Gossip協定進行資料同步。多資料中心的好處是當某個資料中心出現故障時,其他資料中心可以繼續提供服務,提升了可用性。
4.健康檢查
Consul支援基本硬體資源方面的檢查,如:CPU、記憶體、硬碟等
5.Key/Value存儲
Consul支援Key/Value存儲功能,可以将Consul作為配置中心使用,可以将一些公共配置資訊配置到Consul,然後通過Consul提供的 HTTP API來擷取對應Key的Value。
主機名
IP位址
所需元件
docker01
192.168.45.129
consul,consul-template,nginx
docker02
192.168.45.141
consul, registrator
docker03
192.168.45.142
注:實驗環境關閉防火牆、禁用SElinux
所需的安裝包:連結:https://pan.baidu.com/s/1R9ms2y0j5cdFmBvtcvMqiA
提取碼:olcy
一)、在Docker01上執行二進制指令部署consul服務
至此,用戶端可以通路docker01的8500端口進行驗證:

二)、docker02、docker03,加入consul叢集
至此,執行“consul members”指令即可檢視到docker02及docker03的資訊:
浏覽器通路consul服務,驗證叢集資訊:
三)、docker02及docker03主機上以容器的方式運作registrator服務
注:registrator是一個能自動發現docker container提供的服務,并在後端服務注冊中心注冊服務或取消服務的工具,後端注冊中心支援conusl、etcd、skydns2、zookeeper等。
浏覽器測試通路,這裡我隻通路了node1,這裡就不通路node2了:
四)、在主機docker01上部署Nginx服務,以便提供反向代理
五)、在docker01安裝consul-template指令工具,并編寫模闆
注:consul-template的作用就是将收集到的資訊(把registrator收集到容器的資訊)寫入template模闆中,并且最終寫入Nginx的配置檔案中。
注:這裡附加了一張圖
六)、驗證服務的實時發現功能
配置至此,docker02或者docker03上一旦有任何Nginx相關的容器以背景“-d”的運作方式運作,都會被添加到反向代理中來,進行排程,一旦容器發生意外關閉,則可以自動從反向代理配置檔案中剔除。
現在可以在docker02、和docker03上分别運作兩台Nginx容器,其容器名稱依次為web01、web02.......,其網頁檔案依次為:this is web01 test、this is web02 test..........
為其準備不同的網頁檔案的目的就是友善用戶端通路時區分通路的是哪台容器。
由于其配置過程類似,我這裡就寫出一個運作Nginx容器的過程,其他照做即可。
配置示例如下(運作web01并修改其首頁檔案):
注:在docker02及docker03運作四個Nginx容器後(必須以背景運作的方式,也就是說在運作時必須有“-d”選項),那麼,此時通路docker01的8000端口,就會循環通路到這四個容器提供的網頁檔案,如下:
至此,consul+registrator+docker實時服務發現就配置完成了