1

好的,一周或更长时间后,我的 Aurora 集群开始运行。这并不容易,但是,我明白了。

我有一个简单的极光文件

# copy frontend into the local sandbox
clone_service = Process(
  name = 'copy service',
  cmdline = 'git clone https://citrullin@bitbucket.org/jakiku/frontend.git frontend')

install_npm_deps = Process(
  name = 'install npm dependencies',
  cmdline = 'cd frontend && npm install'
)

run_server = Process(
  name = 'run server',
  cmdline = 'node server.js'
)

# describe the task
run_frontend_service = SequentialTask(
  processes = [clone_service, install_npm_deps, run_server],
  resources = Resources(cpu = 1, ram = 128*MB, disk=64*MB))

jobs = [
  Service(cluster = 'mesos-fr',
      environment = 'devel',
      role = 'www-data',
      name = 'frontend_service',
      task = run_frontend_service)
]

没什么特别的。我只想定义我需要使用的端口。我检查了 Resources(port = 3000) 但它不起作用。它不是真正的资源,它是 mesos 中的一个属性

4

1 回答 1

0

一般来说,您希望避免使用 Aurora 作业的静态端口。由于任何数量的任务都可以登陆同一台主机,因此没有好的方法可以保证多个任务不会请求同一个端口,从而导致其中一个随机失败。

解决此问题的推荐方法是使用 aurora 配置中的 thermos 命名空间从 Mesos 请求端口。例如,如果您要执行以下操作:

run_server = Process(
  name = 'run server',
  cmdline = 'node server.js --port={{thermos.ports[http]}}'
)

然后 Aurora 在分配给主机时会为您的任务分配一个随机端口。

这引发的一个明显问题是,如果它在随机分配的端口上运行,那么其他事物如何找到您的服务,该端口会随着您的任务在主机之间移动而随时间而变化。答案是服务发现。如果您添加announce=Announcer()作业配置中,那么您的任务将被添加到 ServerSet 中,其他任务可以使用该服务器集来发现它并与之通信。

参考:

有关配置代理以提供端口的 Mesos 文档

有关在此处请求端口的 Aurora 文档

于 2016-10-17T03:20:13.663 回答