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"
可以看到三臺節點的狀態爲alive。說明成員都已加入進羣,並運行正常。通過http接口查看leader,可以發現當前集羣中,172.16.0.201被選舉爲leader。
到此集羣部署完成。