配置服务端(时间服务器)
安装ntp服务
[***@***~]# yum install ntp ntpdate -y
防火墙配置
由于NTP服务需要使用到UDP端口号123,所以当系统的防火墙(Iptables)启动的情况下,必须开放UDP端口号123
编辑配置文件(修改配置文件需要重启服务)
[***@***~]# vi /etc/ntp.conf
#把如下四行代码注释掉(这些是公网的一些时间服务器)
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#在下面再添加两行
server 127.127.1.0 prefer #把本机服务器作为时间服务器
restrict 默认网关 mask 子网掩码 nomodify notrap #允许客户端默认网关的所有主机向本机请求时间同步
restrict 控制相关权限。
语法为:restrict IP地址mask 子网掩码参数
其中IP地址也可以是default ,default 就是指所有的IP
参数有以下几个:
ignore :关闭所有的NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询:用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap :不提供trap远端登陆:拒绝为匹配的主机提供模式6 控制消息陷阱服务。陷阱服务是ntpdq 控制消息协议的子系统,用于远程事件日志记录程序。
nopeer :用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
kod :访问违规时发送KoD 包。
restrict -6 表示IPV6地址的权限设置。
启动ntp服务
#启动服务
[***@***~]# systemctl start ntpd #或service ntpd start
#查看服务器状态
[***@***~]# systemctl status ntpd #或service ntpd status
#设置开机自启
[***@***~]# systemctl enable ntpd
ntp开机无法自启(客户端同样操作)
#查看ntp状态
[***@**** ~]# systemctl status ntpd
Redirecting to /bin/systemctl status ntpd.service
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: inactive (dead)
查询ntp是否设置开机自启
[***@*** ~]# systemctl is-enabled ntpd #查看设置状态
enabled
通过上面查询得出ntp设置开机自启,但是为开机启动成功,一般引起这个问题最常见的原因是系统上安装了一个与ntp想冲突的的工具:chrony
查询chrony是否被设置为enabled(开机自启)
[***@***~]# systemctl is-enabled chronyd
enabled
解决办法:
[***@***~]# systemctl disable chronyd #设置chronyd不可用
重启服务器,查看ntp状态
[***@***~]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-01-19 09:51:20 +08; 2min 3s ago
Process: 6067 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 6078 (ntpd)
CGroup: /system.slice/ntpd.service
└─6078 /usr/sbin/ntpd -u ntp:ntp -g
查看时间同步状态
[***@***~]# ntpstat
synchronised to local net (127.127.1.0) at stratum 6
time correct to within 12 ms
polling server every 64 s
客户端
安装ntp服务
[***@***~]# yum install ntp ntpdate -y
启动服务
#启动服务
[***@***~]# systemctl start ntpd #或service ntpd start
同步时间服务器时间(内网)
[***@***~]# ntpdate -u 服务端ip #后面ip表示时间服务器ip
同步时间服务器时间(公网)
[***@***~]# ntpdate -u pool.ntp.org
查看状态
[***@***~]# ntpq -p #如果没有指定任何关联服务器,就会返回No association ID's returned
remote:上层NTP服务器的IP或者主机名。
refid:它指的是给远程服务器(服务端ip地址)提供时间同步的服务器,本机上级的上级NTP服务器。
为什么显示为LOCAL(0)?
由于此处为内网环境,无法去外网公用的主机同步时间,因此我们在服务端设置的服务端自身作为时间服务器同时,使用server 127.127.1.0 prefer指名他的上级NTP为自身。
st:就是stratum层级。 类似于DNS,NTP是层级结构,有顶端的服务器,最多有15层。 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器。
when:几秒之前同步过时间
poll:在过多长时间去同步时间。
reach:已经同步时间的次数
delay:网络传输过程中的延迟,单位是10的-6次方秒。
offset:时间修正值,这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别.。单位是10的-3次方。
jitter:linux系统时间(软件时间)与BIOS硬件时间的差异时间,单位是10的-6次方秒。在主机和NTP服务器同步时间欧,可以使用 hwclock -w将系统时间写入BIOS.
其它需求:
同时同步系统时间与硬件时间
将同步好的系统时间写入到硬件(BIOS)时间里
[***@***~]# vi /etc/sysconfig/ntpdate #修改配置文件
把SYNC_HWCLOCK=no 改成SYNC_HWCLOCK=yes
就可以让硬件时间与系统时间一起同步。
设置定时任务
我采用是定时启动一个shell脚本,然后同步时间服务器的命令放到shell脚本中
#在root目录下新建一个脚本文件
[***@***~]# touch ntp.sh
往ntp.sh脚本中加入下面一行命令跟一行注释
#同步时间服务器( pool.ntp.org一个公网时间服务器)
[***@***~]# ntpdate -u pool.ntp.org
最后加入定时任务中
[***@***~]# crontab -e #编辑定时任务
#加入下面一行命令 ,表示每分钟同步一次
*/1 * * * * . /etc/profile;/bin/sh /ntp.sh1