这几天重启nas服务器发现,时间总是对不齐,找了一个windows系统,作为时间源,在这里简单记录一下,前面原理已经明了,现在来实践,后面还会有linux作为时间源。
下面我有一个表格来表示整个实验
| 序号 | NTP服务器实践实验 | |
| 1 | 编辑注册表 | |
| regedit | HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ TimeProviders \ NtpServer \ Enabled | |
| 鼠标双击Enabled文件 ,将默认值 0 改为 1 ,启用NTP服务。 | ||
| HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ W32Time \ Parameters \ Type | ||
| 鼠标双击Type 文件;弹出对话框,在数据数值(V)项输入 NTP单击确定 | ||
| HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services\W32Time \ Config \ AnnounceFlags | ||
| 鼠标双击AnnounceFlags文件;弹出对话框,将默认的10改为5 确定。 | ||
| 2 | 服务 | |
| services.msc | 在服务项中找到Windows Time,把它设置为自动后点击确定,点击右键Windows Time重新启动此服务。 | |
| 3 | 本地组策略 | 计算机策略对话框打开,按照如下路径:计算机配置\管理模板\系统\windows时间服务\时间提供程序,找到服务器设置文件。 |
| gpedit.msc | 双击启用 Windows NTP 服务器,显示状态已启用,这时主机的时间就可以被其他从机同步了 | |
| 4 | 命令行重启服务 管理员身份打开 | net stop w32time net start w32time |
| 5 | 测试 | w32tm /stripchart /computer:127.0.0.1 |
在下面是部分实验截图,按顺序
出现上面的回复,说明服务可用了。
ntp协议在网络中处于基础地位,可以说所有服务、系统都依靠他,比如后期我们要聊的AD,除了DNS必然需要一个ntp服务器来对时。这里我重申一下ntp协议使用udp 123端口,使用命令ss -naulp可以查看他所监听的端口。
最后我们要了解一下外部时间源,不然不能以本机的时间作为对时标准。
使用公共NTP池
pool 2.pool.ntp.org iburst
或指定具体服务器
server ntp.aliyun.com iburst
chronyc sources或chronyc sources -v
这个命令会列出所有配置的时间源及其状态。你需要关注第一列带有*符号的行,它表示当前被选为最优、正在同步的时间源。
Stratum:时间源的层级,数值越小越接近原子钟。
因为这是ntp的第一课,所以要讲一下,ntp的前世今生,从老的服务器我们可以看到一条命令ntpdate
`ntpdate` 是一个传统的、用于从 NTP(网络时间协议)服务器**一次性**校准系统时间的 Linux 命令。它的核心特点是“即用即走”,执行一次,将本地时间强制设置为服务器时间,然后命令就结束了。
基本用法与核心特点
它的典型用法非常直接,指定一个 NTP 服务器即可:
bash
sudo ntpdate ntp.aliyun.com
这条命令会立即向 `ntp.aliyun.com` 请求时间,并调整你的系统时钟。
`ntpdate` 的工作方式决定了它的优缺点非常鲜明:
一次性操作:它只在执行的瞬间同步时间,不会在后台持续运行来保持时间准确。
造成时间“跳变:如果本地时间与服务器时间偏差较大(超过0.5秒),它会**直接“步进”**,也就是瞬间跳跃到正确时间。这在某些对时间连续性敏感的应用(如数据库)中可能引发问题。
无漂移校正:它无法补偿两次同步之间系统时钟自身产生的自然漂移,因此如果只运行一次,时间会逐渐再次变慢或变快。
现状:已被淘汰,不应在新系统中使用 现代替代方案:应该用什么?
如今,时间同步的任务已交由更专业的守护进程来持续完成,它们会平滑地调整时间,而不会造成突然的跳变。
chrony:这是目前 RHEL、Ubuntu 等主流发行版**默认**的时间服务。它由持续运行的 `chronyd` 守护进程和用于查询的 `chronyc` 工具组成。`chrony` 能快速收敛时间,并在网络不稳定或系统休眠后也能很好地工作。
* **`systemd-timesyncd`(轻量级替代)**:对于桌面系统或不需要复杂功能的场景,这是一个更轻量的选择,它作为 `systemd` 的一部分提供基础的 NTP 客户端功能。
这两个概念分别对应了 NTP 服务中“去哪里对时”和“如何快速完成第一次对时”的问题。
🌐 什么是公共 NTP 池 (NTP Pool)?
公共 NTP 池是一个由全球志愿者共同维护的、庞大的**时间服务器集群**。它本身并不直接运行 NTP 服务器,而是像一个**智能的“电话总机”**,通过 DNS 将你的对时请求,智能地分配给集群中一台当前可用且相对空闲的服务器。
它的核心工作原理和优势如下:
* **DNS 轮询与负载均衡**:当你配置使用 `pool.ntp.org` 这类域名时,DNS 服务器每次解析会返回不同的 IP 地址。这样,全球海量客户端的请求就会被均匀地分散到数千台志愿者服务器上,避免任何单台服务器过载。
* **地理感知**:这个“总机”是智能的。你可以使用区域前缀(如 `cn.pool.ntp.org` 对应中国区)来获取地理上更接近的服务器,从而获得更低的网络延迟。
* **高可用性**:由于背后是数千台服务器(目前超过 4700 台)组成的庞大资源池,即使其中部分服务器出现故障,整个池的服务也不会中断,可靠性极高。
* **标准化接入**:它提供了一套统一的域名接入方式,取代了过去手动维护一堆静态服务器地址列表的繁琐做法,使得大规模部署时间同步变得非常简单。
什么是 `iburst` 选项?
`iburst` 是 NTP 客户端(如 `chrony`)配置中的一个加速选项。它的作用是**显著缩短设备开机或服务重启后,完成第一次时间同步所需的时间**。
在默认情况下,NTP 客户端为了节省网络资源,会以较慢的频率(例如每 64 秒)向服务器发送一个查询包。如果网络稍有延迟,你可能需要等上几分钟才能完成首次对时。
而 `iburst` 选项改变了这一初始行为:
突发请求:当启用 `iburst` 后,客户端在启动时会**立即向服务器发送一串(通常是 4 到 8 个)连续的请求包**,而不是只发一个。
* **加速同步**:NTP 协议通常需要收集多个样本(大约 6 个)才能可靠地计算出时间偏差并完成同步。`iburst` 的“突发”行为能快速凑齐这些必需的样本,从而将首次同步时间从**几分钟缩短到几秒钟**。
触发时机:它主要在**服务器初始不可达**(如刚开机网络未就绪)或**同步源从离线状态切换为在线状态**时被触发,目的是尽快抓住可用的时间源完成首次校准。
总结
**公共 NTP 池**解决了“**可靠、高效地找到对时服务器**”的问题,是基础设施层面的方案;而 **`iburst`** 则解决了“**在找到服务器后,如何最快完成第一次对时**”的问题,是客户端配置层面的优化。在实际配置中,两者通常结合使用,例如在 `chrony` 配置文件中写入 `pool cn.pool.ntp.org iburst`,就能同时获得高可靠性和快速启动的优势。
然后画个重点
下一篇短文预告,linux系统中的ntp有关配置