现在的系统大多是微服务化架构,且部署方式大多为分布式集群化部署,也就是说系统的各个组件分布在不同的服务器中运行,导致时间同步对于系统的正常运行来说尤为重要, 由于时间不同同步,会导致系统出现各种异常
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。本文,我们采用ntpd做时间同步,ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步
时间时区概念理解:
GMT、UTC、CST、DST
UTC:
整个地球分为二十四时区,每个时区都有自己的本地时间,在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC:Universal Time Coordinated)。
GMT:
格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线(UTC与GMT时间基本相同)。
CST:
中国标准时间 (China Standard Time)
GMT + 8 = UTC + 8 = CST
DST:
夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用(中国不使用)。
1、查看当前服务器时区&列出时区并设置时区(如已是正确时区,请略过):
查看当前系统时间、时区
$ timedatectl Local time: Thu 2018-10-11 13:03:04 CST Universal time: Thu 2018-10-11 05:03:04 UTC RTC time: Thu 2018-10-11 01:17:11 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a $ timedatectl status Local time: Thu 2018-10-11 13:03:09 CST Universal time: Thu 2018-10-11 05:03:09 UTC RTC time: Thu 2018-10-11 01:17:16 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a
列出全世界所有的时区
# timedatectl list-timezones | grep Asia ... Asia/Hong_Kong Asia/Shanghai Asia/TaipeiAsia/Urumqi ...
设置时区
# 方法1: # 将时区设置为上海 $ timedatectl set-timezone Asia/Shanghai #方法2: # 直接修改符号链接 $ rm /etc/localtime$ ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
若坚持要手动修改时间,先timedatectl set-ntp no。
# 设置日期和时间 $ timedatectl set-time '2018-10-11 09:00:00' # 设置日期 $ timedatectl set-time '2018-10-11' # 设置时间 $ timedatectl set-time '09:00:00'
# 方法2:使用date
$ date -s '2018-10-11 09:00:00'
同步系统时间到硬件时间
# 方法1:不建议硬件时间随系统时间变化 # 设置硬件时间随系统时间变化 $ timedatectl set-local-rtc 1 # 设置硬件时间不随系统时间变化 $ timedatectl set-local-rtc 0 # 方法2: $ hwclock --systohc
是否启用自动同步时间
# 启用|停用自动同步时间 $ timedatectl set-ntp yes|no # 上面的命令其实是启用、停用时间服务器,若安装了chrony服务,则等同于对该服务启停,若只安装了ntp,则是对ntp服务启停。 # 对chrony服务启停 $ systemctl start|stop chronyd # 对ntp服务启停 $ systemctl start|stop ntpd
2、确认是否已安装ntp
【命令】rpm –qa | grep ntp
若只有ntpdate而未见ntp,则需删除原有ntpdate。如:
ntpdate-4.2.6p5-22.el7_0.x86_64 fontpackages-filesystem-1.44-8.el7.noarch python-ntplib-0.3.2-1.el7.noarch
删除已安装ntp
【命令】yum –y remove ntpdate-4.2.6p5-22.el7.x86_64
重新安装ntp
【命令】yum –y install ntp
3、安装NTP
yum install -y ntp
说明:如果本机不支持联网,则可以找一台可以上网的服务器把安装包下载下来,然后做离线安装:
yum install --downloadonly --downloaddir=/home ntp
修改NTP配置
/etc/ntp.conf
#在配置中增加以下配置:
#允许上层时间服务器主动修改本机时间
restrict time.pool.aliyun.com nomodify notrap noquery
#允许所有主机通过本机同步时间
restrict default nomodify notrap
#外部时间服务器不可用时,以本地时间作为时间服务
server time.pool.aliyun.com iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
修改完成后保存退出并重启ntp(systemctl restart ntpd)。
说明:
#nomodfiy:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
#noquery:不提供客户端的时间查询。
#notrap:不提供trap这个远程时间登录的功能
4、启动NTP服务&开机启动设置
#启动NTP服务
systemctl start ntpd
#将NTP服务设置为开机启动
systemctl enable ntpd
5、chrony的安装配置
安装chrony
$ yum -y install chrony
配置chrony
$ vim /etc/chrony.conf server ntp1.alyun.com server ntp2.alyun.com server ntp3.alyun.com #server 0.centos.pool.ntp.org iburst...
启动chrony
$ systemctl start chronyd
6、配置计划任务,使用ntpdate同步时间
# 启动并开机启动计划任务cron $ systemctl start crond $ systemctl enable crond # 配置计划任务,每5分钟同步一次 $ crontab -e */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com