DC / OS 1.9 VIP负载平衡不适用于广告端口

时间:2017-06-14 18:52:15

标签: dns marathon dcos

当我使用VIP发布服务时,通告的地址无法正确路由到广告端口。例如,对于具有指定为VIP的MariaDB Galera 3节点群集服务:

      "labels": {
        "VIP_0": "/mariadb-galera:3306"
      }

在服务页面的配置选项卡上(根据文档),负载平衡地址为:

mariadb-galera.marathon.l4lb.thisdcos.directory:3306

我可以ping DNS名称,但是......

当我尝试连接前端服务(Drupal7,wordpress)以使用此负载平衡地址:端口组合时,会出现大量连接失败和超时。并不是说它永远不会起作用,但如果有的话,它会非常零星地运作。 Drupal7几乎立即死亡,并开始解决Bad Gateway错误。

我通过实验发现,如果我为相关服务指定 hostPort ,只要我使用hostPort值,负载平衡地址就会起作用,而不是如上所述的广告负载均衡服务端口。在这个特定情况下,我指定了hostPort为3310。

  "network":"USER",
  "portMappings": [
    {
      "containerPort": 3306,
      "hostPort": 3310,
      "servicePort": 10000,
      "name": "mariadb-galera",
      "labels": {
        "VIP_0": "/mariadb-galera:3306"
      }
    }

然后,如果我在Drupal7 settings.php中使用负载平衡地址(mariadb-galera.marathon.l4lb.thisdcos.directory)和主机端口值(3310),则前端连接并正常工作。

我注意到在DC / OS环境中连接到mongodb后端的自定义应用程序的类似行为......似乎指定的负载平衡地址/端口组合永远不可靠...但是如果替换hostPort值,确实如此。

文档明确指出:

地址和端口是一对负载均衡而不是单独负载。

(来自https://docs.mesosphere.com/1.9/networking/dns-overview/

但是当我指定VIP指定端口时,我无法有效连接。然而,当我使用hostPort时它会工作(除非我在服务定义json中指定一个特定的hostPort,否则它根本不起作用)。这种方法实际上是负载平衡还是根据文档中的措辞对我提出的问题。

我一定是做错了什么,但我感到很茫然......任何帮助都表示赞赏。

我的群集节点是VMWare虚拟机。

1 个答案:

答案 0 :(得分:0)

VIP标签不应以斜线开头:

"container": {
  "portMappings": [
    {
      "containerPort": 3306,
      "name": "mariadb-galera",
      "labels": {
        "VIP_0": "mariadb-galera:3306"
      }
    }
}
在这种情况下,

应该以{{1​​}}提供:

<VIP label>.marathon.l4lb.thisdcos.directory:<VIP port>

您可以使用mariadb-galera.marathon.l4lb.thisdcos.directory:3306 测试它:

nc

该命令应返回nc -z -w5 mariadb-galera.marathon.l4lb.thisdcos.directory 3306; echo $?

如果您不确定导出的DNS名称,可以从任何DC / OS节点列出所有这些名称:

0