大纲:
关于consul
consul的架构
部署服务器分配
安装部署
启动agent
启动consul server
启动consul client
把client 节点加入consul 集群
查看集群成员
查看集群信息
注册服务
更新服务
更新服务
查询服务
启用webui(尚未成功)
关于consul
consul是一个开源工具,它提供了服务发现,服务检测,健康检查的功能。支持跨机房的数据中心之间的基础设施服务的发现和检测。它安装简单,开箱即用。
consul的架构
consul的架构如下如图:(来自官方文档)
Consul是一个分布式、高可用的系统。为Consul提供服务的每一个节点都运行一个Consul Agent。作为一个Agent不需要提供服务发现或者键值数据的存取,Agent负责检查节点上的服务及节点本身的健康状况。
Agent与一个或多个Consul Server进行通信,Consul Server会进行数据的存储,多个Server之间会进行复制。Server们会选举一个Leader。基础设施中需要发现其它服务或节点的组件可以查询任何一个Consul Server或者Consul Agent。Agent会自动向Server进行查询。每个数据中心运行一个Consul Server的集群。当作出一个跨数据中心的服务发现或配置请求时,本地的Consul Server直接将请求发送到远程数据中心并返回结果。
部署服务器分配
节点名称 | IP地址 | 类型 |
---|---|---|
consul-server01 | 192.168.209.131 | Server |
consul-server02 | 192.168.209.134 | Server |
consul-server03 | 192.168.209.135 | Server |
consul-client01 | 192.168.209.132 | Client |
consul-client02 | 192.168.209.133 | Client |
实际环境中可根据需要来增减server节点和client节点。
安装部署
在所有服务节点和client节点上面建立consul服务的数据目录和配置文件目录.
mkdir -p /tmp/consul #consul服务的数据目录
mkdir -p /etc/consul.d #consul服务的配置文件目录
从官方地址下载consul软件包:
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip
consul的安装包是个二进制文件,解压之后放到指定目录会即可使用。如果没有放在PATH环境变量指定的路径下,要在PATH环境变量中添加。
安装验证
consul -v
启动agent
consul安装完成之后,必须要启动agent, agent运行集群的所有节点上面,它有两种server和client两种运行模式。如果以server模式启动,则该节点作为服务端,如果以client模式启动,则该节点作为客户节点,
consul集群对客户节点没有限制,对服务节点有限制,至少三个或者以上,一般3至五个节点。
启动服务节点
consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server01 -bind=192.168.209.131 -config-dir=/etc/consul.d/
consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server02 -bind=192.168.209.134 -config-dir=/etc/consul.d/
consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server03 -bind=192.168.209.135 -config-dir=/etc/consul.d/
consul命令以及参数说明(详情请参考官方文档):
agent: 该指令用来运行agent服务,维护成员的重要信息,运行检查,服务查询,服务宣布。
-server: 以服务模式启动
-ui: 启用web UI界面。
-rejoin: 如果节点离开集群,尝试重新连接引入。
-bootstrap-expect:指定数据中心里服务节点的数量,当服务节点的数量少于这个值的时候,集群就会失败。
-data-dir:指定consul服务的状态以及相关数据的存储目录。
-node: 指定节点名称,不指定默认是主机名。
-bind: 指定consul服务绑定的IP地址。
-config-dir:指定consul服务的配置文件目录。
启动客户节点
consul agent -data-dir=/tmp/consul -node=consul-client01 -bind=192.168.209.132 -enable-script-checks=true -config-dir=/etc/consul.d
consul agent -data-dir=/tmp/consul -node=consul-client02 -bind=192.168.209.133 -enable-script-checks=true -config-dir=/etc/consul.d
不指定服务模式的标识(-server,-client)的情况下,是以client模式启动的。
把客户端节点加入集群(在所有服务节点执行)
consul join consul-client01 consul-client02
实际环境中可根据client节点的数量,在命令consul join之后增减节点名称。
查看集群成员
consul members
查看集群信息
consul info
注册服务:
在consul集群中注册服务有两种方式,一种是通过编写服务的配置文件,一般是json格式的。另一种就是通过HTTP API注册。
以json格式的配置文件注册服务:
例如:
echo ‘{"service": {"name": "web", "tags": ["rails"], "port": 80}}‘
/etc/consul.d/web.json
这里以json格式的形式把服务的相关信息写入web.json的文件,服务名称为:web, 标签名称为:rails, 端口号:80
以HTTP API的形式注册服务:
curl -X PUT -d ‘{"Datacenter": "dc1", "Node": "consul-client01", "Address": "192.168.209.132", "Service": {"name": "tomcat", "tags": ["tomcat"], "Port": 8080}}‘ http://127.0.0.1:8500/v1/catalog/register
更新服务
在服务节点执行: consul reload
查询服务
在consul集群中查询服务可以使用DNS和HTTP API查询。
使用DNS查询:
在DNS API中,服务的DNS名字是 NAME.service.consul. 虽然是可配置的,但默认的所有DNS名字会都在consul命名空间下.这个子域告诉Consul,我们在查询服务,NAME则是服务的名称.
对于我们上面注册的Web服务.它的域名是 web.service.consul :
dig @DNS服务器地址 -p DNS服务器地址端口号 服务域名
例如查询上面注册的服务:
dig @127.0.0.1 -p 8600 web.service.consul
在以上的结果中,名称为web的服务在192.168.209.132,192.168.209.133,192.168.209.131都注册。
使用HTTP API查询
curl -s 127.0.0.1:8500/v1/catalog/service/web | python -m json.tool
启用consul web ui
使用如下命令:
Server agent -server -ui
添加了-ui参数后http服务和8500端口都正常,但是无法访问,正在研究中,待后续解决。
原文地址:http://blog.51cto.com/zjhrunnnnggo/2332938