Consul 簡(jiǎn)化了分布式環(huán)境中的服務(wù)的注冊(cè)和發(fā)現(xiàn)流程,通過(guò) HTTP 或者 DNS 接口發(fā)現(xiàn)。支持外部 SaaS 提供者等。
consul提供的一些關(guān)鍵特性:
service discovery:consul通過(guò)DNS或者HTTP接口使服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)變的很容易,一些外部服務(wù),例如saas提供的也可以一樣注冊(cè)。
health checking:健康檢測(cè)使consul可以快速的告警在集群中的操作。和服務(wù)發(fā)現(xiàn)的集成,可以防止服務(wù)轉(zhuǎn)發(fā)到故障的服務(wù)上面。
key/value storage:一個(gè)用來(lái)存儲(chǔ)動(dòng)態(tài)配置的系統(tǒng)。提供簡(jiǎn)單的HTTP接口,可以在任何地方操作。
multi-datacenter:無(wú)需復(fù)雜的配置,即可支持任意數(shù)量的區(qū)域(數(shù)據(jù)中心)。
官方網(wǎng)站:https://www.consul.io/
系統(tǒng)環(huán)境:CentOS release 6.5 (Final) x64
consul最新版的下載地址
https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip
下載解壓,里面只有一個(gè)consul可執(zhí)行文件,執(zhí)行
[root@localhost consul-0.6.4]# consul
usage: consul [--version] [--help] <command> [<args>]
Available commands are:
agent Runs a Consul agent
configtest Validate config file
event Fire a new event
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info Provides debugging information for operators
join Tell Consul agent to join cluster
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
leave Gracefully leaves the Consul cluster and shuts down
lock Execute a command holding a lock
maint Controls node or service maintenance mode
members Lists the members of a Consul cluster
monitor Stream logs from a Consul agent
reload Triggers the agent to reload configuration files
rtt Estimates network round trip time between nodes
version Prints the Consul version
watch Watch for changes in Consul
其中,最常用到的命令是agent
輸入consul agent -h 可以查看幫助。其中常見(jiàn)的參數(shù)解釋如下:
-advertise:通知展現(xiàn)地址用來(lái)改變我們給集群中的其他節(jié)點(diǎn)展現(xiàn)的地址,一般情況下-bind地址就是展現(xiàn)地址
-bootstrap:用來(lái)控制一個(gè)server是否在bootstrap模式,在一個(gè)datacenter中只能有一個(gè)server處于bootstrap模式,當(dāng)一個(gè)server處于bootstrap模式時(shí),可以自己選舉為raft leader。
-bootstrap-expect:在一個(gè)datacenter中期望提供的server節(jié)點(diǎn)數(shù)目,當(dāng)該值提供的時(shí)候,consul一直等到達(dá)到指定sever數(shù)目的時(shí)候才會(huì)引導(dǎo)整個(gè)集群,該標(biāo)記不能和bootstrap公用
-bind:該地址用來(lái)在集群內(nèi)部的通訊,集群內(nèi)的所有節(jié)點(diǎn)到地址都必須是可達(dá)的,默認(rèn)是0.0.0.0
-client:consul綁定在哪個(gè)client地址上,這個(gè)地址提供HTTP、DNS、RPC等服務(wù),默認(rèn)是127.0.0.1
-config-file:明確的指定要加載哪個(gè)配置文件
-config-dir:配置文件目錄,里面所有以.json結(jié)尾的文件都會(huì)被加載
-data-dir:提供一個(gè)目錄用來(lái)存放agent的狀態(tài),所有的agent允許都需要該目錄,該目錄必須是穩(wěn)定的,系統(tǒng)重啟后都繼續(xù)存在
-dc:該標(biāo)記控制agent允許的datacenter的名稱,默認(rèn)是dc1
-encrypt:指定secret key,使consul在通訊時(shí)進(jìn)行加密,key可以通過(guò)consul keygen生成,同一個(gè)集群中的節(jié)點(diǎn)必須使用相同的key
-join:加入一個(gè)已經(jīng)啟動(dòng)的agent的ip地址,可以多次指定多個(gè)agent的地址。如果consul不能加入任何指定的地址中,則agent會(huì)啟動(dòng)失敗,默認(rèn)agent啟動(dòng)時(shí)不會(huì)加入任何節(jié)點(diǎn)。
-retry-join:和join類似,但是允許你在第一次失敗后進(jìn)行嘗試。
-retry-interval:兩次join之間的時(shí)間間隔,默認(rèn)是30s
-retry-max:嘗試重復(fù)join的次數(shù),默認(rèn)是0,也就是無(wú)限次嘗試
-log-level:consul agent啟動(dòng)后顯示的日志信息級(jí)別。默認(rèn)是info,可選:trace、debug、info、warn、err。
-node:節(jié)點(diǎn)在集群中的名稱,在一個(gè)集群中必須是唯一的,默認(rèn)是該節(jié)點(diǎn)的主機(jī)名
-protocol:consul使用的協(xié)議版本
-rejoin:使consul忽略先前的離開(kāi),在再次啟動(dòng)后仍舊嘗試加入集群中。
-server:定義agent運(yùn)行在server模式,每個(gè)集群至少有一個(gè)server,建議每個(gè)集群的server不要超過(guò)5個(gè)
-syslog:開(kāi)啟系統(tǒng)日志功能,只在linux/osx上生效
-ui-dir: 提供存放web ui資源的路徑,該目錄必須是可讀的
-pid-file: 提供一個(gè)路徑來(lái)存放pid文件,可以使用該文件進(jìn)行SIGINT/SIGHUP(關(guān)閉/更新)agent
要想利用consul提供的服務(wù)實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn),我們需要建立consul cluster。
在consul方案中,每個(gè)提供服務(wù)的節(jié)點(diǎn)上都要部署和運(yùn)行consul的agent,所有運(yùn)行consul agent節(jié)點(diǎn)的集合構(gòu)成consul cluster。
consul agent有兩種運(yùn)行模式:server和client。這里的server和client只是consul集群層面的區(qū)分,與搭建在cluster之上的應(yīng)用服務(wù)無(wú)關(guān)。
以server模式運(yùn)行的consul agent節(jié)點(diǎn)用于維護(hù)consul集群的狀態(tài),
官方建議每個(gè)consul cluster至少有3個(gè)或以上的運(yùn)行在server mode的agent,client節(jié)點(diǎn)不限。
我們這里以安裝三個(gè)節(jié)點(diǎn)為例,環(huán)境配置如下
192.168.1.100 以server模式運(yùn)行
192.168.1.101,192.168.1.102 以client模式運(yùn)行
一:配置consul
把上面下載的文件解壓,并把consul拷貝到/opt/consul目錄,然后把/opt/consul目錄加入到環(huán)境變量(三個(gè)節(jié)點(diǎn)依次配置)
二:運(yùn)行
1:在192.168.1.100節(jié)點(diǎn)上面進(jìn)行
cd /opt/consul
mkdir data
consul agent -server -bootstrap -bind=0.0.0.0 -client=192.168.1.100 -data-dir=data -ui -node=192.168.1.100
這樣,就啟動(dòng)了一個(gè)節(jié)點(diǎn)
2:在192.168.1.101節(jié)點(diǎn)上面進(jìn)行
cd /opt/consul
mkdir data
consul agent -bind=0.0.0.0 -client=192.168.1.101 -data-dir=data -node=192.168.1.101 -join=192.168.1.100
3:在192.168.1.102節(jié)點(diǎn)上面進(jìn)行
cd /opt/consul
mkdir data
consul agent -bind=0.0.0.0 -client=192.168.1.102 -data-dir=data -node=192.168.1.102 -join=192.168.1.100
全部節(jié)點(diǎn)啟動(dòng)完之后
訪問(wèn)http://192.168.1.100:8500/ 即可查看consul集群的管理頁(yè)面
在任意節(jié)點(diǎn)執(zhí)行consul members 即可查看集群節(jié)點(diǎn)信息
這里在192.168.1.100節(jié)點(diǎn)執(zhí)行
[root@localhost consul-0.6.4]# consul members -rpc-addr=192.168.1.100:8400
Node Address Status Type Build Protocol DC
192.168.1.101 192.168.1.101:8301 alive client 0.6.4 2 dc1
192.168.1.102 192.168.1.102:8301 alive client 0.6.4 2 dc1
192.168.1.100 192.168.1.100:8301 alive server 0.6.4 2 dc1
關(guān)閉節(jié)點(diǎn)
consul leave -rpc-addr=192.168.1.100:8400
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。