AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 671412
Accepted
vastlysuperiorman
vastlysuperiorman
Asked: 2015-02-26 12:06:28 +0800 CST2015-02-26 12:06:28 +0800 CST 2015-02-26 12:06:28 +0800 CST

在数据库服务器上启动 NTP 的风险?

  • 772

我听说如果在数据库和邮件服务器运行时更​​改系统时间,它们会发生坏事。但是,我很难找到有关实际风险的任何具体信息。

我有一个在 Debian Wheezy 主机上运行的生产 Postgres 9.3 服务器,时间缩短了 367 秒。我可以ntpdate在 Postgres 运行时运行或启动 openntp,还是可能会导致问题?如果是这样,更正时间的更安全方法是什么?

是否有其他服务对系统时间的变化更敏感?也许是邮件服务器(exim、sendmail 等)或消息队列(activemq、rabbitmq、zeromq 等)?

debian
  • 3 3 个回答
  • 5166 Views

3 个回答

  • Voted
  1. Best Answer
    BillThor
    2015-02-26T19:21:15+08:002015-02-26T19:21:15+08:00

    数据库不喜欢在时间上倒退,因此您不希望从跳时的默认行为开始。如果偏移量小于 600 秒(10 分钟),则将选项添加-x到命令行将缩短时间。在最大转换速率下,将时钟调整一分钟大约需要一天半的时间。这是调整时间的一种缓慢但安全的方法。

    在运行ntp以调整时间之前,您可能希望从ntp一个选项开始,例如-g 2验证它检测到的偏移量有多大。这会将恐慌偏移设置为 2 秒,这应该是相对安全的。

    在此选项可用之前,我使用的另一个选项是编写一个循环,每分钟左右将时钟重置为秒的一部分。如果您检查以确保重置不会改变第二个,这可能是安全的。如果您大量使用时间戳,则可能会出现乱序记录。

    一个常见的选项是关闭服务器足够长的时间,以使时钟不会向后移动。 ntp或者ntpdate可以配置为在启动时将时钟跳到正确的时间。这应该在数据库启动之前完成。

    • 24
  2. John
    2015-02-26T12:21:00+08:002015-02-26T12:21:00+08:00

    如果数据库非常活跃并且在内部记录上有时间戳,那么它们尤其容易受到系统时间变化的影响。一般来说,如果你的时间落后了,你突然向前跳比你领先然后突然向后跳的问题要少得多。

    正如 Joffrey 所指出的 - 与数据库本身相比,出现突然时间跳跃问题的应用程序更常见。更正时间的最安全方法是关闭应用程序 N+1 分钟(其中 N 是您的系统时钟提前的分钟数),然后同步时间,启动 NTP,然后重新启动应用程序。如果您不能在应用程序中占用那么多停机时间,我只能建议您在同步时间之前备份数据库,然后向计算机界的上帝提供一只死松鼠,然后扣动扳机。好吧,我有点开玩笑,但除了让应用程序中断之外,我想不出任何其他“安全”的方法。

    • 9
  3. Joffrey
    2015-02-27T07:47:28+08:002015-02-27T07:47:28+08:00

    当发生瞬时时间跳跃时,通常不是数据库服务器容易出错:它是使用时间的应用程序。

    跟踪时间一般有两种方式:自己的时间跟踪或比较系统时间。两者都有一些积极和消极的权衡。

    自己的时间跟踪

    我看到这在一些嵌入式编程和系统中使用,其中确切的时间并不那么重要。在主应用程序循环中,会处理一种跟踪“滴答”的方式。这可能是内核、睡眠或选择发出的警报,指示经过的时间量。当您知道经过了多少时间时,您就知道可以在计数器上加上或减去这个时间。这个计数器是使您的计时应用发生的原因。例如,如果计数器高于 10 秒,您可以丢弃某些东西,或者您需要做一些事情。

    如果应用程序不跟踪时间,则计数器不会更改。这可能是需要的,具体取决于您的应用程序的设计。例如,使用计数器比开始/停止时间戳列表更容易跟踪长时间运行的进程处理某件事的时间。

    临:

    • 不依赖于系统时钟
    • 不会因大时间偏差而中断
    • 没有昂贵的系统调用
    • 小计数器将比完整的时间戳消耗更少的内存

    缺点:

    • 时间不是很准确
    • 系统时间的变化可能会使其更加不准确
    • 计时是相对于运行应用程序而言的,不会持续存在

    比较系统时间

    这是更常用的系统:存储时间戳并使用系统时间调用将其与时间戳进行比较。系统时间的巨大偏差可能会威胁到应用程序的完整性,几秒钟的任务可能需要几个小时或立即结束,具体取决于时钟的方向。

    临:

    • 准确的时间比较
    • 持续重启和长时间中断

    缺点:

    • 进行系统调用以获取新的时间戳以与其他时间戳进行比较
    • 应用程序需要注意偏差或可能中断

    受影响的系统

    大多数应用程序将使用时间戳比较来安排任务。对于可能是缓存清理的数据库系统。

    如果应用程序没有相应地检测和处理,所有使用查询语言中的数据库和调用时间函数的应用程序都将受到偏差的影响。应用程序永远不会停止运行或允许无限期登录,具体取决于其用途。

    邮件系统将使用时间戳和/或超时来处理陈旧或未送达的邮件。时钟偏差可能会影响这一点,但影响要小得多。可能会错过有关重新连接到服务器的退避计时器,从而导致连接服务器受到惩罚。

    我不认为(尚未研究)更改系统时间时内核警报会响起。使用这些的系统可能是安全的。

    解决方案

    轻轻移动时间。这可以在您最喜欢的时间解决方案的文档中找到。

    • 5

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve