CentOS配置:时间同步【ntp】
目录
参考:
- ntp同步原理和时钟层级 (opens new window)
- centos7虚拟机配置集群时间同步的操作步骤 (opens new window)
- 使用阿里云镜像站NTP服务搭建NTP服务器(基于CentOS 7系统) (opens new window)
- 使用NTP配置集群时间同步(CentOS 7.9操作系统) (opens new window)
- Centos7集群时间同步(Chrony) (opens new window)
# CentOS配置:时间同步【ntp】
# 环境依赖
软件/系统 | 版本 | 架构 | 包名 | 备注 |
---|---|---|---|---|
Linux | CentOS7.X | x86_64 |
# 常用命令
# 查看系统时间
date
# 查看硬件时间
hwclock
# 将系统时间同步到硬件
hwclock -w
date
2
3
4
5
6
7
- NTP
# 查看NTP服务状态
ntpstat
# 查看当前节点同步的时间服务器
ntpq -p
# 与NTP服务器同步
ntpdate -d [NTP服务器IP]
# 查看节点与时间服务器的偏差时间
ntpdc -c loopinfo
2
3
4
5
6
7
8
# NTP时间同步
# 什么是NTP服务
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
# NTP的时钟层级
NTP允许客户端从服务器请求和接收时间,而服务器又从权威时钟源(例如原子钟、GPS)接收精确的协调世界时UTC。
NTP以层级来组织模型结构,层级中的每层被称为Stratum。通常将从权威时钟获得时钟同步的NTP服务器的层数设置为Stratum 1,并将其作为主时间服务器,为网络中其他的设备提供时钟同步。而Stratum 2则从Stratum 1获取时间,Stratum 3从Stratum 2获取时间,以此类推。时钟层数的取值范围为1~16,取值越小,时钟准确度越高。层数为1~15的时钟处于同步状态;层数为16的时钟被认为是未同步的,不能使用的。
# NTP的同步原理
NTP最典型的授时方式是Client/Server方式,如下图所示。
客户端首先向服务端发送一个NTP请求报文,其中包含了该报文离开客户端的时间戳t1;
NTP请求报文到达NTP服务器,此时NTP服务器的时刻为t2;
当服务端接收到该报文时,NTP服务器处理之后,于t3时刻发出NTP应答报文。该应答报文中携带报文离开NTP客户端时的时间戳t1、到达NTP服务器时的时间戳t2、离开ntp服务器时的时间戳t3;
客户端在接收到响应报文时,记录报文返回的时间戳t4。
客户端用上述4个时间戳参数就能够计算出2个关键参数:
- NTP报文从客户端到服务器的往返延迟delay。
- 客户端与服务端之间的时间差offset。根据方程组:
可以解得时间差为:
客户端根据计算得到的offset来调整自己的时钟,实现与NTP服务器的时钟同步。
如果从简单实现时钟同步角度来说,NTP是最简单的,因为NTP一个request/response就能够完成同步了,NTP使用UDP协议,端口为123。NTP主要分数据报文和控制报文两大类,request/response报文都是数据报文,报文如下图:
# 集群NTP时间同步
时间同步的方式:以某一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔10分钟同步1次时间。
# 时间服务器配置
注意:必须root用户
# 检查NTP安装
# 检查是否安装
rpm -qa|grep ntp
# 或
yum list installed | grep ntp
2
3
4
# 安装NTP服务
# 安装
yum install -y ntp
2
# 修改NTP配置
修改/etc/ntp.conf
# 备份 ll -a /etc/ntp.conf cp /etc/ntp.conf /etc/ntp.conf.bak20240924 ll -a /etc/ntp.conf* # 修改 vi /etc/ntp.conf
1
2
3
4
5
6修改内容如下:
修改授权网段(192.168.1.0-192.168.1.255)上的所有机器可以从这台机器上查询和同步时间:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
1修改同步时间服务器,并指定为时间服务主机:若仅在局域网中,可以不使用其他互联网上的时间,若支持互联网访问,可使用互联网时间服务器。
# 注释默认的时间服务器 #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 ntp.ntsc.ac.cn prefer ##中国国家授时中心,首选 server ntp.aliyun.com ##阿里云授时,当上面服务器同步不了,则寻找第2个 # 外部时间服务器不可用时,以本地时间作为时间服务 server 127.127.1.0 ## local clock ,127.127.1.0回环地址IP # 设置时间服务器的层级 stratum 0~15 ,0:表示顶级,10:通常用于给局域网主机提供时间服务 fudge 127.127.1.0 stratum 10 ## 填入回环地址,此处设为第10层,通常局域网设为10。其他客户端同步后,就变成了11层
1
2
3
4
5
6
7
8
9
10
11
12参数:
prefer
和iburst
都是作为server
指令的参数。prefer
关注于设置NTP服务器的优先级,在有多个NTP服务器且需要指定首选服务器时,prefer
则更为合适。而
iburst
则关注于优化同步速度和过程,在需要快速同步或网络条件较差的情况下,iburst
更为适用。测试时间服务器是否能够访问:
ping ntp.ntsc.ac.cn -c 5 ping ntp.aliyun.com -c 5
1
2
修改/etc/sysconfig/ntpd
# 备份 ll -a /etc/sysconfig/ntpd cp /etc/sysconfig/ntpd /etc/sysconfig/ntpd.bak20240924 ll -a /etc/sysconfig/ntpd* # 编辑 vi /etc/sysconfig/ntpd
1
2
3
4
5
6增加内容如下:
# 让硬件时间与系统时间同步 SYNC_HWCLOCK=yes
1
2
# 启动NTP服务
# 启动ntp服务
systemctl start ntpd
# 或 service ntpd start
# 设置ntp服务开机自启动
systemctl enable ntpd
# 或 chkconfig ntpd on
# 查看ntp服务状态
systemctl status ntpd
# 重启ntp服务
systemctl restart ntpd
# 停止ntp服务
systemctl stop ntpd
2
3
4
5
6
7
8
9
10
11
12
# 其他机器配置
注意:必须root用户、必须安装ntp
实现客户端的时间同步的两种方法:1)基于ntpd;2)基于ntpdate。
# 基于ntpd
方案:ntpdate+ntpd 优点:可以实现顺滑同步,避免时间不连续带来的问题 缺点:时间同步往往不能立刻完成
修改/etc/ntp.conf
# 备份 ll -a /etc/ntp.conf cp /etc/ntp.conf /etc/ntp.conf.bak20240924 ll -a /etc/ntp.conf* # 修改 vi /etc/ntp.conf
1
2
3
4
5
6# 配置时间服务器,将默认的全部注释掉 #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 # 局域网内的NTP服务器IP server 192.168.102.229 prefer ##首选 # 外部时间服务器不可用时,以本地时间作为时间服务 server 127.127.1.0 ## local clock ,127.127.1.0回环地址IP # 设置时间服务器的层级 stratum 0~15 ,0:表示顶级 fudge 127.127.1.0 stratum 11 ## 填入回环地址,此处设为第11层
1
2
3
4
5
6
7
8
9
10
11修改/etc/sysconfig/ntpd
# 备份 ll -a /etc/sysconfig/ntpd cp /etc/sysconfig/ntpd /etc/sysconfig/ntpd.bak20240924 ll -a /etc/sysconfig/ntpd* # 编辑 vi /etc/sysconfig/ntpd
1
2
3
4
5
6添加内容如下:
# 让硬件时间与系统时间同步 SYNC_HWCLOCK=yes
1
2重启httpd
# 重启ntp服务 systemctl restart ntpd # 查看ntp服务状态 systemctl status ntpd
1
2
3
4查看并同步硬件时间
# 查看系统时间 date # 查看硬件时间 hwclock # 将系统时间同步到硬件 hwclock -w date
1
2
3
4
5
6
7
# 一键配置脚本
# 编辑
sudo vi ntp_client_install.sh
2
#!/bin/bash
# 客户端NTP服务配置脚本(需root权限)
# 用法:./ntp_client_install.sh <服务端IP>
# 示例:./ntp_client_install.sh 192.168.102.229
# 定义颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色
# 入参
NTP_SERVER_IP=$1
# 0.参数校验
if [ $# -lt 1 ]; then
echo -e "${RED}错误:必须提供服务端IP参数!${NC}"
echo -e "正确用法:$0 <服务端IP>"
echo -e "示例:$0 192.168.102.229"
exit 1
fi
# IP正则表达式
regex='^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
if [[ ! $NTP_SERVER_IP =~ $regex ]]; then
echo -e "${RED}错误:服务端IP格式不正确!${NC}"
echo -e "示例:192.168.102.229"
exit 1
fi
# 1. 安装ntp服务(如未安装)
echo -e "安装ntp服务:"
yum install -y ntp
# 2. 备份原始配置文件
echo -e "\n备份原始配置文件:"
cp /etc/ntp.conf /etc/ntp.conf.bak$(date +%Y%m%d)
cp /etc/sysconfig/ntpd /etc/sysconfig/ntpd.bak$(date +%Y%m%d)
ls -a |grep /etc/ntp.conf*
ls -a |grep /etc/sysconfig/ntpd*
# 3. 修改/etc/ntp.conf
echo -e "\n修改/etc/ntp.conf:"
# 注释原 server 0~3 的配置
sed -i '/^server 0.centos.pool.ntp.org iburst/,/^server 3.centos.pool.ntp.org iburst/s/^/#/' /etc/ntp.conf
# 在注释后的 server 3 行下方插入新配置
sed -i "/^#server 3.centos.pool.ntp.org iburst/a server $NTP_SERVER_IP prefer # 时间服务器IP" /etc/ntp.conf
sed -i "/^server $NTP_SERVER_IP prefer # 时间服务器IP/a server 127.127.1.0 # 本地时钟" /etc/ntp.conf
sed -i '/^server 127.127.1.0 # 本地时钟/a fudge 127.127.1.0 stratum 11 # 本地时钟设为第11层' /etc/ntp.conf
cat /etc/ntp.conf
# 4. 配置硬件时间同步
echo -e "\n修改/etc/sysconfig/ntpd:"
echo -e "\n#硬件时间同步\nSYNC_HWCLOCK=yes" >> /etc/sysconfig/ntpd
tail -n 3 /etc/sysconfig/ntpd
# 5. 启动并设置服务
echo -e "\n启动并设置服务:"
systemctl restart ntpd
systemctl enable ntpd
# 6. 验证同步状态(需等待几分钟)
echo -e "\nNTP服务状态:"
systemctl status ntpd
echo -e "\n开始手动同步(共3次):"
for i in {1..3}; do
echo "===== 第 $i 次同步 ====="
ntpdate -u $NTP_SERVER_IP
echo "======================"
sleep 1 # 可选:每次间隔1秒
done
echo -e "\n当前同步节点:"
ntpq -p
echo -e "\n时间差检测:"
ntpstat
# 7. 同步硬件时间
echo -e "\n同步硬件时间:"
hwclock -w
hwclock --show
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 赋权
sudo chmod +x ntp_client_install.sh
# 执行
sudo bash ntp_client_install.sh <管理端IP>
2
3
4
# 基于ntpdate
方案:定时任务(crontab)+ntpdate 优点:实现简单 缺点:会导致客户端时间不连续,对于数据库业务影响是比较大,生产环境尽量不要用
配置同步任务
在其他机器配置10分钟与时间服务器同步1次
# 编辑 crontab -e
1
2添加定时任务内容如下:
*/10 * * * * /usr/sbin/ntpdate 192.168.102.229
1参数:
192.168.102.229
为时间服务器IP测试时间同步
修改任意其他机器时间
# 修改时间 date -s "2011-11-11 11:11:11"
1
210分钟后,查看机器是否与时间服务器相同
# 查看系统时间 date # 查看硬件时间 hwclock # 将系统时间同步到硬件 hwclock -w date
1
2
3
4
5
6
7