当我使用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虚拟机。
答案 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