Consul
consul是一種提供服務發現的工具,類似于zookeeper和etcd。但是它也有一些自己的一些特性:
1:service discovery:consul通過DNS或者HTTP接口使服務注冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣注冊。
2:health checking:健康檢測使consul可以快速的告警在叢集中的操作。和服務發現的內建,可以防止服務轉發到故障的服務上面。
3:key/value storage:一個用來存儲動态配置的系統。提供簡單的HTTP接口,可以在任何地方操作。
4:multi-datacenter:無需複雜的配置,即可支援任意數量的區域。
Consul的agent角色
Consul的agent分成Server和Client兩種角色,不論Server和Client都是Consul的節點,所有的服務都可以注冊到這些節點上,通過這些節點實作服務注冊資訊的共享。
Server和Client的差別在于,Server會把資訊持久化到本地儲存,便于故障後的恢複。而Client則是把服務資訊轉發到Server,本身并不做持久化。
Consul叢集的部署
這裡我們部署一個擁有3個Server的consul叢集,資訊如下:
node1:172.16.0.201
node2:172.16.0.122
node3:172.16.0.238
1:下載下傳consul軟體:https://www.consul.io/downloads.html
2:解壓并部署
# unzip consul_1.4.3_linux_amd64.zip
建立consul的相關目錄,并把解壓出來的程式檔案拷貝到目錄
# mkdir -p /usr/local/consul/{bin,conf,logs,data}
# cp -rp consul /usr/local/consul/bin/consul
3:建立consul配置檔案
這裡以172.16.0.201為例:(各節點基本相似,注意修改node_name與ip)
# vi /usr/local/consul/conf/consul.json
{
"datacenter": "Amazon_fra",
"data_dir": "/usr/local/consul/data/consul",
"log_level": "INFO",
"node_name": "SKUFRA000201",
"server": true,
"ui": true,
"bootstrap_expect": 2,
"bind_addr": "172.16.0.201",
"client_addr": "172.16.0.201",
"retry_join": ["172.16.0.238","172.16.0.122"],
"retry_interval": "10s",
"protocol": 3,
"raft_protocol": 3,
"enable_debug": false,
"rejoin_after_leave": true,
"enable_syslog": false
}
4:分别在各節點啟動consul
# nohup /usr/local/consul/bin/consul agent -config-file /usr/local/consul/conf/consul.json >> /usr/local/consul/logs/consul.log 2>&1 &
5:啟動完成後檢視叢集成員,以及叢集的leader:
# /usr/local/consul/bin/consul members -http-addr=http://172.16.0.201:8500
Node Address Status Type Build Protocol DC Segment
SKUFRA000122 172.16.0.122:8301 alive server 1.4.3 3 amazon_fra <all>
SKUFRA000201 172.16.0.201:8301 alive server 1.4.3 3 amazon_fra <all>
SKUFRA000238 172.16.0.238:8301 alive server 1.4.3 3 amazon_fra <all>
# curl http://172.16.0.201:8500/v1/status/leader
"172.16.0.201:8300"