Linux虚拟机时间同步问题

近期单位新创建了一台虚拟机(在ESXI上创建),安装的系统是centos7,并为虚拟机配置了正确的时区,运行虚拟机后,发现本地时间总是快8小时,随后配置了ntp服务器,但在虚拟机重新启动后,本地时间还是快8小时。本文详细分析了原因,并给出了彻底解决ESXI虚拟机时间同步问题的方法。

一 ESXI 主机的时间设置

esxi 虚拟机时区 esxi虚拟机时间错误_服务器

1 虚拟机时间快8个小时的原因

ESXI 主机在有些场合是不连接互联网的,所以也就无法做到与互联网NTP服务器的时间同步,只能手动设置时间。在手动设置时间的过程中,ESXI主机没有时区的概念,只有一个UTC时间,但用户往往错把这个时间设置为此刻的本地时间。所以虚拟机在启动的过程中,往往会自动同步esxi主机的时间,并把虚拟机的UTC时间同步为ESXI的时间,加之虚拟机设置了时区,所有虚拟机本机时间就会加上8个小时,这就是内在的原因。

虚拟机没有自己的BIOS时钟,开机时只能靠ESXI主机的时间来同步。

2 关于ESXI主机的时间和日期

  1. ESXI 没有时区的概念,只有一个UTC时间.
  2. 在ESXI 中可以设定ntp服务器,来自动调整 esxi主机的utc时间.
  3. 在ESXI主机中创建的虚拟机,每当虚拟机重新启动时,都会同步ESXI 主机的时间.
  4. 如果虚拟机可以联网,也可以单独设置虚拟机的NTP时间同步。

二 虚拟机中安装与配置时间同步服务 chrony

# 安装 chrony
yum install chrony ntpdate
# 启动chrony
systemctl start chronyd
# 设置开机启动
systemctl enable chronyd

三 配置本机自动与互联网时间服务器同步

  1. yum 安装的 chrony的配置文件
rpm -ql chrony
  1. chrony 初始配置
vim /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
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

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony
  1. 一般把公共NTP服务器设置为国内源
vim /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).

# 国家授时中心NTP服务器
pool  ntp.ntsc.ac.cn  iburst
# 阿里云时间源
pool  ntp.aliyun.com   iburst
# 腾讯云源
pool  ntp.tencent.com  iburst
# 上海交通大学
pool  ntp.sjtu.edu.cn  iburst

#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

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking
  1. 虚拟机与ntp服务器同步
#方法1运行客户端程序可以随时与 NTP服务器同步
ntpdate -u ntp.aliyun.com、
#方法2重新启动NTP服务
systemctl restart chronyd

四 把本机作为时间服务器对外提供时间服务

  1. 保证本机与其他主机之间的网络畅通
  2. 仅需修改 chrony.conf 的 少量参数
vim /etc/chrony.conf
.......
# 设置允许 10.31.0.0 这个网段的机器作为客户端来本机同步时间
# Allow NTP client access from local network.
allow 10.31.0.0/16

# Serve time even if not synchronized to a time source.
local stratum 10
....
  1. 重新启动 chronyd 服务
systemctl  restart chronyd
  1. 把NTP服务加入防火墙
[root@wyf-test ~]# firewall-cmd  --permanent --add-service=ntp
[root@wyf-test ~]# firewall-cmd  --reload
[root@wyf-test ~]# firewall-cmd  --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: dhcpv6-client ntp ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  1. 如何使用自建的NTP服务器
#1 安装 chrony服务,修改 chrony.conf 
...
# 把server 设置为已搭建的NTP服务器的IP
...
# 启动 chronyd 服务

#也可以随时手动同步时间
ntpdate IP(自己大劫案的NTP服务器的IP)

icmp-blocks:
rich rules:

4. 如何使用自建的NTP服务器

#1 安装 chrony服务,修改 chrony.conf

把server 设置为已搭建的NTP服务器的IP

启动 chronyd 服务

#也可以随时手动同步时间
ntpdate IP(自己大劫案的NTP服务器的IP)