Chrony 取代 ntpd


网络时间协议 (NTP) 是计算机在授权系统之间提供和同步时间的标准。计算机可以通过互联网上的公共 NTP 服务获取正确的时间信息,如 NTP Pool Project。另一种选择是通过高质量硬件时钟为本地客户端提供准确时间。

在红帽企业 Linux 8 中,Chrony 是唯一可用的 NTP 服务器实施。 红帽企业 Linux 7 中与 Chrony 一起提供的 ntpd 实施不再可用。 

使用 Chrony 作为默认 NTP 实施

  • Chrony 取代已不再可用的 ntpd。

  • Chrony 使用不同的配置文件,采用的格式也不同。

  • /usr/share/doc/chrony/ntp2chrony.py 脚本可将 /etc/ntp.conf 文件转换为 /etc/chrony.conf

  • timedatectl 可显示当前时间相关系统设置的概览。

  • 使用 timedatectl set-timezone 来定义系统时区。


Chrony 简介

chronyd 服务通过与配置的 NTP 服务器进行同步,使本地硬件时钟 (RTC) 保持正确运行。如果没有可用的网络连接,它将与计算出的 RTC 时钟漂移同步,该漂移记录在 /etc/chrony.conf 配置文件指定的 driftfile 变量中。

默认情况下,chronyd 使用 NTP Pool Project 的服务器同步时间,且不需要额外配置。当涉及的计算机位于孤立网络中时,可能需要更改 NTP 服务器。

/etc/chrony.conf 配置文件中的 server 行提供 NTP 服务器的 IP 地址或 DNS 名称。在服务器 IP 地址或名称之后,您可以列出适用于该服务器的一系列选项。红帽建议使用 iburst 选项,因为在服务启动后,Chrony 会在很短时间内执行四种测量,以获得更加精确的初始时钟同步。

# systemctl status  chronyd

指定NTP服务器:

[root@localhost ~]# cat /etc/chrony.conf# Ansible managed# Allow the system clock to be stepped in the first three updates.makestep 1.0 3# Enable kernel synchronization of the real-time clock (RTC).rtcsync# Record the rate at which the system clock gains/losses time.driftfile /var/lib/chrony/driftserver 8.8.8.8  iburst
保存退出。在配置文件中,pool 指令类似于 server 指令,但它不是指明单个 NTP 服务器,而是指明解析为可能随时间变化的多个地址的 DNS 名称。
重启服务:[root@localhost ~]# systemctl restart chronyd

chronyc 命令充当 chronyd 服务的客户端。设置 NTP 同步后,使用 chronyc sources 命令验证用于与系统时钟同步的 NTP 服务器,或运行 chronyc sources -v 来获得更加详细的输出:


我们看到与google的通讯:

[root@localhost ~]#  chronyc sources -v





将 NTPd配置转换为 Chrony

Chrony 配置文件 /etc/chrony.conf 与 ntpd 配置文件 /etc/ntp.conf 类似 。某些配置指令特定于 Chrony,因为这两个程序具有不同的功能。

值得注意的是,Chrony 中无法使用以下 ntpd 功能。

  • Chrony 不实施广播和多播客户端功能。因此,chrony.conf 中不存在 broadcastclient 和 multicastclient 指令。这些 NTPd 功能可以接收广播或多播 NTP 服务器发送的 NTP 消息。

  • autokey 指令在 chrony.conf 中不可用。在 ntp.conf 中,该指令可激活 NTP 客户端和服务器之间的数据包验证的公钥算法。

  • 在使用对称对等指令时,Chrony 不支持临时关联。例如, peer 指令允许同一级别的两台服务器同步其时钟。当只有一台服务器定义 peer 指令时,另一台服务器可接受连接并建立临时关联。Chrony 不允许这种隐式配置,两台服务器都必须包含 peer 指令。

为便于您将 ntp.conf 文件转换为 chrony.confchrony 软件包在 /usr/share/doc/chrony/ 中提供了 ntp2chrony.py 脚本。使用 --ntp-conf 选项来指定要转换的 ntp.conf 文件。--chrony-conf 选项指定输出 chrony.conf 文件。--chrony-keys 选项指定输出文件的路径,该输出文件包含需要身份验证的服务器的密钥对。在重新启动 chronyd 服务前,检查转换的配置文件。

python3 /usr/share/doc/chrony/ntp2chrony.py  --ntp-conf ./ntp.conf   --chrony-conf ./chrony.conf  --chrony-keys ./chrony.keycp ./chrony.conf ./chrony.key /etcsystemctl restart chronyd





设置时区

timedatectl 命令显示当前时间相关系统设置的概览,如系统的当前时间、时区和 NTP 同步设置。

# timedatectl

NTP与NFS的增强: RHEL8学习系列7_java

系统提供了一个包含已知时区的数据库,您可以通过 timedatectl list-timezones 命令来列出这些时区。


[root@repo ~]#  timedatectl list-timezones

NTP与NFS的增强: RHEL8学习系列7_java_02

tzselect 命令可用于识别时区的正确名称。它以交互方式向用户提示关于系统位置的问题,然后输出正确时区的名称。它不会对系统的时区设置进行任何更改。

以 root 用户身份执行 timedatectl set-timezone 命令,可以调整当前时区的系统设置。

[root@repo ~]# timedatectl set-timezone America/Phoenix
[root@repo ~]# timedatectl
     Local time: Tue 2020-03-31 00:05:25 MST
 Universal time: Tue 2020-03-31 07:05:25 UTC
       RTC time: Tue 2020-03-31 07:05:25
      Time zone: America/Phoenix (MST, -0700)
    NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
      DST active: n/a




NFS的增强

Red Hat Enterprise Linux 8 支持使用网络文件系统 (NFS) 4.2。

Red Hat Enterprise Linux 8 NFS 增强功能

  • Red Hat Enterprise Linux 8 中默认的 NFS 版本为 4.2,支持 NFSv4 和 NFSv3 主版本,但不再支持 NFSv2。

  • NFS 配置文件为 /etc/nfs.conf 。/etc/sysconfig/nfs 配置文件已被淘汰。

  • 引入了新的 nfsconf 工具来管理 NFS 配置文件。

  • autofs 服务将 /etc/auto.master(主映射)用作其默认配置文件。amd 格式也可识别。

  • Red Hat Enterprise Linux 8 移除了 nfsnobody 用户,并将 nobody 用户和组的 UID 和 GID 更改为 65534。任何不存在的 UID 或 GID 都映射到 nobody 用户和组。

  • NFSv4 不再需要运行 rpcbind服务,免除了对 UDP 连接的需求。

NFS   4.2 功能

  • 借助服务器端复制,NFS 客户端能够高效复制 NFS 文件系统内的数据,而不会浪费网络资源。

  • 稀疏文件使文件具有多个孔,这些孔是仅由零组成的数据块。它们作为零传输,提高了整体速度。

  • 空间预留允许在 NFS 服务器上保留可用空间,防止服务器空间不足。

  • 标记的 NFS 强制实施数据访问权限,并在 NFS 文件系统上启用 SELinux。

nfsconf 工具

  • Red Hat Enterprise Linux 8 引入了 nfsconf 工具,用于管理 NFS 客户端和服务器配置文件。

  • nfsconf 工具可用于获取、设置或测试 NFS 配置文件。

  • nfsconf 工具可处理 NFSv4 和 NFSv3 配置。

  • 默认的 nfsconf 配置文件为 /etc/nfs.conf

  • nfsconf --file 可加载备用配置文件位置。


通过 nfsconf 工具进行配置,禁用标记 udp、vers2 和 vers3。通过 nfsconf 工具进行配置,启用标记 vers4、vers4.0、vers4.1 和 vers4.2。

# nfsconf --set nfsd udp n# nfsconf --set nfsd vers2 n# nfsconf --set nfsd vers3 n# nfsconf --set nfsd tcp y# nfsconf --set nfsd vers4 y# nfsconf --set nfsd vers4.0 y# nfsconf --set nfsd vers4.1 y# nfsconf --set nfsd vers4.2 y


禁用对 RPCBINDMOUNT 和 NSM 协议调用的侦听,NFSv4 的用例中不需要它们。禁用相关的服务:

[root@localhost ~]#  systemctl mask --now rpc-statd.service  rpcbind.service rpcbind.socketCreated symlink /etc/systemd/system/rpc-statd.service → /dev/null.Created symlink /etc/systemd/system/rpcbind.service → /dev/null.Created symlink /etc/systemd/system/rpcbind.socket → /dev/null.

现在查看nfs的配置文件 /etc/nfs.conf:

[root@localhost ~]# cat  /etc/nfs.conf## This is a general configuration for the# NFS daemons and tools#[general]# pipefs-directory=/var/lib/nfs/rpc_pipefs#[exportfs]# debug=0#[gssd]# verbosity=0# rpc-verbosity=0# use-memcache=0# use-machine-creds=1use-gss-proxy=1# avoid-dns=1# limit-to-legacy-enctypes=0# context-timeout=0# rpc-timeout=5# keytab-file=/etc/krb5.keytab# cred-cache-directory=# preferred-realm=#[lockd]# port=0# udp-port=0#[mountd]# debug=0# manage-gids=n# descriptors=0# port=0# threads=1# reverse-lookup=n# state-directory-path=/var/lib/nfs# ha-callout=#[nfsdcltrack]# debug=0# storagedir=/var/lib/nfs/nfsdcltrack#[nfsd]udp = nvers2 = nvers3 = ntcp = yvers4 = yvers4.0 = yvers4.1 = yvers4.2 = y# debug=0# threads=8# host=# port=0# grace-time=90# lease-time=90# tcp=y# vers2=n# vers3=y# vers4=y# vers4.0=y# vers4.1=y# vers4.2=y# rdma=n#[statd]# debug=0# port=0# outgoing-port=0# name=# state-directory-path=/var/lib/nfs/statd# ha-callout=# no-notify=0#[sm-notify]# debug=0# force=0# retry-time=900# outgoing-port=# outgoing-addr=# lift-grace=y#

重启 nfs-server 服务以应用这些更改。

systemctl restart nfs-server

以 root 用户身份使用 ss 命令来检查正在侦听的端口。


[root@localhost ~]# ss --listening --tcp --udp

在 servera 上配置 firewalld,以允许 NFSv4 服务。

[root@localhost ~]# firewall-cmd --add-service=nfssuccess[root@localhost ~]# firewall-cmd --runtime-to-permanentsuccess[root@localhost ~]#  firewall-cmd --list-servicescockpit dhcpv6-client dns nfs ntp ssh

配置 servera,以使用 NFSv4 服务器导出内容。

[root@localhost ~]#  mkdir /exports[root@localhost ~]# chown nobody:nobody /exports[root@localhost ~]# semanage fcontext -a -t nfsd_fs_t "/exports(/.*)?"[root@localhost ~]# cat << EOF > /etc/exports.d/example.exports> /exports *(rw,root_squash)> EOF[root@localhost ~]#  exportfs -r[root@localhost ~]# exportfs/exports        <world>

 serverb 配置为 servera NFSv4 导出的客户端系统,并使用 autofs。

systemctl enable --now autofs

在 serverb 上创建一个挂载点文件夹。

# mkdir -p /mnt/exports

在 serverb 上配置 /etc/auto.master 文件。

# echo "/mnt/exports  /etc/auto.exports" >> /etc/auto.master

在 serverb 上使用 map-file 配置 /etc/auto.exports

[cat << EOF > /etc/auto.exports> example  -fstype=nfs4  192.168.137.202:/exports/example> EOF systemctl restart autofs