相关的介绍请移步官网或者Consul’s Github.
服务发现是Consul
的特性之一,利用这个特性,我们可以做一个简单的分布式服务监控系统.
模拟一个服务
用nodejs模拟一个最简单的服务node_server.js,内容如下,:
var http = require('http');
http.createServer(function(request, response) {
response.write('<html>');
response.write('<body>');
response.write('<h1>Hello, World!</h1>');
response.write('</body>');
response.write('</html>');
response.end();
}).listen(8090);
在Consul中定义服务
在/etc/consul.d/web.json
中定义服务如下:
{
"services":[
{
"name":"web",
"tags":["nodejsServer"],
"address":"127.0.0.1",
"port":8091,
"checks":[
{
"http":"http://localhost:8090/",
"interval":"10s"
}
]
}
]
}
启动Node模拟服务
node node_server.js
启动Consul Agent 集群
启动第一个节点:
consul agent \
-server \
-bootstrap-expect 2 \
-data-dir /tmp/consul \
-node=agent-one \
-bind=172.20.20.10 \
-config-dir /etc/consul.d/
启动第二个节点:
consul agent \
-data-dir ./ \
-node=agent-monitor \
-config-dir /etc/consul.d \
-bind 172.20.20.1 \
-server \
-join 172.20.20.10 \
-ui -bootstrap-expect 2
参数说明:
- -data-dir:数据文件目录,我指定的是执行命令的当前目录,可以任意指定;
- -node:分布式节点名称;
- -config-dir:配置文件名称,官方推荐的是
/etc/consul.d
; - -bind:绑定的ip,
- -server:表示当前Consul为一个Server,server替换成Client时表示客户端;
- -ui:启动时伴随启动ui界面,该界面可以通过:
localhost:8500/ui/
访问; - -bootstrap-expect:表示集群Server数量,启动时带上该参数,当有新的节点进入或者离开集群,会自动选举新的Leader;
- -join:加入指定的集群.
进入WEB管理页面:
localhost:8500/ui/
web页面可以查看当前所有的Service状态,当前所有的node集群等信息,如下图:
服务监控
现在停掉模拟服务node service.查看WEB界面如下:
可以看到,无法访问的service会用不同的颜色标记出来,同时其状态变为:critical
.也可以看到服务无法访问的原因.
通过上面的简单部署,就可以快速建一个简单的分布式服务监控系统了.当然,Consul的功能远不止这些.有机会在介绍其他的.