Mesos 设置

背景

Mesos实现包含两个组件:Application Master和Worker。Worker是简单的TaskManagers,由应用程序设置的环境进行参数化。Mesos实现中最复杂的组件是应用程序主机。应用程序主机当前托管以下组件:

Mesos 调度程序

调度程序负责向Mesos注册,请求资源和启动工作节点。调度程序不断向Mesos报告以确保框架处于正常状态。为了验证群集的运行状况,调度程序监视生成的worker并将其标记为失败,并在必要时重新启动它们。

Flink的Mesos调度程序本身目前不具备高可用性。但是,它会在Zookeeper中保存有关其状态(例如配置,工作者列表)的所有必要信息。在出现故障时,它依赖于外部系统来启动新的调度程序。然后,调度程序将再次向Mesos注册并完成协调阶段。在协调阶段,调度程序接收正在运行的工作程序节点的列表。它将这些与Zookeeper中恢复的信息进行匹配,并确保在故障之前将群集恢复到状态。

工作服务器

工件服务器负责向工作节点提供资源。资源可以是从Flink二进制文件或者是配置文件。例如,在非容器化环境中,工件服务器将提供Flink二进制文件和需要依赖的文件。

Flink’s 的调度程序和web页面

Flink提供了Web界面为监视,为作业提交和监控交互提供了便利(参阅 FLIP-6).

启动脚本和配置覆盖

启动脚本提供了一种配置和启动应用程序主机的方法。然后,工作节点继承所有的配置。这是使用配置覆盖来实现的。配置覆盖提供了一种从环境变量和配置文件推断配置的方法,这些配置文件将发送到工作节点。

DC/OS

本文涉及到 DC/OS 它是具有复杂应用程序管理层的Mesos分发。它预装了Marathon,这是一种监控应用程序并在发生故障时保持其状态的服务。

如果没有正在运行的DC/OS集群,可以参考 如何安装DC/OS.

安装DC / OS群集后,可以通过DC / OS Universe安装Flink。在搜索提示中,只需搜索Flink。或者,可以使用DC / OS CLI:

  1. dcos package install flink

详细信息请参阅 DC/OS 示例.

无 DC/OS的Mesos

也没在没有DC/OS的环境中运行 Mesos。

安装 Mesos

参阅 MEsos安装指南来完成安装。

安装完成后,需要创建 MESOS_HOME/etc/mesos/mastersMESOS_HOME/etc/mesos/slaves文件来配置主机诶单和从节点。文件中每行包含一个主机名(要求可以通过ssh访问到这些节点)。

接下来需要创建 MESOS_HOME/etc/mesos/mesos-master-env.sh 文件,或者在同目录下找到模板,修改模板内容。以下内容是必须的

  1. export MESOS_work_dir=WORK_DIRECTORY

并建议取消注释

  1. export MESOS_log_dir=LOGGING_DIRECTORY

配置Mesos代理,需要创建 MESOS_HOME/etc/mesos/mesos-agent-env.sh 文件,或在同目录下修改模板。

  1. export MESOS_master=MASTER_HOSTNAME:MASTER_PORT

并取消注释

  1. export MESOS_log_dir=LOGGING_DIRECTORY
  2. export MESOS_work_dir=WORK_DIRECTORY

Mesos 类库

In order to run Java applications with Mesos you have to export MESOS_NATIVE_JAVA_LIBRARY=MESOS_HOME/lib/libmesos.so on Linux. Under Mac OS X you have to export MESOS_NATIVE_JAVA_LIBRARY=MESOS_HOME/lib/libmesos.dylib.

Deploying Mesos

要使用Mesos运行Java应用程序, 请使用脚本 MESOS_HOME/sbin/mesos-start-cluster.sh. 停止Mesost则执行 MESOS_HOME/sbin/mesos-stop-cluster.sh. 更多关于部署脚本可以参阅部署脚本.

安装 Marathon

或者可以安装Marathon参阅 Marathon安装 即可开启高可用,参阅 高可用模式.

预安装Flink 与 Docker/Mesos 容器

可以在所有Mesos主节点和代理节点上安装Flink。或者在部署期间从Flink网站拉取二进制文件,并在启动应用程序主服务器之前应用自定义配置。使用Docker容器来管理Flink二进制文件和配置会是个更方便,更易于维护的方法。

通过以下配置控制的:

  1. mesos.resourcemanager.tasks.container.type: mesos _or_ docker

如果设置为 docker,需要指定镜像名称

  1. mesos.resourcemanager.tasks.container.image.name: image_name

Standalone

Flink的 /bin 目录下可以找到两个脚本用来管理Mesos集群中的Flink进程

  1. mesos-appmaster.sh 启动Mesos master,负责注册Mesos调度程序,还负责启动工作节点。

  2. mesos-taskmanager.sh Mesos工作进程的入口点。不需要执行此脚本。它由Mesos工作节点自动启动以启动新的TaskManager。

执行 mesos-appmaster.sh 脚本需要在flink-conf.yaml中定义 mesos.master或者通过 -Dmesos.master=… 传递给Java进程

执行mesos-appmaster.sh时,它将在执行脚本的机器上创建一个JobManager。TaskManager将作为Mesos集群中的Mesos任务运行。

基本配置

可以通过传递给Mesos应用程序主机的Java属性完全参数化Mesos应用程序。还允许指定常规Flink配置参数。例如

  1. bin/mesos-appmaster.sh \
  2. -Dmesos.master=master.foobar.org:5050 \
  3. -Djobmanager.heap.mb=1024 \
  4. -Djobmanager.rpc.port=6123 \
  5. -Drest.port=8081 \
  6. -Dmesos.resourcemanager.tasks.mem=4096 \
  7. -Dtaskmanager.heap.mb=3500 \
  8. -Dtaskmanager.numberOfTaskSlots=2 \
  9. -Dparallelism.default=10

Note: 如果Flink处于 legacy mode, 还需要定义TaskManager数量 参阅mesos.initial-tasks.

高可用

还需要运行Marathon或Apache Aurora之类的服务,来确保节点或进程出现故障时重新启动Flink主进程。此外还需要一些额外的Zookeeper配置,参阅 Flink 文档-高可用.

Marathon

执行 bin/mesos-appmaster.sh 脚本来启动Marathon,文件内还包含了一些Flink集群的配置参数。

以下是Marathon的示例配置:

  1. {
  2. "id": "flink",
  3. "cmd": "$FLINK_HOME/bin/mesos-appmaster.sh -Djobmanager.heap.mb=1024 -Djobmanager.rpc.port=6123 -Drest.port=8081 -Dmesos.resourcemanager.tasks.mem=1024 -Dtaskmanager.heap.mb=1024 -Dtaskmanager.numberOfTaskSlots=2 -Dparallelism.default=2 -Dmesos.resourcemanager.tasks.cpus=1",
  4. "cpus": 1.0,
  5. "mem": 1024
  6. }

使用Marathon运行Flink时,包含JobManager的整个Flink集群将作为Mesos集群中的Mesos任务运行。

配置参数

有关Mesos特定配置的列表,请参阅 Mesos配置