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