Mesosの実装は2つのコンポーネントから成ります: アプリケーション マスターとワーカー。ワーカーは、アプリケーションマスタによってセットアップされた環境によってパラメータ化される単純なタスクマネージャです。Mesosの最も洗練されたコンポーネントの実装はアプリケーションマスターです。アプリケーションマスターは現在のところ以下のコンポーネントをホストします:
スケジューラは、Mesosと一緒にフレームワークを登録し、リソースをリクエストし、ワーカーノードを起動する責任があります。スケジューラは連続的にフレームワークが健全な状態にあることをMesosに報告する必要があります。クラスタの健全さを検証するためにスケジューラはspawnされたワーカーを監視し、必要であれば失敗したとしてマークをし、それらを再起動します。
FlinkのMesosスケジューラ自身は現在のところ高可用性はありません。しかし、状態についての全ての必要な情報をZookeeperに持続します (例えば、設定、ワーカーのリスト)。障害時には、新しいスケジューラを起動するために外部のシステムに依存します。スケジューラはMesosと一緒に再び登録し、調和フェーズに入ります。調和フェーズでは、スケジューラは実行中のワーカーノードのリストを受け取ります。それはZookeeperから回復された情報と適合し、障害時の前の状態でクラスタに戻すようにします。
artifactサーバはリソースをワーカーノードに提供する責任があります。リソースは、Flinkバイナリから始まり、共有される秘密鍵あるいは設定ファイルまでの何でもありえます。例えば、コンテナ化されていない環境では、アーティファクトサーバはFlinkバイナリを提供するでしょう。何のファイルが提供されるかはオーバーレイが使用する設定に依存します。
Mesos スケジューラは現在のところジョブマネージャーが備わっていますが、将来のバージョンではジョブマネージャーの非依存が始まるでしょう(FLIP-6を見てください)。提案された変更はジョブのサブミットと監視を中心となるだろう Dipsatcher コンポーネントも追加するでしょう。
開始スクリプトはアプリケーションマスターを設定および開始する方法を提供します。その先の全ての設定はワーカーノードによって継承されます。これは設定オーバーレイを使って行われます。設定のオーバーレイはワーカーノードに発送される環境変数および設定ファイルから設定を推測する方法を提供します。
この章は洗練されたアプリケーションレイヤーを持つMesos配布であるDC/OSを参照します。それはMarathonと一緒にあらかじめインストールされ、障害時にアプリケーションを管理しそれらの状態を維持するためのサービスです。
実行中の DC/OS クラスタが無い場合は、公式webサイト上のDC/OSをインストールする方法の説明に従ってください。
一旦DC/OS クラスタを手にすると、DC/OS Universeを通じてFlinkをインストールすることができます。検索プロンプトの中で、単純にFlinkを検索します。
注意: この執筆の時点では、FlinkはまだUniverseの中で利用可能ではありませんでした。しばらくは以下の代替策を使ってください:
開発Universeを追加
./dcos marathon app add https://raw.githubusercontent.com/mesosphere/dcos-flink-service/Makman2/quickstart/universe-server.json
ローカルUniverseリポジトリを追加
./dcos package repo add --index=0 dev-universe http://universe.marathon.mesos:8085/repo
Universeページあるいはdcos
コマンドを使ってFlinkをインストール:
./dcos package install flink
FinkジョブをFlinkクラスタにホストされたDC/OS上で実行するためには、まず起動されたジョブマネージャーのアドレスを見つける必要があります。ジョブマネージャーのアドレスはFlinkサービスを開き、Job Managerに行き、jobmanager.rpc.address
およびjobmanager.rpc.port
の下で指定されたアドレスを使って見つけることができます。これで、ジョブをクラスタにサブミットするためにこのアドレスを使うことができます
FLINK_HOME/bin/flink run -m address:port flink-job.jar
DC/OS無しにMesosを実行することもできます。
公式webサイト上のMesosのセットアップの方法の説明に従ってください。
インストレーションの後で、ファイルMESOS_HOME/etc/mesos/masters
と MESOS_HOME/etc/mesos/slaves
を作成することで、マスターのセットとエージェントのノードを設定することができます。これらのファイルは各行にそれぞれのコンポーネントが開始されるだろう(これらのノードへのSSHアクセスを仮定します)1つのホストを含みます。
次に、MESOS_HOME/etc/mesos/mesos-master-env.sh
を作成するか、同じディレクトリ内で見つかるテンプレートを使う必要があります。このファイル内で、以下を定義しなければなりません
export MESOS_work_dir=WORK_DIRECTORY
そして、以下をアンコメントすることをお勧めします
export MESOS_log_dir=LOGGING_DIRECTORY
Mesosエージェントを設定するために、MESOS_HOME/etc/mesos/mesos-agent-env.sh
を生成するか、同じディレクトリ内で見つかるテンプレートを使う必要があります。以下を設定しなければなりません
export MESOS_master=MASTER_HOSTNAME:MASTER_PORT
そして、以下をアンコメントします
export MESOS_log_dir=LOGGING_DIRECTORY
export MESOS_work_dir=WORK_DIRECTORY
Mesosを使ってJavaアプリケーションを実行するには、Linux上でMESOS_NATIVE_JAVA_LIBRARY=MESOS_HOME/lib/libmesos.so
をexportしなければなりません。Mac OS X 下では、MESOS_NATIVE_JAVA_LIBRARY=MESOS_HOME/lib/libmesos.dylib
をexportしなければなりません。
mesosクラスタを開始するには、配備スクリプトMESOS_HOME/sbin/mesos-start-cluster.sh
を使います。mesosクラスタを停止するには、配備スクリプトMESOS_HOME/sbin/mesos-stop-cluster.sh
を使います。配備スクリプトについての更なる情報はここで見つかります。
任意に、高可用性(HA)モードでFlinkを実行するために必要になるだろうMarasonをインストールするかもしれません。
全てのMesosマスターおよびエージェントノード上にFlinkをインストールするかもしれません。配備の間にFink webサイトからバイナリを取り出し、アプリケーションマスターを起動する前に独自の設定を適用することもできます。もっと容易で簡単に取り組みを指示する方法は、Flinkバイナリおよび設定を管理するためにDockerコンテナを使うことです。
これは以下の設定エントリを使って制御されます:
mesos.resourcemanager.tasks.container.type: mesos _or_ docker
‘docker’ に設定した場合、イメージ名を指定します:
mesos.resourcemanager.tasks.container.image.name: image_name
Flink配布物の/bin
ディレクトリ内で、Mesosクラスタ内のFlinkプロセスを管理する2つのスタートアップ スクリプトが見つかります:
mesos-appmaster.sh
これはMesosスケジューラを登録するMesosアプリケーションマスターを開始します。それはワーカーノードを開始する責任もあります。
mesos-taskmanager.sh
Mesosワーカープロセスのためのエントリポイント。明示的にこのスクリプトを開始する必要はありません。それは新しいタスクマネージャーを起動するためにMesosワーカーノードによって自動的に起動されます。
mesos-appmaster.sh
スクリプトを実行するには、flink-conf.yaml
の中でmesos.master
を定義するか、-Dmesos.master=...
を使ってそれをJavaプロセスに渡す必要があります。更に、mesos.initial-tasks
を使ってMesosによって開始されるタスクマネージャーの数を定義しなければなりません。この値もflink-conf.yaml
の中で定義されるか、Javaプロパティとして渡されます。
mesos-appmaster.sh
を実行する時、それはスクリプトを実行したマシーン上でジョブマネージャーを生成するでしょう。それとは対照的に、タスクマネージャーはMesosクラスタ内でMesosタスクとして実行されるでしょう。
Mesosアプリケーションマスターに渡されるJavaプロパティを使ってMesosアプリケーションを完全にパラメータ化することができます。これにより一般的なFlinkの設定パラメータも指定することができます。例えば:
bin/mesos-appmaster.sh \
-Dmesos.master=master.foobar.org:5050
-Djobmanager.heap.mb=1024 \
-Djobmanager.rpc.port=6123 \
-Djobmanager.web.port=8081 \
-Dmesos.initial-tasks=10 \
-Dmesos.resourcemanager.tasks.mem=4096 \
-Dtaskmanager.heap.mb=3500 \
-Dtaskmanager.numberOfTaskSlots=2 \
-Dparallelism.default=10
ノードあるいはプロセスの障害時にFlinkマスタープロセスの再起動の面倒を見るために、MerathonあるいはApache Auroraのようなサービスを実行する必要があるでしょう更に、Flinkドキュメント内の高可用性の章で説明されたように、Zookeeperが設定される必要があります。
タスクの和解が正しく動作するように、high-availability.zookeeper.path.mesos-workers
も有効なZookeeperパスに設定してください。
Marathon はbin/mesos-appmaster.sh
スクリプトを起動するようにセットアップされなければなりません。特に、それはFlinkクラスタのための全ての設定パラメータも調節する必要があります。
これはMarathonのための設定の例です:
{
"id": "flink",
"cmd": "$FLINK_HOME/bin/mesos-appmaster.sh -Djobmanager.heap.mb=1024 -Djobmanager.rpc.port=6123 -Djobmanager.web.port=8081 -Dmesos.initial-tasks=1 -Dmesos.resourcemanager.tasks.mem=1024 -Dtaskmanager.heap.mb=1024 -Dtaskmanager.numberOfTaskSlots=2 -Dparallelism.default=2 -Dmesos.resourcemanager.tasks.cpus=1",
"cpus": 1.0,
"mem": 1024
}
Marathonと一緒にFlinkを実行する場合、ジョブマネージャーを含むFlinkクラスタの全体はMesosクラスタ内のMesosタスクとして実行されるでしょう。
mesos.initial-tasks
: マスタが開始した時に起動する初期ワーカー (デフォルト: クラスタの起動時に指定されたワーカーの数)。
mesos.maximum-failed-tasks
: クラスタが故障するまでの失敗したワーカーの最大数 (デフォルト: 初期ワーカーの数)。この機能を無効にするために -1 を設定することができます。
mesos.master
: Mesos マスターのURL。値は以下の形式のうちの1つでなければなりません:
host:port
zk://host1:port1,host2:port2,.../path
zk://username:password@host1:port1,host2:port2,.../path
file:///path/to/file
mesos.failover-timeout
: Mesosスケジューラのためのフェイルオーバー タイムアウトの秒数。実行中のタスクはこの後で自動的にシャットダウンされます (デフォルト: 600)。
mesos.resourcemanager.artifactserver.port
: 使用するMesos アーティファクト サーバのポートを定義する設定パラメータ。ポートを0に設定するとOSが利用可能なポートを選択するでしょう。
mesos.resourcemanager.framework.name
: Mesos のフレームワーク名 (デフォルト: Flink)
mesos.resourcemanager.framework.role
: Mesos フレームワークのロール定義 (デフォルト: *)
high-availability.zookeeper.path.mesos-workers
: Mesosワーカーの情報を持続するためのZooKeeperのルートパス。
mesos.resourcemanager.framework.principal
: Mesos フレームワーク プリンシパル (デフォルト無し)
mesos.resourcemanager.framework.secret
: Mesos フレームワークの秘密鍵 (デフォルト無し)
mesos.resourcemanager.framework.user
: Mesos フレームワークのユーザ (デフォルト:””)
mesos.resourcemanager.artifactserver.ssl.enabled
: Flinkアーティファクト サーバのためのSSLを有効にします (デフォルト: true)。暗号化を有効にするためにsecurity.ssl.enabled
も true
に設定する必要があることに注意してください。
mesos.resourcemanager.tasks.mem
: Mesosワーカーに割り当てるメモリのMB数 (デフォルト: 1024)
mesos.resourcemanager.tasks.cpus
: Mesosワーカーに割り当てるCPU (デフォルト: 0.0)
mesos.resourcemanager.tasks.container.type
: 使用するコンテナ化の型: “mesos” あるいは “docker” (デフォルト: mesos);
mesos.resourcemanager.tasks.container.image.name
: コンテナに使用するイメージ名 (デフォルト無し)