返回介绍

JobManager 高可用性(HA)

发布于 2025-05-02 18:19:19 字数 8648 浏览 0 评论 0 收藏

JobManager 协调每个 Flink 部署。它负责 调度 和 资源管理 。

默认情况下,每个 Flink 群集都有一个 JobManager 实例。这会产生 单点故障 (SPOF):如果 JobManager 崩溃,则无法提交新程序并且运行程序失败。

使用 JobManager High Availability,您可以从 JobManager 故障中恢复,从而消除 SPOF 。您可以为 独立YARN 群集 配置高可用性。

独立群集高可用性

独立集群的 JobManager 高可用性的一般概念是,任何时候都有一个 Master JobManager多个 Slave JobManagers ,以便在 Leader 失败时接管领导。这保证了 没有单点故障 ,一旦 Slave JobManager 取得领导,程序就可以取得进展。Slave 和主 JobManager 实例之间没有明确的区别。每个 JobManager 都可以充当主服务器或 Slave 服务器。

例如,请考虑以下三个 JobManager 实例的设置:

配置

要启用 JobManager 高可用性,您必须将 高可用性模式设置 为 zookeeper ,配置 ZooKeeper quorum 并设置包含所有 JobManagers 主机及其 Web UI 端口的 主服务器文件

Flink 利用 ZooKeeper 在所有正在运行的 JobManager 实例之间进行 分布式协调 。ZooKeeper 是 Flink 的独立服务,通过 Leader 选举和轻量级一致状态存储提供高度可靠的分布式协调。有关 ZooKeeper 的更多信息,请查看 ZooKeeper 的入门指南 。Flink 包含用于 引导简单 ZooKeeper 安装的脚本。

Masters 文件(Masters )

要启动 HA 群集,请在以下位置配置 主 文件 conf/masters

  • masters 文件 : masters 文件 包含启动 JobManagers 的所有主机以及 Web 用户界面绑定的端口。
    jobManagerAddress1:webUIPort1 
    [...] 
    jobManagerAddressX:webUIPortX
    

默认情况下,JobManager 将为进程间通信选择一个 随机端口 。您可以通过 high-availability.jobmanager.port Keys 更改此设置。此 Keys 接受单个端口(例如 50010 ),范围( 50000-50025 )或两者的组合( 50010,50011,50020-50025,50050-50075 )。

配置文件(flink-conf.yaml)

要启动 HA 群集,请将以下配置键添加到 conf/flink-conf.yaml

  • 高可用性模式 (必需): 高可用性模式 必须被在设置 conf/flink-conf.yaml 于 zookeeper ,以使高可用性模式。
    high-availability: zookeeper
    
  • ZooKeeper quorum (必需): ZooKeeper quorum 是 ZooKeeper 服务器的复制组,它提供分布式协调服务。
    high-availability.zookeeper.quorum:address1:2181 [,...],addressX:2181
    

    每个 addressX:port 指的是一个 ZooKeeper 服务器,Flink 可以在给定的地址和端口访问它。

  • ZooKeeper root (推荐): 根 ZooKeeper 节点 ,在该 节点 下放置所有集群节点。
    high-availability.zookeeper.path.root:/ flink
    
  • ZooKeeper cluster-id (推荐): cluster-id ZooKeeper 节点 ,在该 节点 下放置集群的所有必需协调数据。
    high-availability.cluster-id:/ default_ns#important:每个群集自定义
    

    要点 :在运行 YARN 群集,按作业 YARN 会话或其他群集管理器时,不应手动设置此值。在这些情况下,将根据应用程序 ID 自动生成 cluster-id。手动设置 cluster-id 会覆盖 YARN 中的此行为。反过来,使用-z CLI 选项指定 cluster-id 会覆盖手动配置。如果在裸机上运行多个 Flink HA 群集,则必须为每个群集手动配置单独的群集 ID。

  • 存储目录 (必需):JobManager 元数据保存在文件系统 storageDir 中 ,只有指向此状态的指针存储在 ZooKeeper 中。
    high-availability.storageDir:hdfs:/// flink / recovery
    

    storageDir 存储所有元数据需要恢复 JobManager 失败。

配置主服务器和 ZooKeeper quorum 后,您可以像往常一样使用提供的集群启动脚本。他们将启动 HA 群集。请记住,调用脚本时 必须运行 ZooKeeper quorum ,并确保为要 启动的 每个 HA 群集 配置单独的 ZooKeeper 根路径

示例:具有 2 个 JobManagers 的独立群集

  1. 配置高可用性模式和 zookeeper.quorumconf/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:custom per cluster 
    high-availability.storageDir: HDFS:///Flink/恢复
    
  2. 配置 Mastersconf/masters
    localhost:8081 
    localhost:8082
    
  3. 配置 ZooKeeper 的服务器conf/zoo.cfg (目前它只是可以运行每台机器的单一的 ZooKeeper 服务器):
    server.0 =localhost:2888:3888
    
  4. 启动 ZooKeeper quorum
    $ bin / start-zookeeper-quorum.sh 
    在主机 localhost 上启动 zookeeper 守护程序。
    
  5. 启动 HA 群集
    $ bin / start-cluster.sh 
    在 ZooKeeper quorum 中启动具有 2 个主服务器和 1 个对等服务器的 HA 集群。
    在主机 localhost 上启动 jobmanager 守护程序。
    在主机 localhost 上启动 jobmanager 守护程序。
    在主机 localhost 上启动 taskmanager 守护程序。
    
  6. 停止 ZooKeeper quorum 和集群
    $ bin / stop-cluster.sh 
    在 localhost 上停止 taskmanager 守护进程(pid:7647)。
    在主机 localhost 上停止 jobmanager 守护进程(pid:7495)。
    在主机 localhost 上停止 jobmanager 守护进程(pid:7349)。
    $ bin / stop-zookeeper-quorum.sh 
    在主机 localhost 上停止 zookeeper 守护进程(pid:7101)。
    

YARN 群集高可用性

在运行高可用性 YARN 群集时, 我们不会运行多个 JobManager(ApplicationMaster)实例 ,而只会运行一个,由 YARN 在失败时重新启动。确切的行为取决于您使用的特定 YARN 版本。

配置

最大应用程序主要尝试次数(yarn-site.xml)

您必须配置为尝试应用 Masters 的最大数量 YARN 的设置 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)

除 HA 配置( 参见上文 )外,您还必须配置最大尝试次数 conf/flink-conf.yaml

yarn.application-attempts:10

这意味着在 YARN 未通过应用程序(9 次重试+ 1 次初始尝试)之前,应用程序可以重新启动 9 次以进行失败尝试。如果 YARN 算子操作需要,YARN 可以执行其他重新启动:抢占,节点硬件故障或重新启动或 NodeManager 重新同步。这些重启不计入 yarn.application-attempts ,请参阅 Jian Fang 的博客文章 。重要的是要注意 yarn.resourcemanager.am.max-attempts 应用程序重新启动的上限。因此,Flink 中设置的应用程序尝试次数不能超过启动 YARN 的 YARN 群集设置。

容器关闭行为

  • YARN 2.3.0 <版本<2.4.0 。如果应用程序主机失败,则重新启动所有容器。
  • YARN 2.4.0 <版本<2.6.0 。TaskManager 容器在应用程序主故障期间保持活动状态。这具有以下优点:启动时间更快并且用户不必再等待再次获得容器资源。
  • YARN 2.6.0 <= version :将尝试失败有效性间隔设置为 Flinks 的 Akka 超时值。尝试失败有效性间隔表示只有在系统在一个间隔期间看到最大应用程序尝试次数后才会终止应用程序。这避免了持久的工作会耗尽它的应用程序尝试。

注意 :Hadoop YARN 2.4.0 有一个主要错误(在 2.5.0 中修复),阻止重新启动的 Application Master / Job Manager 容器重启容器。有关详细信息,请参阅 FLINK-4142 。我们建议至少在 YARN 上使用 Hadoop 2.5.0 进行高可用性设置。

示例:高度可用的 YARN 会话

  1. 配置 HA 模式和 zookeeper.quorumconf/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
    
  2. 配置 ZooKeeper 的服务器conf/zoo.cfg (目前它只是可以运行每台机器的单一的 ZooKeeper 服务器):
    server.0 =localhost:2888:3888
    
  3. 启动 ZooKeeper quorum
    $ bin / start-zookeeper-quorum.sh 
    在主机 localhost 上启动 zookeeper 守护程序。
    
  4. 启动 HA 群集
    $ bin / yarn-session.sh -n 2
    

配置 Zookeeper 安全性

如果 ZooKeeper 使用 Kerberos 以安全模式运行,则可以 flink-conf.yaml 根据需要覆盖以下配置:

zookeeper.sasl.service-name:zookeeper #default 是“zookeeper”。如果 ZooKeeper quorum 配置为
                       #具有不同的服务名称,则可以在此处提供。
zookeeper.sasl.login-context-name:Client#default 是“Client”。该值需要匹配
                       “security.kerberos.login.contexts”中配置的值#之一。

有关 Kerberos 安全性的 Flink 配置的更多信息,请参阅 此处 。您还可以 在此处 找到有关 Flink 内部如何设置基于 Kerberos 的安全性的更多详细信息。

Bootstrap ZooKeeper

如果您没有正在运行的 ZooKeeper 安装,则可以使用 Flink 附带的帮助程序脚本。

中有一个 ZooKeeper 配置模板 conf/zoo.cfg 。您可以将主机配置为使用 server.X 条目运行 ZooKeeper ,其中 X 是每个服务器的唯一 ID:

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

该脚本 bin/start-zookeeper-quorum.sh 将在每个配置的主机上启动 ZooKeeper 服务器。启动的进程通过 Flink 打包器启动 ZooKeeper 服务器,该打包器从中读取配置 conf/zoo.cfg 并确保为方便起见设置一些必需的配置值。在生产设置中,建议您管理自己的 ZooKeeper 安装。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。