如何使用 haproxy 排除节点应用程序的故障?

如何使用 haproxy 排除节点应用程序的故障?

我在 Ubuntu Trusty MAAS 设备中安装了几乎可以正常运行的节点应用程序,并使用 Juju 在私有网络(无需发布)上进行安装。我使用的是 juju-gui,因此能够导出此 bundle.yaml 文件内容:

series: trusty
services: 
  keystone: 
    charm: "cs:trusty/keystone-29"
    num_units: 1
    options: 
      "admin-password": "redacted"
    to: 
      - "lxc:"
  ntp: 
    charm: "cs:trusty/ntp-11"
  mongodb: 
    charm: "cs:trusty/mongodb-26"
    num_units: 1
    to: 
      - "lxc:"
  docs: 
    charm: "cs:~justin-fathomdb/trusty/node-app-0"
    num_units: 1
    options: 
      app_name: docs
      app_url: "http://github.com/redacted/redacted.git"
    to: 
      - "0"
  haproxy: 
    charm: "cs:trusty/haproxy-13"
    num_units: 1
    to: 
      - "1"
relations: 
  - - "ntp:juju-info"
    - "keystone:juju-info"
  - - "docs:mongodb"
    - "mongodb:database"
  - - "docs:website"
    - "haproxy:reverseproxy"
machines: 
  "0": 
    series: trusty
    constraints: "arch=amd64 cpu-cores=2 mem=2048"
  "1": 
    series: trusty
    constraints: "arch=amd64 cpu-cores=2 mem=4096"
  undefined: 
    series: trusty
    constraints: "arch=amd64 cpu-cores=2 mem=4096"

看起来 haproxy 已成功部署到节点 delta.maas,并且 juju status 显示它在端口 80 上。我可以通过 ssh 进入此节点,并看到 /var/log/juju/unit-haproxy-2.log 似乎运行正常。文件 /etc/haproxy/haproxy.cfg 表明它知道 docs 节点:

backend haproxy_service
  balance leastconn
  cookie SRVNAME insert
  server docs-2-8000 10.100.100.10:8000 maxconn 100 cookie S0 check

看起来 docs(node-app)已部署到节点 alpha.maas,juju status 显示它在端口 8000 上。我可以通过 ssh 进入此节点,看到 /var/log/juju/unit-docs-2.log 似乎运行正常。它引入了 github 映像,运行了 npm install,找到了 mongodb。在此节点上运行“ps aux|grep node”会得到以下结果:

ubuntu   22954  0.0  0.4 657432  9600 ?        Rsl  21:28   0:00 node ./bin/www

但是,运行“netstat -nat|grep LISTEN”似乎表明该节点未绑定:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

根据文档,我在应用程序的根目录中使用 Procfile:

web: node ./bin/www

...bin/www 文件以此开头...

#!/usr/bin/env node
var app = require('../app');
var debug = require('debug')('docs:server');
var http = require('http');
var config = require('../config/config');
var port = normalizePort(process.env.port);
app.set('port', process.env.port);
...

令人恼火的是,node-app Juju charms 上的配置更改钩子几乎总是在 github 步骤失败,假装找不到它。幸运的是,安装钩子成功了。所以感觉我需要删除单元/添加单元才能对应用程序本身进行任何更改,甚至为了排除故障。

尝试 haproxy IP 地址会导致 503 服务不可用错误。从浏览器尝试 docs 节点本身的 8000 端口不会得到任何答案,因为——正如我之前提到的——它没有监听任何东西。

对此有什么想法吗?

相关内容