JobManager高可用(HA)官网翻译

原文:
https://ci.apache.org/projects/flink/flink-docs-release-1.9/zh/ops/jobmanager_high_availability.html#overview

JobManager高可用(HA)

概述

JobManager协调每个Flink部署。他负责调度和资源管理。
默认情况下,每个Flink cluster有一个JobManager。这将会导致单点故障(SPOF):在JobManager宕机的情况下,没有新的程序可以被提交且正在运行的程序将会失败。
通过JobManager的高可用,你可以从JobManager的失败状态恢复,因此而解决SPOF问题。可以在standalone和YARN两种环境下部署高可用。

standalone cluster高可用

standalone cluster中JobManager的高可用大致方案为在任一时刻有一个leading JobManager,多个standby JobManager。当leader JobManager宕机,standby manager将会重新选举。这就保证了不会出现单点故障,并且一旦备用JobManager接管了工作,程序就可以继续运行。备用和主JobManager实例之间没有明显的区别。每个JobManager可以充当主服务器或备用服务器。
举个例子,考虑在三个JobManager实例的情况下:
在这里插入图片描述

配置

为了激活JobManager的高可用,用户需要设置high-availability 模式为zookeeper,配置一个zookeeper选举人数以及在masters文件中配置所有的JobManager地址以及他们的web ui端口。
Flink通过zookeeper保证所有运行的JobManager实例之间的分布式协作。Zookeeper是一个独立的服务,通过leader选举以及轻量级状态存储来提供高可依赖的分布式协作功能。Flink包含了启动一个简单zookeeper的脚本。

Masters 文件(masters)

通过配置 conf/masters下的masters文件开启HA-cluster:

  • masters file:masters 文件包括启动了JobManager所有的主机,以及用户访问的web端口。
jobManagerAddress1:webUIPort1
[...]
jobManagerAddressX:webUIPortX

默认情况下,JobManager将会选择一个随机端口进行进程间的通信。用户可以通过high-availability.jobmanager.port改变这个端口。这个字段可以配置单个端口(比如50010),范围端口(比如50000-50025),或者两者的组合(50010,50011,50020-50025,50050-50075)

config配置文件(flink-conf.yaml)

通过配置conf/flink-conf.yaml,实现高可用集群:

  • high-availability模式(必须):high-availability模式需要在conf/flink-conf.yaml文件中配置成zookeeper。
high-availability: zookeeper
  • ZooKeeper quorum(必须):一个zookeeper quorum就是zookeeper服务器的一个复制,提供分布式协作服务。
high-availability.zookeeper.quorum: address1:2181[,...],addressX:2181
  • ZooKeeper root (推荐):zookeeper节点的根目录。
high-availability.zookeeper.path.root: /flink
  • ZooKeeper cluster-id(推荐):
high-availability.cluster-id: /default_ns # important: customize per cluster

注意:在yarn上不要设置此属性。

  • Storage directory(必须):JobManager的元数据在文件系统路径下存储。zookeeper只是维护了一个状态信息。
high-availability.storageDir: hdfs:///flink/recovery

storageDir存放了恢复出错JobManager所需要的元数据。

在完成了masters以及zookeeper quorum的配置后,用户可以使用cluster启动脚本启动Flink。这些脚本将会启动一个高可用集群。记住在你调用脚本之前需要保证zookeeper quorum已经在运行。同时也需要保证每个HA cluster在zookeeper上都有一个独立的根目录。

Example: Standalone Cluster with 2 JobManagers

  • Configure high availability mode and ZooKeeper quorum in conf/flink-conf.yaml:
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /cluster_one # important: customize per cluster
high-availability.storageDir: hdfs:///flink/recovery
  • Configure masters in conf/masters:
localhost:8081
localhost:8082
  • Configure ZooKeeper server in conf/zoo.cfg (currently it’s only possible to run a single ZooKeeper server per machine):
server.0=localhost:2888:3888
  • Start ZooKeeper quorum:
$ bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.
  • Start an HA-cluster:
$ bin/start-cluster.sh
Starting HA cluster with 2 masters and 1 peers in ZooKeeper quorum.
Starting standalonesession daemon on host localhost.
Starting standalonesession daemon on host localhost.
Starting taskexecutor daemon on host localhost.
  • Stop ZooKeeper quorum and cluster:
$ bin/stop-cluster.sh
Stopping taskexecutor daemon (pid: 7647) on localhost.
Stopping standalonesession daemon (pid: 7495) on host localhost.
Stopping standalonesession daemon (pid: 7349) on host localhost.
$ bin/stop-zookeeper-quorum.sh
Stopping zookeeper daemon (pid: 7101) on host localhost.

YARN Cluster高可用

当使用yarn运行Flink cluster,不需要运行多个JobManager,仅仅一个就可以。当运行失败时,YARN负责重启。具体的行为依赖于用户的YARN版本。

配置

Application Master最大重试次数(yarn-site.xml)

用户需要为YARN的建立配置AppMaster的最大重试次数,配置文件为yarn-site.xml。

<property>
  <name>yarn.resourcemanager.am.max-attempts</name>
  <value>4</value>
  <description>
    The maximum number of application master execution attempts.
  </description></property>

当前YARN版本的默认次数为2(意味着JobManager允许失败一次)

应用自身重试次数(flink-conf.yaml)

除了上文提到的YARN HA配置,用户需要在conf/flink-conf.yaml中配置程序的最大重试次数。

yarn.application-attempts: 10

这意味着,在YARN认为程序失败之前,应用自身会重试9次(9次重试+1次初始启动)。YARN会有额外的重启操作,相关的场景有:Preemption,节点硬件错误或重启,NodeManager同步。这些重启不会在
yarn.application-attempts上计数,详情可以阅读http://johnjianfang.blogspot.de/2015/04/the-number-of-maximum-attempts-of-yarn.html。认识到yarn.resourcemanager.am.max-attempts是应用重启的次数上限是很重要的一点。因此,Flink中设置的重启次数不应该超过YARN集群设置的次数。

容器shutdown行为
  • YARN 2.3.0 < version < 2.4.0 当AppMaster失败,所有的容器都重启。
  • YARN 2.4.0 < version < 2.6.0 在AppMaster失败的时候,TaskManager容器保持运行。这有启动更快的好处,并且用户不需要等待容器资源的再次分配。
  • YARN 2.6.0 <= version 将尝试失败有效性间隔设置为Flinks的Akka超时值。尝试失败有效性区间表示,只有在系统在一个区间内看到应用程序尝试的最大次数之后,才会杀死应用程序。这避免了长时间的工作将耗尽它的应用程序尝试次数。
Example:YARN会话高可用
  • Configure HA mode and ZooKeeper quorum in conf/flink-conf.yaml:
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.storageDir: hdfs:///flink/recovery
high-availability.zookeeper.path.root: /flink
yarn.application-attempts: 10
  • Configure ZooKeeper server in conf/zoo.cfg (currently it’s only possible to run a single ZooKeeper server per machine):
server.0=localhost:2888:3888
  • Start ZooKeeper quorum:
$ bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.
  • Start an HA-cluster:
$ bin/yarn-session.sh -n 2

Zookeeper安全配置

如果zookeeper通过使用Kerberos运行于安全模式下,用户可以覆盖flink-conf.yaml中的配置,如下:


zookeeper.sasl.service-name: zookeeper     # default is "zookeeper". If the ZooKeeper quorum is configured
                                           # with a different service name then it can be supplied here.
zookeeper.sasl.login-context-name: Client  # default is "Client". The value needs to match one of the values
                                           # configured in "security.kerberos.login.contexts".

启动Zookeeper

如果用户没有一个运行的Zookeeper环境,可以使用随着Flink发布的脚本。
conf/zoo.cfg是zookeeper配置的模板。用户可以按照Server.X的模式配置运行了Zookeeper的节点。其中X是节点的唯一编号。


server.X=addressX:peerPort:leaderPort
[...]
server.Y=addressY:peerPort:leaderPort

脚本bin/start-zookeeper-quorum.sh将会在每个配置的主机上运行zookeeper。启动的进程开启一个Flink wraper封装的zookeeper服务。Flink wrapper从conf/zoo.cfg读取配置信息,并方便的提供了一些默认配置。从产品的角度出发,推荐用户维护自己的zookeeper实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值