2017-06-14 29 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