EMR 集群时钟同步问题及解决方案An error occurred (InvalidSignatureException)

image.png

目录

    • 1. 问题描述
    • 2. 问题原因
    • 3. 解决过程
    • 4. 时钟同步的重要性
    • 5. Linux 系统中的时钟同步方式
    • 6. 检查 Linux 系统时钟同步状态
    • 7. EMR 集群中的时钟同步配置
    • 8. 时钟同步对大数据组件的影响
    • 9. 监控和告警策略
    • 10. 故障排除和最佳实践
    • 11. 自动化时钟同步管理
    • 12. 时钟同步与数据一致性
    • 结语

1. 问题描述

在今天一次任务中,发现 EMR 集群报错:

An error occurred (InvalidSignatureException) when calling the ModifyInstanceGroups operation: Signature expired: 20240714T010336Z is now earlier than 20240714T010336Z (20240714T010836Z - 5 min.)

这个错误提示我可能存在时钟同步问题。

2. 问题原因

image.png

经过调查,我发现问题的根源在于:

  1. 集群的 HDFS NameNode 空间在前一天被写满。
  2. 这导致一些服务挂掉,包括负责时钟同步的服务。
  3. 由于时钟不同步,签名验证失败,从而无法执行 ModifyInstanceGroups 操作。

3. 解决过程

image.png

我通过以下步骤解决了这个问题:

  1. 首先,我检查了 NTP 服务的状态:

    [hadoop@ip-10-xx-39-116 ~]$ sudo systemctl status ntp
    Unit ntp.service could not be found.
    
  2. 发现 NTP 服务不存在,转而检查 chrony 服务:

    [hadoop@ip-10-xx-39-116 ~]$ sudo systemctl status chronyd
    ● chronyd.service - NTP client/serverLoaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)Active: failed (Result: resources)Docs: man:chronyd(8)man:chrony.conf(5)
    
  3. 发现 chronyd 服务失败,尝试重启该服务:

    [hadoop@ip-10-33-39-116 ~]$ sudo systemctl restart chronyd
    
  4. 重启后,我们再次检查服务状态:

    [hadoop@ip-10-33-39-116 ~]$ sudo systemctl status chronyd
    ● chronyd.service - NTP client/serverLoaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-07-14 01:14:11 UTC; 3s ago...
    

重启 chronyd 服务后,时钟同步问题得到解决。

4. 时钟同步的重要性

image.png

在大数据开发中,时钟同步至关重要,原因如下:

  1. 数据一致性:确保集群中所有节点的时间一致,避免数据处理顺序错乱。
  2. 日志分析:准确的时间戳对于日志分析和问题排查至关重要。
  3. 安全性:许多安全机制(如 Kerberos)依赖于准确的时间。
  4. 任务调度:确保定时任务在正确的时间执行。
  5. 分布式系统协调:很多分布式算法和协议依赖于精确的时间同步。

5. Linux 系统中的时钟同步方式

image.png

Linux 系统提供了多种时钟同步方式:

  1. 手动设置时间

    sudo date --set="2024-07-14 11:30:00"
    
  2. 使用 NTP 服务

    安装 NTP:

    sudo yum install ntp  # CentOS/RHEL
    sudo apt-get install ntp  # Debian/Ubuntu
    

    启动并启用 NTP 服务:

    sudo systemctl start ntp
    sudo systemctl enable ntp
    
  3. 使用 Chrony 服务

    安装 Chrony:

    sudo yum install chrony  # CentOS/RHEL
    sudo apt-get install chrony  # Debian/Ubuntu
    

    启动并启用 Chrony 服务:

    sudo systemctl start chronyd
    sudo systemctl enable chronyd
    
  4. 配置时间服务器

    编辑 /etc/ntp.conf/etc/chrony.conf,添加时间服务器:

    server 0.pool.ntp.org
    server 1.pool.ntp.org
    server 2.pool.ntp.org
    server 3.pool.ntp.org
    
  5. 设置正确的时区

    sudo timedatectl set-timezone Your_Time_Zone
    

6. 检查 Linux 系统时钟同步状态

image.png

可以通过以下方法检查系统的时钟同步状态:

  1. 检查服务状态

    sudo systemctl status ntp
    # 或
    sudo systemctl status chronyd
    
  2. 查看同步状态

    对于 Chrony:

    chronyc tracking
    
  3. 查看系统时间设置

    timedatectl
    
  4. 检查 NTP 端口

    sudo ss -tuln | grep :123
    
  5. 查看服务日志

    journalctl -u chronyd
    # 或
    journalctl -u ntp
    

7. EMR 集群中的时钟同步配置

image.png

在 Amazon EMR 集群中,时钟同步通常是自动配置的,但了解其工作原理和如何进行手动调整很重要:

  1. 默认配置:EMR 默认使用 Chrony 进行时钟同步。

  2. 配置文件位置:通常位于 /etc/chrony.conf

  3. 自定义配置:可以通过 EMR 的引导操作(Bootstrap Actions)来自定义时钟同步设置。

示例引导操作脚本:

#!/bin/bash
echo "server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4" >> /etc/chrony.conf
sudo systemctl restart chronyd

在创建 EMR 集群时,可以添加这个脚本作为引导操作。

8. 时钟同步对大数据组件的影响

image.png

时钟同步问题可能对各种大数据组件产生不同程度的影响:

  1. HDFS

    • NameNode 和 DataNode 之间的时钟差异可能导致数据块复制和删除操作异常。
    • 文件修改时间可能不准确,影响数据管理和审计。
  2. YARN

    • 资源调度可能受到影响,导致任务分配不均或超时。
    • 容器生命周期管理可能出现问题。
  3. HBase

    • 时间戳不一致可能导致数据版本混乱。
    • Region 服务器之间的协调可能受到影响。
  4. Hive

    • 分区修剪可能不准确,影响查询性能。
    • 事务操作可能因时间戳问题而失败。
  5. Spark

    • 任务调度和执行可能变得不可靠。
    • Shuffle 操作可能因时间不一致而出错。

9. 监控和告警策略

image.png

为了及时发现和解决时钟同步问题,建议实施以下监控和告警策略:

  1. NTP/Chrony 服务监控
    定期检查服务状态和同步精度。

    #!/bin/bash
    # 检查 Chrony 服务状态
    chrony_status=$(systemctl is-active chronyd)
    if [ "$chrony_status" != "active" ]; thenecho "CRITICAL: Chrony service is not running"exit 2
    fi# 检查时间偏移
    offset=$(chronyc tracking | grep "Last offset" | awk '{print $4}')
    if (( $(echo "$offset > 0.1" | bc -l) )); thenecho "WARNING: Time offset is greater than 0.1 seconds"exit 1
    fiecho "OK: Chrony service is running and time is in sync"
    exit 0
    
  2. 集群节点时间差异监控
    定期比较集群内各节点的时间差异。

  3. 日志分析
    设置自动化脚本,分析系统日志中与时间相关的错误。

  4. 性能指标监控
    监控可能受时钟影响的性能指标,如任务延迟、数据一致性错误等。

  5. 集成告警系统
    将时钟同步监控集成到现有的告警系统中,如 Prometheus + Grafana。

10. 故障排除和最佳实践

image.png

当遇到时钟同步问题时,可以遵循以下步骤进行故障排除:

  1. 检查网络连接:确保 NTP 服务器可达。
  2. 验证配置:检查 NTP/Chrony 配置是否正确。
  3. 检查系统负载:高负载可能影响时钟同步。
  4. 查看硬件时钟:使用 hwclock 命令检查硬件时钟。
  5. 更新 NTP/Chrony:确保使用最新版本的时间同步软件。

最佳实践:

  • 使用多个时间源以提高可靠性。
  • 定期审核和更新时钟同步配置。
  • 在关键操作前后进行时间同步检查。
  • 在应用层面实现额外的时间验证机制。

11. 自动化时钟同步管理

image.png

为了更好地管理大规模集群的时钟同步,可以考虑实施自动化解决方案:

  1. Ansible 自动化
    使用 Ansible playbook 统一管理集群的时钟同步配置。

    ---
    - name: Ensure time synchronizationhosts: allbecome: yestasks:- name: Install chronyyum:name: chronystate: present- name: Configure chronytemplate:src: chrony.conf.j2dest: /etc/chrony.confnotify: Restart chrony- name: Start and enable chronysystemd:name: chronydstate: startedenabled: yeshandlers:- name: Restart chronysystemd:name: chronydstate: restarted
    
  2. 自动修复脚本
    开发自动检测和修复时钟同步问题的脚本,并通过 cron 任务定期运行。

  3. 容器化时钟同步
    对于容器化环境,考虑使用 sidecar 容器来管理时钟同步。

12. 时钟同步与数据一致性

image.png

在大数据系统中,时钟同步直接关系到数据一致性:

  1. 分布式事务

    • 在实现分布式事务时,精确的时钟同步对于保证全局一致性至关重要。
    • 考虑使用逻辑时钟(如 Lamport 时钟)来补充物理时钟。
  2. 数据版本控制

    • 在实现多版本并发控制(MVCC)时,准确的时间戳是保证数据一致性的基础。
  3. 一致性模型

    • 在选择和实现一致性模型(如最终一致性、因果一致性)时,需要考虑时钟同步的精度。
  4. 数据复制和同步

    • 在跨数据中心的数据复制中,时钟同步对于维护数据的一致性和顺序至关重要。

示例:使用 Lamport 时钟实现分布式操作排序

public class LamportClock {private int counter;private final String nodeId;public LamportClock(String nodeId) {this.counter = 0;this.nodeId = nodeId;}public synchronized LamportTimestamp tick() {return new LamportTimestamp(++counter, nodeId);}public synchronized void update(LamportTimestamp other) {counter = Math.max(counter, other.getCounter()) + 1;}
}public class LamportTimestamp implements Comparable<LamportTimestamp> {private final int counter;private final String nodeId;// 构造函数、getter 和 setter@Overridepublic int compareTo(LamportTimestamp other) {int counterCompare = Integer.compare(this.counter, other.counter);if (counterCompare != 0) {return counterCompare;}return this.nodeId.compareTo(other.nodeId);}
}

结语

image.png

时钟同步是大数据系统中不可忽视的关键组件。

通过本文的深入探讨,我们不仅了解了如何解决 EMR 集群中的时钟同步问题,还认识到了时钟同步对整个大数据生态系统的重要影响。

作为大数据开发人员,我们需要:

  • 时刻关注集群的时钟同步状态
  • 实施有效的监控和告警机制
  • 采用自动化工具进行管理
  • 在应用设计中考虑时钟不同步的可能性

通过这些措施,我们可以构建更加可靠、一致和高性能的大数据系统,为数据驱动的决策提供坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式之美】【建造型】工厂模式实战:如何设计一个DI框架;梳理流程,通过面向接口解耦对象创建

文章目录 一. 工厂模式和 DI 容器有何区别&#xff1f;二. DI 容器的核心功能有哪些&#xff1f;1. 配置解析&#xff1a;解耦对象创建2. 对象创建3. 对象的生命周期管理 三. 如何实现一个简单的 DI 容器&#xff1f;1. 最小原型设计&#xff1a;流程梳理2. 提供执行入口&#…

GESP C++ 三级真题(2023年9月)T1 ⼩ 杨储蓄

1、 ⼩ 杨储蓄 问题描述 ⼩ 杨共有 N个储蓄罐&#xff0c;编号从0到N-1。从第1天开始&#xff0c; ⼩杨每天都会往存钱罐里 存钱。具体来说&#xff0c;第i天他会挑选一个存钱罐 ɑ i &#xff0c;并存 ⼊i元钱。过了D天后&#xff0c;他 已经忘记每个储蓄罐里都存了多少钱了&a…

git列出提交记录的文件路径

一、如何列出某次提交记录中修改过/新增的文件&#xff1f; 方法1&#xff1a;使用 git diff-tree 命令来查看某个提交记录中修改过/新增的文件。具体来说&#xff0c;你可以使用以下命令&#xff1a; git diff-tree --no-commit-id --name-only -r <commit-hash>命令解…

C++20中的constinit说明符

constinit说明符断言(assert)变量具有静态初始化&#xff0c;即零初始化和常量初始化(zero initialization and constant initialization)&#xff0c;否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…

机器人及其相关工科专业课程体系

机器人及其相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科&#xff0c;涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论…

ozon俄罗斯ceo丨ozon平台数据分析选品神器

ozon俄罗斯ceo是玛依妮加文特。‌作为俄罗斯最大的电子商务公司Ozon Holdings的女首席执行官&#xff0c;‌玛依妮加文特被称为俄罗斯的杰夫贝索斯&#xff08;‌亚马逊CEO&#xff09;‌。‌她在公司中发挥着重要作用&#xff0c;‌不仅负责公司的日常运营和管理&#xff0c;‌…

修改表格颜色

el-table修改表头、列的背景颜色、字体样式_el-table-column背景颜色-CSDN博客 设置表头背景颜色&#xff0c;字体 <el-table :header-cell-style"rowClass" border :data"tableDataTwo" style"width: 100%"><el-table-column width&q…

数据结构初阶(C语言)-顺序表

一&#xff0c;线性表 在进行顺序表的介绍之前&#xff0c;我们先来了解下什么是线性表&#xff1a; 线性表是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...线性表在…

2. 白盒测试

白盒测试 1. 白盒测试定义 测试软件的内部编码和基础设施&#xff0c;重点是根据预期和期望的输出检查预定义的输入。它基于应用程序的内部工作方式&#xff0c;并围绕内部结构测试。在这种类型的测试中&#xff0c;编程测试用例需要编程技巧。白盒测试的主要目标是通过软件关…

秒懂设计模式--学习笔记(9)【结构型-装饰器模式】

目录 8、装饰器模式8.1 装饰器模式&#xff08;Decorator&#xff09;8.2 装修&#xff08;举例&#xff09;8.3 化妆&#xff08;示例&#xff09;8.4 化妆品的多样化8.5 装饰器8.6 自由嵌套8.7 装饰器模式的各角色定义8.8 装饰器模式 8、装饰器模式 8.1 装饰器模式&#xff…

MySQL运维实战之ProxySQL(9.6)SQL黑名单

作者&#xff1a;俊达 利用mysql_query_rules表中的error_msg字段&#xff0c;可以实现SQL黑名单的功能。如果规则设置了error_msg&#xff0c;当SQL语句匹配这条规则时&#xff0c;proxysql会直接将error_msg的内容返回给客户端。 当遇到一些大查询严重影响数据库性能时&…

【开源项目】Rust开发复制文件夹目录结构工具

说明 由于我经常需要在多个大容量的移动硬盘中查找和新增文件&#xff0c;我希望把硬盘的目录结构放到服务器的自建网盘中&#xff0c;因此开发了这个工具&#xff0c;使得在不同硬盘之间的文件管理变得更加便捷 项目地址&#xff1a;https://github.com/VinciYan/folder_clon…

红色文化3D虚拟数字展馆搭建意义深远

在房地产与土地市场的浪潮中&#xff0c;无论是新城规划、乡村振兴&#xff0c;还是商圈建设&#xff0c;借助VR全景制作、虚拟现实和web3d开发技术打造的全链条无缝VR看房新体验。不仅极大提升了带看与成交的转化率&#xff0c;更让购房者足不出户&#xff0c;即可享受身临其境…

Linux Cgroups

Linux CGroup全称Linux Control Group&#xff0c; 是Linux内核的一个功能&#xff0c;用来限制&#xff0c;控制与分离一个进程组群的资源&#xff08;如CPU、内存、磁盘输入输出等&#xff09;。这个项目最早是由Google的工程师在2006年发起&#xff08;主要是Paul Menage和R…

能把进程和线程讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

【verilog】Verilog 中的 ifdef 语法指南:Verilog-2001 与 SystemVerilog

目录 简介 Verilog-2001 中的 ifdef 基本语法 示例 1&#xff1a;Verilog-2001 风格 SystemVerilog 中的 ifdef 基本语法 示例 2&#xff1a;SystemVerilog 风格 示例 3&#xff1a;调试与发布配置 注意事项 简介 在 Verilog 硬件描述语言中&#xff0c;ifdef 是一种…

SQL Server 创建用户并授权

创建用户前需要有一个数据库&#xff0c;创建数据库命令如下&#xff1a; CREATE DATABASE [数据库名称]; CREATE DATABASE database1; 一、创建登录用户 方式1&#xff1a;SQL命令 命令格式&#xff1a;CREATE LOGIN [用户名] WITH PASSWORD 密码; 例如&#xff0c;创建…

Vue项目中禁用ESLint的几种常见方法

1. 通过 vue.config.js 禁用 这是最直接且推荐的方式&#xff0c;因为它直接在Vue CLI的配置中禁用ESLint。通过在项目根目录下创建或修改 vue.config.js 文件&#xff0c;并设置 lintOnSave 为 false&#xff0c;可以彻底禁用保存时的ESLint检查。 // vue.config.js module…

FlinkErr:org/apache/hadoop/hive/ql/parse/SemanticException

在flink项目中跑 上面这段代码出现如下这个异常&#xff0c; java.lang.NoClassDefFoundError: org/apache/thrift/TException 加上下面这个依赖后不报错 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId…

Python绘制相关系数热力图

相关系数热力图是一种可视化工具&#xff0c;用于展示变量之间的相关性。它在数据分析和统计中非常有用&#xff0c;尤其是在探索数据集的内在关系时。本文将介绍如何使用Python绘制相关系数热力图。 一、准备——导入库 使用Pandas来处理数据&#xff0c;Matplotlib和Seabor…