HAProxy没有正确运行nodeJS API

时间:2015-06-06 17:26:11

标签: node.js docker haproxy docker-compose

我在EC2中运行coreOS。 我有一个nodeJS api docker镜像并在几个端口(25001和25002)中运行。当我向他们卷曲时,我看到了正确的反应。

我的目的是让HAProxy高于这些(运行于25000),这将在这两者之间实现负载平衡。 所以这是我做的步骤:

适用于HaProxy的DockerFile:

gparted

haproxy.cfg:

FROM haproxy:1.5
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

结果: 当我为他们工作的个人服务运行curl时--->

global
  # daemon
  maxconn 256
  log /dev/log local0

defaults
  mode http
  log global
  timeout connect 5000ms
  timeout client 50000ms
  timeout server 50000ms

frontend http-in
  bind *:25000
  default_backend node_api

backend node_api
    mode http
    balance roundrobin
    server api1 localhost:25001
    server api2 localhost:25002 

同样适用于25002 但是当我运行25000时,我收到如下的超时错误:

curl -i localhost:25001/ping
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 68
ETag: W/"44-351401c7"
Date: Sat, 06 Jun 2015 17:22:09 GMT
Connection: keep-alive
{"error":0,"msg":"loc receiver is alive and ready for data capture"}

我想知道我在这里做错了什么?任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:2)

当您告诉HAProxy后端服务器位于

server api1 localhost:25001

您要提供相对于 HAProxy容器的地址。但是你的Node服务器没有在那个容器上运行,所以localhost没有人。

你在这里有几个选择。

  • 您可以使用--link docker run选项将HAProxy连接到您的两个后端。
  • 您可以使用--net=host docker run选项,然后您的服务器可以在localhost找到对方
  • 您可以提供HAProxy作为后端地址的主机地址

第一个选项是容器y最多,但Docker桥接网络的性能在高负载时很差。第二种选择是好的,只要你不介意在网络上让你的容器突破它的容器。第三个是kludgey,但没有其他两个问题。

Docker's article on networking有更多详情。