你的Linux服务器每运行一段时间,服务器时间就不准了,不是快就是慢。你经常需要登录服务器手动通过命令来设置服务器时间,这种操作即繁琐又低效。

一台还好,手动同步一下也不费什么时间,如果是好几台呢,那你就得掂量掂量手动同步的工作量了。

服务器时间同步在集群环境,数据库主从备份等场景非常有用,如果服务器时间不一致可能会导致各种各样的问题。那么如何同步时间,保持服务器时间一致在实际生产环境中就显得非常重要。

一、本文解决问题

查看时区

 date +”%Z”

1、修正时区,将EDT修改为CST。

2、Linux服务器如何进行时钟同步。

3、如何搭建自己的时钟服务器(NTP Server),其它服务器和该时钟服务器同步。

二、修正时区

通常,我们使用date命令可以查看当前服务器时间以及设置当前服务器时间。例如,终端中我们输入date命令,默认会输出如下内容:

[root@localhost ~]# date
Thu May 28 03:45:30 EDT 2020

有时候系统默认显示时区不对,显示为EDT时区,正好和北京时间相差12个小时,这时候我们就需要修改一下系统的时区,将其修改为CST时区。

修改方法如下:

mv /etc/localtime /etc/localtime.bak						#备份原文件
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  #修改为
date

输出结果如下:

Thu May 28 15:46:59 CST 2020

这时候时间就显示为正常的北京时间了。

三、同步Linux服务器时间

在Linux系统中同步时间时,你需要了解ntpdate这个命令,默认该命令在主流的Linux发行版中都有安装,默认安装路径/usr/sbin/ntpdate

以下操作皆在root帐号下进行,如果使用非root帐号,则需要该帐号为sudo用户能进行root权限的操作。

1、安装ntpddate

如果你的Linux系统中没有安装,你可以通过如下命令进行安装:

#centos,redhat系列
yum install ntpdate

#debian,ubuntu系列
apt install ntpdate

#archlinux系列
pacman -S ntpdate

2、通过ntpdate命令从时钟服务器同步

我们这里选用中国ntp服务器cn.pool.ntp.org来作为时钟同步的来源。为能正常访问到cn.pool.ntp.org,你的Linux系统应该能访问外网才行。

执行命令如下:

ntpdate cn.pool.ntp.org

3、配置crontab自动执行同步

如果每次手动执行,显然是很麻烦的。这里,我们使用crontab定时任务来定期执行ntpdate同步命令,例如我们每10分钟或一小时执行一次,可以通过以下方式实现。

首先在命令终端中输入crontab -e命令,然后输入如下命令保存即可。

crontab -e

开始编辑文件内容,输入定时执行命令:

#每10分钟执行一次
*/10 * * * * /usr/sbin/ntpdate cn.pool.ntp.org

或者

#每一个小时执行一次
0 * * * * /usr/sbin/ntpdate cn.pool.ntp.org

四、如何搭建时钟服务器(NTP Server)

1、安装NTP服务

一条命令即可安装,这里以centos7下安装为例。

yum install -y ntp ntpdate

2、配置NTP服务

ntp配置文件的路径是/etc/ntp.conf,修改改配置文件时先进行备份。

cp  /etc/ntp.conf /etc/ntp.conf.bak   #备份
vim /etc/ntp.conf                     #vim编辑文件

配置文件中,增加如下内容:

# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

这个是用来允许192.168.1.*这个网段的服务器都可以使用该ntp服务器同步时间。这里可以根据你实际情况来设定网段。

同时添加指定一台内网服务器作为本地时钟服务器用于无法链接外网时,其它服务器同步时间是以该服务器为准。

server 192.168.1.2

整体配置后的文件,主要内容如下:

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1

# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#定义上游使用的ntp服务器
server cn.pool.ntp.org prefer
#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 192.168.1.2
fudge  192.168.1.2 stratum 10

#broadcast 192.168.1.255 autokey        # broadcast server
#broadcastclient                        # broadcast client
#broadcast 224.0.1.1 autokey            # multicast server
#multicastclient 224.0.1.1              # multicast client
#manycastserver 239.255.254.254         # manycast server
#manycastclient 239.255.254.254 autokey # manycast client

# Enable public key cryptography.
#crypto

includefile /etc/ntp/crypto/pw
...

3、启动NTP服务

配置文件配置好保存后,我们可以通过systemctl命令来启动ntp服务。

systemctl start ntpd

服务启动后可以通过ntpstat命令来验证服务是否正常。

[root@localhost ~]# ntpstat
synchronised to NTP server (162.159.200.123) at stratum 4
   time correct to within 227 ms
   polling server every 1024 s

4、客户端同步时间

客户端同步时间的方式可以以第三部分中讲到的方式进行同步,即通过ntpdate命令同步。

ntpdate 192.168.1.2

可以将该命令作为crontab任务进行定时运行即可完成客户端机器的时间同步。

五、写在最后

至此,如何进行Linux服务器时间的同步以及搭建NTP时钟服务已经讲解完了。如果你现在还没碰到这样的问题不妨先将该文收藏,有备无患。

如果你有更好的建议或不同的见解不妨留言讨论。

Logo

更多推荐