Consul搭建分布式服务监控系统

2016-03-19 Lanffy 更多博文 » 博客 » GitHub »

Consul

原文链接 https://lanffy.github.io/2016/03/19/Consul%E6%90%AD%E5%BB%BA%E5%88%86%E5%B8%83%E5%BC%8F%E6%9C%8D%E5%8A%A1%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。



consul

相关的介绍请移步官网或者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

参数说明:

  1. -data-dir:数据文件目录,我指定的是执行命令的当前目录,可以任意指定;
  2. -node:分布式节点名称;
  3. -config-dir:配置文件名称,官方推荐的是/etc/consul.d;
  4. -bind:绑定的ip,
  5. -server:表示当前Consul为一个Server,server替换成Client时表示客户端;
  6. -ui:启动时伴随启动ui界面,该界面可以通过:localhost:8500/ui/访问;
  7. -bootstrap-expect:表示集群Server数量,启动时带上该参数,当有新的节点进入或者离开集群,会自动选举新的Leader;
  8. -join:加入指定的集群.

进入WEB管理页面:

localhost:8500/ui/

web页面可以查看当前所有的Service状态,当前所有的node集群等信息,如下图:

consul ui

服务监控

现在停掉模拟服务node service.查看WEB界面如下:

consul service error ui

可以看到,无法访问的service会用不同的颜色标记出来,同时其状态变为:critical.也可以看到服务无法访问的原因.

通过上面的简单部署,就可以快速建一个简单的分布式服务监控系统了.当然,Consul的功能远不止这些.有机会在介绍其他的.