我想配置/连接marathon-lp,在mesos / maraton上运行简单的网页。
我想要获得的最终结果是在一个IP地址上运行的网页,另一个用户问题应该分发到下一个应用程序实例。
关于我的基础设施
现在我在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文件时我没有写出必需的变量?或者这个文件可能是不必要的?
我将非常感谢你的帮助。
答案 0 :(得分:1)
根据您的描述,看看发生了什么有点困难。但是,我注意到您已将HAPROXY_0_BIND_ADDR
和HAPROXY_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":""
值未设置。