10.9. 将您的计算节点与 Timemaster 同步
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
使用时间协议在系统之间保持一致的时间戳。
Red Hat OpenStack Platform(RHOSP)包括对 Precision Time Protocol(PTP)和网络时间协议(NTP)的支持。
您可以使用 NTP 在 millisecond 范围内同步网络中的时钟,您可以使用 PTP 将时钟同步到更高、微秒的准确性。PTP 用例的示例是虚拟无线电访问网络(vRAN),它包含多个 antennas,它提供更高的吞吐量,并具有更高的干扰风险。
timemaster 是一个使用 ptp4l
和 phc2sys
与 chronyd
或 ntpd
结合的程序,将系统时钟与 NTP 和 PTP 时间源同步。phc2sys
和 ptp4l
程序使用 Shared Memory Driver(SHM)引用时钟将 PTP 时间发送到 chronyd
或 ntpd
,后者与时间源与系统时钟进行比较。
Red Hat Enterprise Linux(RHEL)内核中的 PTPv2 协议的实现是 linuxptp
。
linuxptp
软件包包括 PTP 边界时钟和普通时钟同步的 ptp4l
程序,以及硬件时间戳的 phc2sys
程序。有关 PTP 的更多信息,请参阅 Red Hat Enterprise Linux 系统管理员指南中的 PTP 简介。
Chrony 是 NTP 协议的实现。Chrony 的两个主要组件是 chronyd
(Chrony 守护进程),chronyc
守护进程是 Chrony 命令行界面。
有关 Chrony 的更多信息,请参阅 配置基本系统设置指南中的使用 Chrony 套件配置 NTP。
以下镜像是 PTP 配置中数据包之旅概述。
图 10.1. PTP 数据包之旅概述
以下镜像是 PTP 配置中 Compute 节点上的数据包之旅概述。
图 10.2. PTP 数据包之旅详情
10.9.1. timemaster 硬件要求
请确定您有以下硬件功能:
- 您已使用硬件时间戳功能配置了 NIC。
- 您已将交换机配置为允许多播数据包。
- 您已将交换机配置为作为边界或透明时钟。
您可以使用 ethtool -T <device>
命令验证硬件时间戳。
$ ethtool -T p5p1 Time stamping parameters for p5p1: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 6 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC) ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT)
您可以使用透明或边界时钟交换机,提高准确性和延迟。您可以为边界时钟使用 uplink 开关。边界时钟切换使用 PTPv2 标头上的 8 位 correctionField
更正延迟变体,并确保最终时钟的准确性更大。在透明时钟切换中,最终时钟将计算延迟变化,而不是 correctionField
。
10.9.2. 配置 Timemaster
overcloud 节点上的时间同步的默认 Red Hat OpenStack Platform(RHOSP)服务是 OS::TripleO::Services::Timesync
。
已知限制
- 为虚拟化控制器启用 NTP,并为裸机节点启用 PTP。
-
VirtIO 接口不兼容,因为
ptp4l
需要兼容的 PTP 设备。 -
对带有 SR-IOV 的虚拟机使用物理功能(PF)。虚拟功能(VF)不会公开 PTP 所需的寄存器,虚拟机使用
kvm_ptp
来计算时间。 - 具有多个源的高可用性(HA)接口以及多个网络路径不兼容。
流程
要在属于您选择的角色的节点上启用 Timemaster 服务,请将包含
OS::TripleO::Services::Timesync
的行替换为 role_data.yaml 文件中的 roles
::TripleO::Services::TimeMaster
。#- OS::TripleO::Services::Timesync - OS::TripleO::Services::TimeMaster
为您使用的计算角色配置 heat 参数。
#Example ComputeSriovParameters: PTPInterfaces: ‘0:eno1,1:eno2’ PTPMessageTransport: ‘UDPv4’
在
openstack overcloud deploy
命令中包含新环境文件,以及其他与您环境相关的环境文件:$ openstack overcloud deploy \ --templates \ … -e <existing_overcloud_environment_files> \ -e <new_environment_file1> \ -e <new_environment_file2> \ …
- 使用现有部署一部分的环境文件列表替换。<existing_overcloud_environment_files>
- 将 <new_environment_file> 替换为您要包含在 overcloud 部署过程中的新环境文件或文件。
验证
使用命令
phc_ctl
,使用ptp4linux
安装以查询 NIC 硬件时钟。# phc_ctl <clock_name> get # phc_ctl <clock_name> cmp
10.9.3. timemaster 配置示例
$ cat /etc/timemaster.conf # Configuration file for timemaster #[ntp_server ntp-server.local] #minpoll 4 #maxpoll 4 [ptp_domain 0] interfaces eno1 #ptp4l_setting network_transport l2 #delay 10e-6 [timemaster] ntp_program chronyd [chrony.conf] #include /etc/chrony.conf server clock.redhat.com iburst minpoll 6 maxpoll 10 [ntp.conf] includefile /etc/ntp.conf [ptp4l.conf] #includefile /etc/ptp4l.conf network_transport L2 [chronyd] path /usr/sbin/chronyd [ntpd] path /usr/sbin/ntpd options -u ntp:ntp -g [phc2sys] path /usr/sbin/phc2sys #options -w [ptp4l] path /usr/sbin/ptp4l #options -2 -i eno1
10.9.4. timemaster 操作示例
$ systemctl status timemaster ● timemaster.service - Synchronize system clock to NTP and PTP time sources Loaded: loaded (/usr/lib/systemd/system/timemaster.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-08-25 19:10:18 UTC; 2min 6s ago Main PID: 2573 (timemaster) Tasks: 6 (limit: 357097) Memory: 5.1M CGroup: /system.slice/timemaster.service ├─2573 /usr/sbin/timemaster -f /etc/timemaster.conf ├─2577 /usr/sbin/chronyd -n -f /var/run/timemaster/chrony.conf ├─2582 /usr/sbin/ptp4l -l 5 -f /var/run/timemaster/ptp4l.0.conf -H -i eno1 ├─2583 /usr/sbin/phc2sys -l 5 -a -r -R 1.00 -z /var/run/timemaster/ptp4l.0.socket -t [0:eno1] -n 0 -E ntpshm -M 0 ├─2587 /usr/sbin/ptp4l -l 5 -f /var/run/timemaster/ptp4l.1.conf -H -i eno2 └─2588 /usr/sbin/phc2sys -l 5 -a -r -R 1.00 -z /var/run/timemaster/ptp4l.1.socket -t [0:eno2] -n 0 -E ntpshm -M 1 Aug 25 19:11:53 computesriov-0 ptp4l[2587]: [152.562] [0:eno2] selected local clock e4434b.fffe.4a0c24 as best master