最近发现之前写的 VirtualBox下虚拟机与宿主机时间同步 也不能实时保证虚拟机的时间与宿主机实际时间保持一致, 索性直接搭一下 ntp 服务来实现时间同步.
NTP 概念
NTP = Network Time Protocol, 是基于网络实现时间同步的协议.
实际实现
NTP 的实现, 需要 NTP服务端 与 NTP客户端.
其实笔者的情况, 虚拟机直接充当NTP客户端就完事了, 但是考虑到有多台虚拟机, 所以还是把 服务端 跟 客户端 都进行一下安装.
NTP 服务端
安装
yum install -y ntpd
配置
ntpd 的配置文件默认存放在 /etc/ntp.conf
--- 说明 ---
- restrict 管控权限
写法: restrict ip_address[ mask netmask][ option[s]]
option选项
* ignore
拒绝所有类型的ntp联机
* nomodify
客户端不可以用 ntpc 和 ntpq 来修改服务端的时间参数
* noquery
客户端不能用 ntpc 和 ntpq 等命令来查询服务端, 等于不提供ntp网络校时
* notrap
不提供 trap 这个远端事件记录( remote event logging )功能
* notrust
拒绝没有认证的客户端
* Kod
阻止"Kiss of death"包对服务端的破坏
* Nopeer
不与其它同层的ntp服务端进行时间同步 - server 设置上层NTP服务端
写法: server ip_address or hostname[ option[s]]
* prefer
最高优先级
* burst
当一个远程NTP服务器可用时, 向它发送一系列的并发包进行检测
* iburst
当一个远程NTP服务器不可用时, 向它发送一系列的并发包进行检测 - driftfile 记录时间差异
写法: driftfile file_path
记录与上层NTP服务器的时间差异
要注意:
*** file_path 需要是完整路径
*** file_path 不能是链接
*** ntpd 需要有 file_path 的写入权限
*** 文件记录的数值单位是 百万分之一秒( ppm ) - keys 使用密钥验证
写法: keys key_file_path
可以参考 ntp-keygen 命令的帮助手册
--- 实际配置 ---
我们的需要很简单, 直接加入一行即可( 我的虚拟机环境的网段是 192.168.56.0/24 )
restrict 192.168.56.0 mask 255.255.255.0 nomodify
启动
systemctl start ntpd
需要开机启动的话, 使用
systemctl enable ntpd
检查
正常 ntpd 启动后约 15 分钟会进行与上层NTP服务器的时间校对
ntpstat
同步后的反馈信息如:
synchronised to NTP server (208.67.72.50) at stratum 3
time correct to within 227 ms
polling server every 1024 s
NTP 客户端
客户端使用就简单很多, 使用下方命令即可, 注意 ntp_server_IP 换成你所知道的 NTP服务端 的 IP
ntpdate ntp_server_IP
如果要做完整, 还需要写入 BIOS时间 , 使用
hwclock -w
### 注
客户端使用 ntpdate 时有可能会报错, 形如:
ntpdate[31147]: no server suitable for synchronization found
这是无法与 服务端 通讯导致的, 有可能是防火墙拦截, 注意 服务端 防火墙放行即可.