這系列文章很基礎,主要給想嘗試後端技術棧的前端看的,後端大佬別看了,極可能浪費你的時間。前端
雖然我更擅長寫前端相關的知識點總結文章,可是也阻止不了我對後端技術的嚮往啊,後端相關的文章質量不會高,主要目的是爲了記錄本身的學習歷程,也是但願把本身的短板和缺點暴露出來,跟小夥伴們一塊兒成長。node
學習Go很大一個緣由是由於想嘗試寫微服務,因而在探索Go構建微服務的道路上越走越遠,甚至有些求快和焦躁了,可是在成長就行。mysql
首先奉上中文文檔Consul.web
Consul由多個模塊組成,是一個爲基礎設施提供服務發現和服務配置的工具。當用微服務架構時,傳統的單體應用所有拆分爲了細粒度的功能模塊,這些模塊就是微服務,他們能夠擁有本身獨立的數據庫,遵循單一職責原則,能夠獨立部署。減小系統之間的耦合。那這麼多的微服務之間怎麼相互調用和發現呢?就能夠藉助consul來集中註冊管理來。sql
每一個服務節點(這個節點能夠理解爲一個服務器或者一個容器)都運行了一個Consul agent。這個agent是負責對節點自身和節點上的服務進行健康檢查的。consul 能夠用兩種模式運行 server 和 client ,其中 server模式是以集羣的方式運行的,最少建議 3-5臺服務器/容器。每一個數據中心(能夠是多個服務器節點 / 容器的集合)至少必須擁有一臺server。數據庫
consul agent -dev
consul members
複製代碼
能夠啓動 consul,而後查看當前集羣的成員json
也能夠經過Http 和 DNS 的方式查詢集羣信息bootstrap
curl localhost:8500/v1/catalog/nodes
dig @127.0.0.1 -p 8600 Armons-MacBook-Air.node.consul
複製代碼
服務註冊有兩種方式:後端
爲Consul配置建立一個目錄.Consul會載入配置文件夾裏的全部配置文件。api
sudo mkdir /etc/consul.d
// 寫入配置
echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \
>/etc/consul.d/web.json
// Consul服務重啓
consul agent -dev -config-dir /etc/consul.d
複製代碼
.d 後綴意思是這個路徑包含了一組配置文件.
一旦agent啓動而且服務同步了.咱們能夠經過DNS或者HTTP的API來查詢服務. 在DNS API中,服務的DNS名字是 NAME.service.consul
NAME是服務的名稱
對於咱們上面註冊的Web服務.它的域名是 web.service.consul
dig @127.0.0.1 -p 8600 web.service.consul
// 會返回一個A記錄返回了一個可用的服務所在的節點的IP地址
dig @127.0.0.1 -p 8600 web.service.consul SRV
//接收包含 地址,服務節點和端口的 SRV記錄
curl http://localhost:8500/v1/catalog/service/web
// 經過 Http API 方式查詢
複製代碼
服務定義能夠經過配置文件併發送SIGHUP給agent來進行更新.這樣你可讓你在不關閉服務或者保持服務請求可用的狀況下進行更新. 另外 HTTP API能夠用來動態的添加,移除和修改服務.
將Consul 拓展成面向生成環境,擁有多個成員的服務發現架構。 當一個agent啓動時。他是孤立的,經過與存在的集羣成員溝通來發現其餘成員。 Consul agent能夠加入任何agent而不僅是出於server模式的agent
每一個集羣中的節點都必需要一個惟一的名字.Consul默認會使用機器的hostname.咱們 可使用-node手動覆蓋他.
咱們也可使用-bind指定一個綁定的地址讓Consul在這個地址上進行監聽,這個地址必須能夠被其餘集羣成員訪問到
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=hdp2 -bind=10.0.0.52 -config-dir /etc/consul.d
複製代碼
參數介紹:
consul join 10.0.0.53
// 當前agent加入 10.0.0.53 agent
複製代碼
就像查詢服務同樣.Consul有一個API用來查詢節點本身.你能夠經過DNS和HTTP的API來進行.
DNS API中節點名稱結構爲 NAME.node.consul或者NAME.node.DATACENTER.consul.若是數據中心名字省略,Consul只會查詢本地數據中心.
dig @127.0.0.1 -p 8600 hdp3.node.consul
複製代碼
離開集羣,你能夠Ctrl-C優雅的退出,也能夠直接Kill掉agent進程.優雅的退出可讓節點轉變爲離開狀態.不然節點將被標記爲失敗.
和服務相似,一個檢查能夠經過檢查定義或HTTP API請求來註冊. 咱們將使用和檢查定義來註冊檢查.和服務相似,由於這是創建檢查最經常使用的方式.
echo '{"check": {"name": "ping", "script": "ping -c1 163.com >/dev/null", "interval": "30s"}}' \
>/etc/consul.d/ping.json
// 健康檢查的 HTTP API 方式
curl http://localhost:8500/v1/health/state/critical
複製代碼
重啓agent或者發送SIGHUP信號,就能夠看到日誌輸出。
consul agent -ui
http://localhost:8500/ui
複製代碼
未完待續。。。 好像好久沒更新以前寫的前端文章了。。。個人錯