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软件:
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:8500Node Address Status Type Build Protocol DC SegmentSKUFRA000122 172.16.0.122:8301 alive server 1.4.3 3 amazon_fraSKUFRA000201 172.16.0.201:8301 alive server 1.4.3 3 amazon_fra SKUFRA000238 172.16.0.238:8301 alive server 1.4.3 3 amazon_fra # curl http://172.16.0.201:8500/v1/status/leader"172.16.0.201:8300"
可以看到三台节点的状态为alive。说明成员都已加入进群,并运行正常。通过http接口查看leader,可以发现当前集群中,172.16.0.201被选举为leader。
到此集群部署完成。