Ceph Monitor时钟同步

在完成 Ceph集群添加ceph-mon 添加第二个 z-b-data-2 monitor节点之后,我注意到 ceph -s 提示第二个节点时间异常:

clock skew detected on mon.z-b-data-2

其实这两个虚拟机 z-b-data-1z-b-data-2 是位于同一个物理服务器 zcloud 上,KVM提供了虚拟化时钟,理论上应该两者一致。但是为何还会有警告呢?

通过ssh到服务器上检查,发现KVM虚拟机确实存在微小的时间差异:

huatai@zcloud:~$ date;for i in 192.168.6.204 192.168.6.205 192.168.6.206;do ssh $i 'hostname;date';done
Sat 04 Dec 2021 01:42:52 PM CST
z-b-data-1
Sat 04 Dec 2021 01:42:53 PM CST
z-b-data-2
Sat 04 Dec 2021 01:42:55 PM CST
z-b-data-3
Sat 04 Dec 2021 01:43:03 PM CST
huatai@zcloud:~$ date;for i in 192.168.6.204 192.168.6.205 192.168.6.206;do ssh $i 'hostname;date';done
Sat 04 Dec 2021 01:42:54 PM CST
z-b-data-1
Sat 04 Dec 2021 01:42:54 PM CST
z-b-data-2
Sat 04 Dec 2021 01:42:56 PM CST
z-b-data-3
Sat 04 Dec 2021 01:43:05 PM CST

最小时间差异2秒,最大11秒。而且物理主机时间和最接近的虚拟机时间似乎也相差半秒到1秒。

备注

实际上Ubuntu默认已经安装了 systemd-timesyncd 服务并默认启动,不过,我的KVM虚拟机 z-b-data-X 都是内网虚拟机,不能直接连接Internet,所以导致长时间运行后时间偏移。这里我需要解决在本地物理服务器上提供NTP服务(物理服务器直连Internet可以实时同步时间),来校准虚拟机的时钟。

这让我有点诧异,我原本以为KVM时钟至少本机能提供比较精确的时间,看来还是需要在我的 私有云架构 :

部署 chrony 服务器

  • 登陆 zcloud 物理服务器,执行以下命令安装:

    sudo apt install chrony
    
  • 编辑 /etc/chrony/chrony.conf 添加服务配置:

    allow 192.168.6.0/24
    

备注

其他配置保持默认

  • 启动服务:

    sudo systemctl restart chrony.service
    sudo systemctl enable chrony.service
    
  • 检查服务状态正常:

    sudo systemctl status chrony.service
    

配置客户机Systemd Timesyncd服务

备注

详情参考 Systemd Timesyncd服务

  • 登陆所有KVM虚拟机,执行安装:

    sudo apt install systemd-timesyncd
    

备注

操作系统默认已经安装和启动 systemd-timesyncd ,但是需要配置采用前述部署的局域网内部NTP服务器

  • /etc/systemd/timesyncd.conf 修改:

    [Time]
    NTP=192.168.6.200
    
  • 重启 systemd-timesyncd 服务:

    systemctl restart systemd-timesyncd
    

然后检查同步配置:

timedatectl show-timesync --all

可以看到:

LinkNTPServers=
SystemNTPServers=192.168.6.200
FallbackNTPServers=ntp.ubuntu.com
ServerName=192.168.6.200
ServerAddress=192.168.6.200
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=32s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-24, RootDelay=37.094ms, RootDispersion=350us, Reference=CA701FC5, OriginateTimestamp=Sat 2021-12-04 22:24:01 CST, ReceiveTimestamp=Sat 2021-12-04 22:24:00 CST, TransmitTimestamp=Sat 2021-12-04 22:24:00 CST, DestinationTimestamp=Sat 2021-12-04 22:24:01 CST, Ignored=no PacketCount=1, Jitter=0  }
Frequency=0

时钟服务器已经指向 192.168.6.200 也就是 zcloud 服务器上自建的NTP服务器

备注

注意需要修订 z-ubuntu20 模版服务器的配置,方便后续创建虚拟机直接生效

检查

  • 完成时钟同步之后,再次检查可以看到虚拟机时间已经完全一致:

    date;for i in 192.168.6.204 192.168.6.205 192.168.6.206;do ssh $i 'hostname;date';done
    

输出显示:

Sat 04 Dec 2021 10:29:04 PM CST
z-b-data-1
Sat 04 Dec 2021 10:29:04 PM CST
z-b-data-2
Sat 04 Dec 2021 10:29:04 PM CST
z-b-data-3
Sat 04 Dec 2021 10:29:04 PM CST
  • 此时检查 Ceph集群健康状态,可以看到时钟差异告警已经消失