热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ZooKeeper同步WAL数据导致ResourceManager重启问题

ZooKeeper同步WAL数据导致ResourceM

问题描述:YARN莫名重启、Flink任务挂掉(脚本检测到之后自动恢复任务)


YARN后台日志

显示连不上Zookeeper并触发ResourceManager HA选举,

找不到Active的ResourceManager了。

HA状态切换为standby之后,开始停止ResourceManager相关服务(8032-RM对Client的服务端口、8030-RM对AM的服务端口、8031-RM对NM的服务端口)。

然后开始Recover,恢复RM...。

RM重启后开始接收Container状态注册(Flink任务),时间戳1586772031875 显示是2020-04-13 18:00:31创建的任务。RM发现注册的Container是未知应用,在RM上下文环境里面找不到了,然后就添加到已完成的应用列表里面了-后续清理掉。

源码简读

    org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl

      private static void handleRunningAppOnNode(RMNodeImpl rmNode,
      RMContext context, ApplicationId appId, NodeId nodeId) {
      RMApp app = context.getRMApps().get(appId);


      if we failed getting app by appId, maybe something wrong happened, just
      add the app to the finishedApplications list so that the app can be
      cleaned up on the NM
      if (null == app) {
      LOG.warn("Cannot get RMApp by appId=" + appId
      + ", just added it to finishedApplications list for cleanup");
      rmNode.finishedApplications.add(appId);
      rmNode.runningApplications.remove(appId);
      return;
      }


      Add running applications back due to Node add or Node reconnection.
      rmNode.runningApplications.add(appId);
      context.getDispatcher().getEventHandler()
      .handle(new RMAppRunningOnNodeEvent(appId, nodeId));
      }

      Flink任务检测脚本检测到任务挂了之后重新提交给YARN。


      ZK后台日志

      相同时间,发现WARN异常警告。session超时、然后shutdown。

      重点:WAL同步延迟,耗时约22秒,关闭了与leader的连接变为LOOKING状态,而后根据FastLeaderElection算法进行新的选举。

      源码简读

        org.apache.zookeeper.server.SyncRequestProcessor#flush(zks.getZKDatabase().commit();)
        org.apache.zookeeper.server.ZKDatabase#commit(this.snapLog.commit();)
        org.apache.zookeeper.server.persistence.FileTxnSnapLog#commit(txnLog.commit();)
        org.apache.zookeeper.server.persistence.FileTxnLog#commit

          /**
          * commit the logs. make sure that everything hits the
          * disk
          */
          public synchronized void commit() throws IOException {
          if (logStream != null) {
          logStream.flush();
          }
          for (FileOutputStream log : streamsToFlush) {
          log.flush();
          if (forceSync) {
          long startSyncNS = System.nanoTime();


          FileChannel channel = log.getChannel();
          channel.force(false);


          syncElapsedMS = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startSyncNS);
          if (syncElapsedMS > fsyncWarningThresholdMS) {
          if (serverStats != null) {
          serverStats.incrementFsyncThresholdExceedCount();
          }


          LOG.warn(
          "fsync-ing the write ahead log in {} took {}ms which will adversely effect operation latency."
          + "File size is {} bytes. See the ZooKeeper troubleshooting guide",
          Thread.currentThread().getName(),
          syncElapsedMS,
          channel.size());
          }


          ServerMetrics.getMetrics().FSYNC_TIME.add(syncElapsedMS);
          }
          }
          while (streamsToFlush.size() > 1) {
          streamsToFlush.poll().close();
          }


          // Roll the log file if we exceed the size limit
          if (txnLogSizeLimit > 0) {
          long logSize = getCurrentLogSize();


          if (logSize > txnLogSizeLimit) {
          LOG.debug("Log size limit reached: {}", logSize);
          rollLog();
          }
          }
          }


          问题解决

          修改ZK配置并重启集群、问题解决(if (forceSync)),但是这里也是有缺陷的,force是用来保证数据完全刷到磁盘的。设置为no后,一定程度上提高ZK的写性能,但同时也会存在类似于机器断电这样的安全风险。

          另外:在没有与HBase共用ZK之前一直没有出现此异常,因此需要注意多份ZK集群的隔离部署问题。

            minSessionTimeout=30000
            maxSessionTimeout=60000
            skipACL=yes
            forceSync=no

            【END】



            推荐阅读
            • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
            • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
            • Spring – Bean Life Cycle
              Spring – Bean Life Cycle ... [详细]
            • 网站访问全流程解析
              本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
            • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
            • 开机自启动的几种方式
              0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
            • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
              在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
            • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
              本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
            • DVWA学习笔记系列:深入理解CSRF攻击机制
              DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
            • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
            • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
            • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
            • Android 自定义 RecycleView 左滑上下分层示例代码
              为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
            • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
              HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
            • IOS Run loop详解
              为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
            author-avatar
            西安黄河文化补习学校
            这个家伙很懒,什么也没留下!
            PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
            Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有