mesos / marathon配置marathon-lb,web应用程序一个IP地址和URL

时间:2016-06-20 16:25:54

标签: web-applications mesos marathon

我想配置/连接marathon-lp,在mesos / maraton上运行简单的网页。

我想要获得的最终结果是在一个IP地址上运行的网页,另一个用户问题应该分发到下一个应用程序实例。

关于我的基础设施

  • 三个节点mesos-master和三个mesos-slave,
  • 在我的局域网基础设施中我有DNS ActiveDirectory域

现在我在mesos / marathon中运行示例www应用程序:

{
  "id": "/example-www/hello-world",
  "cmd": null,
  "cpus": 0.5,
  "mem": 64,
  "disk": 0,
  "instances": 4,
  "container": {
    "type": "DOCKER",
    "volumes": [],
    "docker": {
      "image": "tutum/hello-world",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 0,
          "servicePort": 10010,
          "protocol": "tcp",
          "labels": {}
        }
      ],
      "privileged": false,
      "parameters": [],
      "forcePullImage": true
    }
  },
  "healthChecks": [
    {
      "path": "/",
      "protocol": "HTTP",
      "portIndex": 0,
      "gracePeriodSeconds": 10,
      "intervalSeconds": 2,
      "timeoutSeconds": 10,
      "maxConsecutiveFailures": 10,
      "ignoreHttp1xx": false
    }
  ],
  "labels": {
    "HAPROXY_GROUP": "external",
    "HAPROXY_0_VHOST": "service.mesosphere.com",
    "HAPROXY_0_BIND_ADDR": "192.168.18.9",
    "HAPROXY_0_PORT": "80"
  },
  "portDefinitions": [
    {
      "port": 10010,
      "protocol": "tcp",
      "labels": {}
    }
  ]
}

此网络应用程序正常运行 - http://oi66.tinypic.com/27y8qco.jpg

现在我想要分配此Web应用程序IP地址,例如192.168.18.9。 该应用程序应在此地址IP处可用。但是,当我将此地址放在Web浏览器中并刷新页面时,我应该为所有应用程序实例分发(四个Web应用程序实例)。

我尝试配置marathon-lp,但我不知道自己做错了什么。在一个主节点(192.168.18.10)中,我安装了dcos和marathon-lb。

我的步骤:

  • 在mesos / marathon中运行Web应用程序

  • 在安装了dcos和marathon-lb的mesos-master节点(192.168.18.10)之一中创建带有内容的options.json文件

     {
     "marathon-lb":{
     "name":"example-www/lb",
     "haproxy-group":"example-www",
     "bind-http-https":false,
     "role":""
     }
    }
    

现在我在ssh console中练习

dcos package install --options=options.json marathon-lb

marathon-lp应用程序的状态is still Waiting - screen

我阅读了marathon-lp文档,我尝试修复它的方法很多,但每次marathon-lp应用程序都处于等待状态。

我做错了什么?也许在创建option.json文件时我没有写出必需的变量?或者这个文件可能是不必要的?

我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

根据您的描述,看看发生了什么有点困难。但是,我注意到您已将HAPROXY_0_BIND_ADDRHAPROXY_0_PORT设置为您的应用程序作为标签。最有可能的是,您试图强制HAProxy绑定到的IP实际上并不存在于您的代理(从属)上的任何接口上。

一般来说,您不会以这种方式强制HAProxy绑定到IP。除特殊情况外,您也不会使用HAPROXY_0_PORT

我建议您仔细阅读文档和这些博客文章,以了解如何使用MLB:

https://mesosphere.com/blog/2015/12/04/dcos-marathon-lb/ https://mesosphere.com/blog/2015/12/13/service-discovery-and-load-balancing-with-dcos-and-marathon-lb-part-2/

我还注意到屏幕截图的内容与您在marathon-lb options.json中描述的内容不符。因此,我必须假设您没有使用options.json启动MLB。如果您可以从Marathon获得实际的应用程序定义,那么它可能是显而易见的错误。我的第一个猜测是"bind-http-https":false"role":""值未设置。

祝你好运!