使用背景
客戶端的調用一個微服務,在調用過程中,為了完成一次請求,代碼需要知道服務實例的網絡位置(IP 地址和端口),需要動態(tài)感知服務的服務健康度是否可用,負載均衡等相關問題,既然有這些問題,那么服務發(fā)現(xiàn)就是解決這些問題的。

consul 簡介
那么consul是啥?consul就是提供服務發(fā)現(xiàn)的工具,下面是簡單的介紹
那么consul是啥?consul就是提供服務發(fā)現(xiàn)的工具。
* 服務發(fā)現(xiàn):consul通過DNS或者HTTP接口使服務注冊和服務發(fā)現(xiàn)變的很容易
* health checking:健康檢測使consul可以快速的告警在集群中的操作。和服務發(fā)現(xiàn)的集成,可以防止服務轉發(fā)到故障的服務上面
* key/value storage:一個用來存儲動態(tài)配置的系統(tǒng)。提供簡單的HTTP接口,可以在任何地方操作。
*?multi-datacenter:支持多數(shù)據(jù)中心無需復雜的配置,即可支持任意數(shù)量的區(qū)域
consul的幾個概念

1. Consul Cluster由部署和運行了Consul Agent的節(jié)點組成。 在Cluster中有兩種角色:Server和 Client。
2. Server和Client的角色和Consul Cluster上運行的應用服務無關, 是基于Consul層面的一種角色劃分.
3. Consul Server: 用于維護Consul Cluster的狀態(tài)信息, 實現(xiàn)數(shù)據(jù)一致性, 響應RPC請求。官方建議是: 至少要運行3個或者3個以上的Consul Server。 多個server之中需要選舉一個leader, 這個選舉過程Consul基于Raft協(xié)議實現(xiàn). 多個Server節(jié)點上的Consul數(shù)據(jù)信息保持強一致性。 在局域網內與本地客戶端通訊,通過廣域網與其他數(shù)據(jù)中心通訊。Consul Client: 只維護自身的狀態(tài), 并將HTTP和DNS接口請求轉發(fā)給服務端。
4. Consul 支持多數(shù)據(jù)中心, 多個數(shù)據(jù)中心要求每個數(shù)據(jù)中心都要安裝一組Consul cluster,多個數(shù)據(jù)中心間基于gossip protocol協(xié)議來通訊, 使用Raft算法實現(xiàn)一致性
5.使用端口
? ?8300:TCP # Server RPC :agent server 使用的,用于處理其他agent發(fā)來的請求
? ?8301:TCP and UDP # Serf LAN: 所有的agent都要使用這個端口,用于處理LAN中的gossip,
? ?8302:TCP and UDP # Serf WAN:agent Server使用的,處理WAN中的與其他server的gossip
? ?8400:TCP # 所有agent都要使用的端口,用于處理從CLI來的RPC。
? ?8500:TCP # 所有agent都要使用的端口,用于處理HTTP API。
? ?8600:TCP and UDP # 用于處理 DNS 查詢。
Consul安裝
安裝環(huán)境:?mac:64bit(查看mac位數(shù):打開終端–>”uname -a”)
consul安裝很簡單,從官網 https://www.consul.io/downloads.html?進行下載就好,將consul_1.0.6_darwin_amd64.zip 文件解壓后執(zhí)行
sudo scp consul /usr/local/bin/
查看是否安裝成功
直接在安裝目錄下執(zhí)行consul命令即可,出現(xiàn)如下結果,表示安裝成功。

Consul 開發(fā)模式啟動
./consul agent -dev
-dev(該節(jié)點的啟動不能用于生產環(huán)境,因為該模式下不會持久化任何狀態(tài)),該啟動模式僅僅是為了快速便捷的啟動單節(jié)點consul? 該節(jié)點處于server模式? 該節(jié)點是leader? 該節(jié)點是一個健康節(jié)點?
Consul 集群方式啟動
Server (啟動3個節(jié)點)?
????????????consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=1 -client 0.0.0.0 -ui? ? ? (192.168.0.1)
? ? ? ? ? ??consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=2 -client 0.0.0.0 -ui? ? ? (192.168.0.2)
? ??????????consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=3 -client 0.0.0.0 -ui? ? ? (192.168.0.3)
Agent(啟動2個節(jié)點)??
? ??????????consul agent -data-dir /tmp/consul -node=4 -join 192.168.0.1
????????????consul agent -data-dir /tmp/consul -node=5 -join 192.168.0.1
命令的常用選項,如下:
? ? ? ? ?-data-dir :? 指定agent儲存狀態(tài)的數(shù)據(jù)目錄,必填選項對于server尤其重要,因為他們必須持久化集群的狀態(tài)
? ? ? ? ?-config-dir:指定service的配置文件和檢查定義所在的位置
? ? ? ? ?-dev:該參數(shù)配置下,不會有任何持久化操作,即不會有任何數(shù)據(jù)寫入到磁盤
? ? ? ? ?-node:指定節(jié)點在集群中的名稱,該名稱在集群中必須是唯一的(默認采用機器的host)
? ? ? ? ?-server?:指定節(jié)點為server,每個數(shù)據(jù)中心(DC)的server數(shù)推薦至少為1,至多為5
? ? ? ? ?-join?:將節(jié)點加入到集群
? ? ? ? ?-datacenter?:指定機器加入到哪一個數(shù)據(jù)中心中
? ? ? ? ?-client?:指定節(jié)點為client,指定客戶端接口的綁定地址,包括:HTTP、DNS、RPC,默認是127.0.0.1,只允許回環(huán)接口訪問
? ? ? ? ?-bootstrap-expect?:該命令通知consul server我們現(xiàn)在準備加入的server節(jié)點個數(shù),該參數(shù)是為了延遲日志復制的啟動直到我們指
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定數(shù)量的server節(jié)點成功的加入后啟動。
?常見問題:
? ? ? ? 1.啟動集群后,不能訪問UI管理界面,查看client 是否沒有配置,默認只能127.0.0.1?
? ? ? ? 2.如果機器有多個網卡的時候,需要用? -bind :綁定IP地址,才能正常啟動
? ? ? ? 3.部署在生產環(huán)境可以用??nohup consul agent -config-dir=/etc/consul.d > /data/consul/data/consul.log & 方式啟動
訪問集群
