当前位置: 首页 > news >正文

虚拟机时间同步

一、常见同步方式

常见的虚拟机同步方式有给虚拟机配置ntp、或者用平台提供的agent对时与虚拟机所在的宿主机。第一种依赖网络、第二种依赖平台的agent这个三方工具。

二、利用ptp_kvm.ko来直接和宿主机同步时间

关键组件
ptp_kvm驱动、chrony。
PTP_KVM同步原理

|----------------------------|              |--------------------------|
|       guest userspace      |              |          host            |
|ioctl -> /dev/ptp%d         |              |                          |
|       ^   |                |              |                          |
|----------------------------|              |                          |
|       |   | guest kernel   |              |                          |
|       |   V      (get host walltime/counter cycle)                   |
|      ptp_kvm -> hypercall - - - - - - - - - - ->hypercall service    |
|                         <- - - - - - - - - - - -                     |
|----------------------------|              |--------------------------|1. time sync service in guest userspace call ptp device through /dev/ptp%d.
2. ptp_kvm module in guest recive this request then invoke hypercall to route
into host kernel to request host walltime/counter cycle.
3. ptp_kvm hypercall service in host response to the request and send data back.
4. ptp (not ptp_kvm) in guest copy the data to userspace.This ptp_kvm implementation focuses itself to step 2 and 3 and step 2 works
in guest comparing step 3 works in host kernel.

该同步不需要依赖网络
测试验证准备
1.创建一台虚拟机,并关闭虚拟机的时间同步功能(如果还不放心可以直接停止虚拟机所在hyper上的compute_agent)。
2.检查当前虚拟机是否含有ptp_kvm驱动。
3.安装chrony。

配置相关参数
虚拟机内部

1.echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf。配置完成后重启虚拟机。
2.echo "refclock PHC /dev/ptp0 poll 1" >> /etc/chrony/chrony.conf。指定chrony的时钟源为ptp。
3.重启下chrony服务。
4.执行chronyc sources命令,能看到步骤2配置的时钟源,即配置成功。

测试
从上述“PTP_KVM同步原理”中的描述可以看到,对于宿主机没有做特别说明。那分别测试两个方面即物理机启动一个ptpd程序和物理机不启动一个ptpd程序。

经过测试,虚拟机所在物理机有无ptpd程序,虚拟机都可以正常同步物理机的时间到虚拟机内部。

1.用date 030112302023打乱虚拟机内部的local时间。

2.然后观察虚拟机内部时间能否自动恢复正常。经过观察能恢复正常,时间在5s左右。
总结
1.这种同步时间的方式不依赖网络,直接通过ptp_kvm驱动去从虚拟机所在的宿主机获取宿主机的时间,这个时候虚拟机把宿主机看作时间源。

2.这种ptp_kvm方式的同步。对应虚拟机必须要用ptp_kvm这个驱动。

3.当出现虚拟机和宿主机时间不一致时,能够在较短时间同步到一致状态(5s左右)。
说明
用这个配置,可以把同步时间缩短到2s左右
在这里插入图片描述
效果如下
在这里插入图片描述
验证过程中是停掉了compute_agent、 systemd-timesyncd服务的。
其它
/etc/chrony/chrony.conf

默认

makestep 1.0 3 # 只有在同步的第 3 次以内,系统时间偏差大于 1 秒时才允许 “跳变” 同步。之后如果你手动改了时间,它就不会纠正,而是退出或保持不同步状态。

改成

makestep 0.1 -1 # 如果系统时间与 NTP 时间相差超过 0.1 秒(100 毫秒),那么允许 立刻强制跳变(step)修正时间,-1 表示这种修正行为可以发生无限次(不限于前几次启动)。

参考

https://lwn.net/Articles/830643/
https://blog.51cto.com/u_16213579/9972962
http://blog.csdn.net/qq_24489251/article/details/126697188

http://www.xdnf.cn/news/933643.html

相关文章:

  • Python Web项目打包(Wheel)与服务器部署全流程
  • 前端知识导图
  • 嵌入式面试常问问题
  • Spring框架的设计模式
  • 31.1linux中Regmap的API实验(知识)_csdn
  • 【版本控制】Git 和 GitHub 入门教程
  • Flink CDC 中 StartupOptions 模式详解
  • LambdaqueryWrapper的介绍与使用
  • F(x,y)= 0 隐函数 微分法
  • STL详解——list的模拟实现
  • 【CSS-7】深入解析CSS伪类:从基础到高级应用
  • 【Linux】gcc、g++编译器
  • 香橙派3B学习笔记8:snap安装管理软件包_打包俩个有调用的python文件
  • 机器人/智能车纯视觉巡线经典策略—滑动窗口+直方图法
  • Unity3D 开发中的创新技术:解锁 3D 开发的新境界
  • SQL 注入开放与修复
  • NLP学习路线图(三十三): 文本分类
  • LiveCycle Designer 创建提交表单
  • FlexRay总线
  • web架构4------(nginx常用变量,nginx中英文自动匹配,lnmp网站架构,正向代理,反向代理,负载均衡)
  • GPU虚拟化
  • 【 SpringCloud | 微服务 MQ基础 】
  • 【AS32系列MCU调试教程】深度解析:使用 Eclipse 调试AS32系列MCU芯片的工程搭建
  • 永磁同步电机无速度算法--自适应龙贝格观测器
  • 技术栈Etcd的介绍和使用
  • RMQ 算法详解(区间最值问题)
  • 自然语言处理——文本分类
  • Unity使用代码分析Roslyn Analyzers
  • 湖北理元理律师事务所视角:企业债务优化的三维平衡之道
  • Python训练打卡Day43