2017-06-14 61 views
0

当我发布带有VIP的服务时,广告地址不会正确路由到通告的端口。例如,对于具有VIP一个MariaDB的加莱拉3节点群集服务指定为:DC/OS 1.9 VIP负载平衡不适用于广告端口

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

在服务页面的配置选项卡(以及根据该文档),则负载均衡的地址是:

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

我可以ping DNS名字就好了,但是......

当我尝试连接前端服务(Drupal7,WordPress的)消费这个负载均衡的地址:端口组合,会有无数连接失败和超时。这并不是说它永远不会起作用,而是它可以相当零散地工作,即使它是有效的。 Drupal7几乎立即死亡,并开始踢坏网关错误。

我已经通过实验发现,如果我指定HOSTPORT有问题的服务,负载均衡的地址,只要我使用hostPort价值,而不是广告的负载均衡服务端口按上述方式工作。在这种特殊情况下我指定的3310

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

一个hostPort那么,如果我在我的settings.php Drupal7主机端口值(3310)使用负载均衡的地址(mariadb-galera.marathon.l4lb.thisdcos.directory),前端连接和作品精细。

我注意到自定义应用程序也在DC/OS环境中连接到mongodb后端的类似行为......它似乎指定的负载均衡地址/端口组合无法可靠地工作......但如果您将hostPort值,它的确如此。

该文档明确指出:

地址和端口是负载为一对,而不是单独的平衡。

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

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

我一定在做错事,但我很茫然......任何帮助表示赞赏。

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

+0

说实话,这是更容易地通过仪表盘比CLI完成。 –

回答

0

VIP标签不应该以斜线开头:

"container": { 
    "portMappings": [ 
    { 
     "containerPort": 3306, 
     "name": "mariadb-galera", 
     "labels": { 
     "VIP_0": "mariadb-galera:3306" 
     } 
    } 
} 

应该作为<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 $? 

该命令应该返回0

当你不知道出口DNS名称,你可以列出所有的人都从任何DC/OS节点:

curl -s http://198.51.100.1:63053/v1/records | grep mariadb-galera