同步计算节点上的日期和时间

同步计算节点上的日期和时间

我想在计算节点上设置作业,但我检查并看到计算节点的时间和日期与头节点不同步。

头节点显示:2015 年 7 月 22 日星期三 16:57:32 PDT
节点 2 显示:2015 年 7 月 22 日星期三 11:52:21 PDT
节点 3 显示:2015 年 7 月 22 日星期三 12:00:38 PDT

我想将它与头节点同步,而不改变头节点的时间(因为我在头节点中有一些与时间相关的作业,所以重要的是不要打扰它们)。你知道我如何将它们与头节点同步吗?

有人告诉我ntpd使用命令重新启动计算节点上的服务service ntpd restart,但我不知道这是否会影响头节点?

答案1

假设您在头节点上运行 SSH,您可以通过 SSH 使用命令简单地从中检索当前时间date

ssh user@host date

使用头节点进行身份验证是最简单、最安全的私钥认证,因此您无需输入密码即可登录。

在从节点上,您可以使用以下命令使用获得的值设置当前时间作为根用户:

date --set=STRING

其中STRING是从头节点获取的字符串值。可以使用以下命令将其组合成一个命令命令替换

date --set="$(ssh user@host date)"

我承认这有点穷人的时间同步解决方案,但我不明白为什么它不起作用。只需完全关闭时间同步服务(如果有),这样脚本所做的更改就不会被修改,例如:

/etc/init.d/ntpd stop

您没有提供有关您的系统的太多信息,所以这就是我能做的。最好配置一个适当的时间同步工具,但为此我们需要有关您的系统的更多信息,例如您正在运行的发行版。

答案2

如果您拥有节点的 root 访问权限,则需要设置时间同步。最常用的工具是恩特普德,除了最专业的 Linux 发行版(以及其他 Unix 系统)之外的所有发行版都可用。 Ntpd 定期通过网络发送查询来获取当前时间,测量本地时钟的漂移并调整本地时钟以补偿其偏差。您可以通过 LAN 获得优于毫秒的精度。

为了获得最佳结果,请选择一个或几个节点作为服务器,例如头节点。安装 NTP 服务器包(例如ntp在 Debian/Ubuntu/Mint 以及 Fedora/RHEL/CentOS 上)并将服务器配置为您的头节点以及一些 Internet 服务器。在配置文件中/etc/ntp.conf,您应该有类似的内容

server 0.fedora.pool.ntp.org
server 1.fedora.pool.ntp.org
server 2.fedora.pool.ntp.org
server 3.fedora.pool.ntp.org
server head1.mycluster.internal.example.com
server head2.mycluster.internal.example.com

(保留您的发行版设置的行并添加您的发行版)。在头节点上,如果有一行restrict,请确保它允许所有节点的 IP 地址。在其他节点上,您可以拥有restrict 127.0.0.1.

您设置了 NTP,将时钟设置为大约正确的时间。如果时间偏差超过 20 分钟,Ntpd 将不会同步时间(它假设您设置的时区不正确,或者时钟或网络有问题)。所以首先要手动设置时钟,例如先在本地机器上设置正确的日期和时间,然后就可以使用

ssh somenode "date -d $(date +%m%d%H%M%Y.%S)"

将时钟设置somenode为比本地时钟慢几十秒。完成此操作后,安装 ntp,或者,如果已安装,请使用service ntpd restart或您的发行版使用的任何方法重新启动守护程序。

相关内容