Aurora 文件定义主机端口

Aurora file define host port

好的,一周或更长时间后,我的 Aurora Cluster 是 运行。这并不是一件容易的事,但是,尽管如此,我还是做到了。

我有一个简单的极光文件

# 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

中的一个属性

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

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

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

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

这引发的一个明显问题是,如果它 运行 在一个随机分配的端口上,其他东西如何找到您的服务,随着您的任务在主机之间移动,该端口可能会随着时间而改变。答案是 service discovery. If you add announce=Announcer() to your job configuration,然后您的任务将被添加到 ServerSet,其他任务可以使用它来发现它并与之通信。

参考:

Mesos documentation on configuring agents to offer ports.

Aurora documentation on requesting ports here.