mesos/marathon настроить marathon-lb, веб-приложение с одним IP-адресом и URL-адресом

Я хочу настроить/подключить marathon-lp с простой веб-страницей, работающей на mesos/maraton.

Конечным результатом, который я хочу получить, является веб-страница, работающая на одном IP-адресе, и другой вопрос пользователя должен быть распространен на следующий экземпляр приложения.

О моей инфраструктуре

  • трехузловой мезос-мастер и три мезос-ведомый,
  • в моей инфраструктуре локальной сети у меня есть домен DNS ActiveDirectory

Теперь я запускаю пример приложения www в mesos/marathon:

{
  "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

Теперь я хочу назначить этому веб-приложению IP-адрес, например, 192.168.18.9. Приложение должно быть доступно по этому адресу IP. Но когда я помещаю этот адрес в веб-браузер и обновляю страницу, я должен быть распределен для всех экземпляров приложения (четыре экземпляра веб-приложения).

Я пытаюсь настроить marathon-lp, но не знаю, что я делаю не так. На одном из главных узлов (192.168.18.10) я устанавливаю dcos и marathon-lb.

Мои шаги:

  • запуск веб-приложения в mesos/marathon

  • в одном из узлов mesos-master (192.168.18.10), где установлены dcos и marathon-lb, я создаю файл options.json с содержимым

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

Теперь, когда я тренируюсь в консоли ssh

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

Статус приложения marathon-lp все еще ожидает — экран

Я читал документацию marathon-lp, пытался исправить ее разными способами, но каждый раз приложение marathon-lp находится в состоянии ожидания.

Что я делаю неправильно? Может быть, я не пишу требуемую переменную при создании файла option.json? А может этот файл не нужен?

Я буду очень благодарен за вашу помощь.


person Arek    schedule 20.06.2016    source источник


Ответы (1)


Судя по вашему описанию, немного сложно понять, что происходит. Однако я заметил, что в вашем приложении в качестве меток установлены HAPROXY_0_BIND_ADDR и HAPROXY_0_PORT. Скорее всего, IP-адрес, к которому вы пытаетесь принудительно привязать HAProxy, на самом деле не существует ни на одном интерфейсе ваших агентов (ведомых устройств).

Вообще говоря, вы не заставите 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/

Я также заметил, что содержимое вашего скриншота не соответствует тому, что вы описали в options.json для marathon-lb. Из-за этого я должен предположить, что вы не запускали MLB с этим options.json. Если бы вы могли получить фактическое определение приложения от Marathon, возможно, было бы очевидно, что не так. Мое первое предположение состоит в том, что значения "bind-http-https":false и "role":"" не установлены.

Удачи!

person Brenden Matthews    schedule 21.06.2016