XenServer

使用 xe CLI 应用更新

使用 xe CLI 将更新应用于您的 XenServer 8.4 主机和池。

完成以下步骤以更新您的 XenServer® 池:

  1. 为您的池配置更新。

    您可以从以下位置为池或独立主机配置更新:

    此外,您可以从以下位置为独立主机配置更新:

    • 现有池。此方法使您能够将独立主机更新到与池相同的级别。建议将新安装的主机加入到未处于最新更新级别的池中时使用此方法。
  2. 将您的池与配置的更新通道同步。

  3. 查看池的可用更新

  4. 了解指导类别和更新任务

  5. 将更新应用于您的池

  6. 完成任何待处理的更新任务

来自 CDN 的更新

要从 CDN 更新,您的环境必须满足以下先决条件:

  • 确保您的 XenServer 主机具有互联网访问权限,并且可以连接到所需的更新域。
  • 如果您的主机位于防火墙后面,请允许访问 ops.xenserver.com 的子域。有关更多信息,请参阅 连接要求

注意:

仅当池的先前状态不超过六个月时,才能确保更新成功。如果您超过六个月未应用更新,则更新到最新的更新级别未经测试且无法保证。

配置 CDN 更新通道

请按照以下步骤配置您的主机以从 CDN 应用更新:

  1. 为您的池创建并启用抢先体验更新通道:

    pool_uuid=$(xe pool-list --minimal)
    
    base_binary_url="https://repo.ops.xenserver.com/xs8/base"
    base_source_url="https://repo-src.ops.xenserver.com/xs8/base"
    base_repo_uuid=$(xe repository-introduce name-label=base_repo name-description=Base binary-url=<base_binary_url> source-url=<base_source_url> update=false)
    
    update_binary_url="https://repo.ops.xenserver.com/xs8/earlyaccess"
    update_source_url="https://repo-src.ops.xenserver.com/xs8/earlyaccess"
    update_repo_uuid=$(xe repository-introduce name-label=early_access_repo name-description="Early Access" binary-url=<update_binary_url> source-url=<update_source_url> update=true)
    
    xe pool-param-set uuid=$pool_uuid repositories=<base_repo_uuid>,<update_repo_uuid>
    <!--NeedCopy-->
    

    或者,为您的池创建并启用普通更新通道:

    pool_uuid=$(xe pool-list --minimal)
    
    base_binary_url="https://repo.ops.xenserver.com/xs8/base"
    base_source_url="https://repo-src.ops.xenserver.com/xs8/base"
    base_repo_uuid=$(xe repository-introduce name-label=base_repo name-description=Base binary-url=<base_binary_url> source-url=<base_source_url> update=false)
    
    update_binary_url="https://repo.ops.xenserver.com/xs8/normal"
    update_source_url="https://repo-src.ops.xenserver.com/xs8/normal"
    update_repo_uuid=$(xe repository-introduce name-label=normal name-description="Normal" binary-url=<update_binary_url> source-url=<update_source_url> update=true)
    
    xe pool-param-set uuid=$pool_uuid repositories=<base_repo_uuid>,<update_repo_uuid>
    <!--NeedCopy-->
    
  2. 检索当前启用的存储库 UUID 列表:

    pool_uuid=$(xe pool-list --minimal)
    xe pool-param-get uuid=$pool_uuid param-name=repositories
    <!--NeedCopy-->
    
  3. 使用存储库 UUID 查看特定存储库的更多详细信息:

    xe repository-param-list uuid=<UUID>
    <!--NeedCopy-->
    
  4. (可选)配置并启用一个 HTTP 连接代理服务器,用于主机与托管存储库的公共 CDN 之间的通信:

    xe pool-configure-repository-proxy proxy-url=<http://proxy.example.com> proxy-username=<proxy-user> proxy-password=<proxy-password>
    <!--NeedCopy-->
    

    禁用代理服务器配置:

    xe pool-disable-repository-proxy
    <!--NeedCopy-->
    

    查看代理服务器配置:

    pool_uuid=$(xe pool-list --minimal)
    xe pool-param-get uuid=$pool_uuid param-name=repository-proxy-url
    xe pool-param-get uuid=$pool_uuid param-name=repository-proxy-username
    <!--NeedCopy-->
    

同步池的新更新

通过配置同步计划,使您的池能够自动与更新通道同步。您可以安排同步每天进行,或每周在特定日期进行。将您的池与更新通道同步会将所有可用更新下载到池协调器,然后您可以将所有下载的更新应用到您的池。

  1. 将您的池设置为每日同步:

    xe pool-configure-update-sync update-sync-frequency=daily update-sync-day=0
    xe pool-set-update-sync-enabled value=true
    <!--NeedCopy-->
    

    或者,将您的池设置为每周同步:

    xe pool-configure-update-sync update-sync-frequency=weekly update-sync-day=1 (# 0 is Sunday, 1 is Monday, etc)
    xe pool-set-update-sync-enabled value=true
    <!--NeedCopy-->
    
  2. 查看您的同步配置:

    pool_uuid=$(xe pool-list --minimal)
    xe pool-param-get uuid=$pool_uuid param-name=update-sync-frequency
    xe pool-param-get uuid=$pool_uuid param-name=update-sync-day
    xe pool-param-get uuid=$pool_uuid param-name=update-sync-enabled
    <!--NeedCopy-->
    
  3. 获取您的池上次成功与更新通道同步的时间戳:

    pool_uuid=$(xe pool-list --minimal)
    xe pool-param-get param-name=last-update-sync uuid=$pool_uuid
    <!--NeedCopy-->
    

或者,您可以手动将您的 XenServer 池与更新通道同步:

pool_uuid=$(xe pool-list --minimal)
update_checksum=$(xe pool-sync-updates uuid=$pool_uuid --minimal)
<!--NeedCopy-->

唯一标识符 update_checksum 指示已安装更新的级别。每当公共 CDN 中有新更新可用时,它就会更改。此校验和稍后在将更新应用到您的池时使用,以确保您始终应用最新的可用更新。update_checksum 的值在您需要联系技术支持时也可以提供有用的信息。

注意:

同步后,请尽快将更新应用到您的池,以受益于最新的更新。

如果在同步后但在将更新应用到池中的主机之前指定了新的池协调器,则必须先与新的池协调器再次同步,然后才能更新池。

在池正在更新时,请勿同步您的 XenServer 池。

现在您的池已与通道同步,您可以查看并应用可用更新。下一步:查看池的可用更新

离线更新

离线更新具有以下先决条件:

  • 您的主机必须安装在 October 7, 2024 或之后发布的 ISO。
  • 您必须使用 XenCenter 2024.4.0 或更高版本来应用更新包。

配置离线更新通道

请按照以下步骤配置您的池以使用离线更新通道:

  1. 为您的池创建离线更新通道:

    xe repository-introduce-bundle name-label=<name-label> [name-description=<name-description>]
    <!--NeedCopy-->
    

    此命令创建一个捆绑包存储库,该存储库充当离线更新通道,并存储更新捆绑包以供离线应用。它返回存储库 UUID。请记下此 UUID,以便稍后在安装更新中使用。

  2. 为您的池启用离线更新通道:

    xe pool-param-set repositories=<bundle-repository-uuid> uuid=<pool_uuid>
    <!--NeedCopy-->
    

    此命令将捆绑包存储库启用为您的池的离线更新通道。

为您的池同步新的更新捆绑包

配置您的池以使用离线更新通道后,每次您想要从新捆绑包同步和更新时,都可以按照以下步骤操作。

  1. 使用您的专用互联网连接机器从以下页面下载最新的更新捆绑包:下载 XenServer 更新捆绑包

  2. 将更新捆绑包传输到运行 xe CLI 命令的系统。如果您将捆绑包文件传输到池中的主机,请确保在同步后将其删除以回收磁盘空间。

  3. 上传并同步更新捆绑包文件。

    xe pool-sync-bundle filename=<bundle-file-path>
    <!--NeedCopy-->
    
  4. 删除捆绑包文件:

    rm <bundle-file-path>
    <!--NeedCopy-->
    

注意:

如果您在同步之后但在将更新应用到池中的主机之前指定了新的池协调器,则必须在更新池之前与新的池协调器再次同步。

当 XenServer 池正在更新时,请勿同步它。

您的池已与更新包同步,现在您可以查看并应用可用的更新。下一步:查看池的可用更新

将主机更新到池级别

此方法使您能够将独立的 XenServer 8.4 主机更新到与 XenServer 8.4 池相同的更新级别。该池的更新级别必须比独立主机更新。使用此过程可以更轻松地将新主机加入现有池,而无需更新池中的每个主机。

池级别更新将独立主机与池同步,并从池协调器上保存的更新文件中获取更新。但是,如果池协调器自上次更新池以来已更改,则此功能可能不适用于您的池,因为当前的池协调器不持有更新文件。

将池配置为更新通道

请按照以下步骤操作,将您的主机配置为使用另一个池作为更新通道:

  1. 在您用作更新通道的池的协调器上,获取服务器证书:

    xe host-get-server-certificate uuid=<remote_pool_coordinator_uuid>
    <!--NeedCopy-->
    

    该命令会输出证书。将此信息复制到剪贴板,或将其保存在您可以在下一步中访问的位置。

  2. 在您要更新的主机上,创建一个临时文件,并将上一个命令的输出复制到其中。

    例如:

    vi ~/tmp/certificate.pem
    <!--NeedCopy-->
    
  3. 在将远程池配置为更新通道之前,请检查它是否已应用最新的同步更新。以下命令必须返回 true

    xe host-param-get uuid=<remote_pool_coordinator_uuid> param-name=latest-synced-updates-applied
    <!--NeedCopy-->
    

    如果命令返回 false,请在继续下一步之前,将同步更新应用到远程池。

  4. 为您的主机创建远程池更新通道:

    xe repository-introduce-remote-pool name-label=<name_label> binary-url=https://<url_to_pool_coordinator>/repository/enabled certificate-file=<path_to_certificate> [name-description=<name-description>]
    <!--NeedCopy-->
    
    • binary-url 参数的值是池协调器的 URL 地址,可以是 FQDN 或 IP 地址,并附加路径 /repository/enabled
    • 参数 certificate-file 的值是您在上一步中创建的临时证书文件的路径。

该命令返回存储库 UUID。记下此 UUID,以便在安装更新时使用。

  1. 为您的池启用远程池更新通道:

    xe pool-param-set repositories=<remote_pool_repository_uuid>
    <!--NeedCopy-->
    

    此命令将远程池协调器上的存储库信息启用为您的池的更新通道。

将主机与池同步

手动将您的 XenServer 主机与远程池更新通道同步。

  1. 在您的独立主机上运行以下命令:

    xe pool-sync-updates username=root password=<password>
    <!--NeedCopy-->
    

    提供您从中更新的池的协调器用户名和密码。

该命令返回一个校验和,该校验和作为唯一标识符,指示可安装更新的级别。

注意:

同步后,请尽快将更新应用到您的池,以受益于最新的更新。

请勿在 XenServer 主机正在更新时同步它。

现在您的主机已与池同步,您可以查看并应用可用的更新。下一步:查看池的可用更新

查看池的可用更新

在应用更新之前,请查看池的可用更新并完成所有必需的更新前任务。有关不同更新任务的更多信息,请参阅了解指导类别和更新任务

检查特定主机的可用更新

要检查特定主机是否有可用更新,请运行以下命令:

xe host-param-get param-name=latest-synced-updates-applied uuid=<host_uuid>
<!--NeedCopy-->

如果所有同步更新都已应用于主机,此命令将返回 yes;如果存在可应用的同步更新,则返回 no

注意:

此命令仅检查已同步的更新。更新通道上可能存在尚未同步到池中的较新更新。有关如何同步的信息,请参阅 CDN 更新的 同步池的新更新 或离线更新的 同步池的新更新包

检查所有主机的可用更新

  1. 通过对 HTTP 端点 /updates 发出 GET 请求来检查所有主机的可用更新。这将检索可用更新的元数据。您可以通过向 https://<myserver>/updates 发送请求来访问该端点。

    使用 wget 实用程序:

    wget -O - --no-check-certificate https://<user name>:<password>@<coordinator IP address>/updates
    <!--NeedCopy-->
    

    您还可以使用具有以下参数的 HTTP 客户端库:

    HTTP GET
    session_id: <XAPI session ID returned from login>
    host_refs: <host XAPI reference>
    <!--NeedCopy-->
    
  2. 检查请求返回的 JSON 响应。响应包含有关可用更新的元数据,包括:

    • hosts:列出单个主机的可用更新。

    • updates:列出可用更新的详细信息。

    • hashupdate_checksum(用于确保您始终应用最新的可用更新)。

  3. 检查 hostsupdates 对象中的 guidance 对象。此对象包含以下键:

    • mandatory
    • recommended
    • full
    • livepatch

    这些类别概述了与您正在应用的更新相关的所有更新任务。根据指导类别执行必要的更新前任务。有关这些类别的更多信息,请参阅了解指导类别和更新任务

下一步:将更新应用于池

了解指导类别和更新任务

在将更新应用于池之前和之后,可能需要执行某些任务(例如迁移或重新启动主机)。有时,不需要任何更新任务。

指导类别

XenServer 尝试通过将任务分为强制推荐完全生效热补丁来最大程度地减少这些任务可能对您的虚拟机造成的干扰。这些分类使您能够判断可能导致主机或虚拟机停机或轻微中断的更新任务是否适合您的环境和风险配置文件。

更新可能在多个类别中列出任务。例如,某个更新可能要求您重新启动主机以使更新完全生效,但建议重新启动工具栈以获得更新的大部分好处,同时减少对池的潜在干扰。

在更新过程中,您可以选择执行以下三个级别的任务之一:

  1. 强制
  2. 强制 + 推荐
  3. 强制 + 推荐 + 完全生效

强制

强制性任务 必须 在更新后执行,否则系统可能在运行时失败。这些操作是启用关键修复并确保您的环境安全稳定的必要条件。您不能选择不执行强制性任务。

推荐

推荐任务是我们建议您执行的任务,以便从更新中提供的大多数功能和修复中获益。如果您选择现在不执行这些任务,它们将列在适用于池、主机或虚拟机的待处理更新任务中。

为什么要执行推荐任务:

  • 这些任务可确保 XenServer 环境安全稳定。

为什么要选择不执行推荐任务:

  • 在审查了更新的详细信息后,您认为现在不完全应用这些更新的风险是可以接受的。
  • 推荐任务现在会对您的虚拟机造成不必要的干扰。

如果您选择推迟推荐任务,请计划在合适的维护窗口期间完成这些任务,以保持环境的稳定性。

完全生效

完全生效任务是获取相关更新益处所必需的。具有完全生效任务的更新仅与使用特定硬件或特定功能的用户相关。

查阅更新信息以了解您的环境是否需要这些任务。如果您选择现在不执行这些任务,它们将列在适用于池、主机或虚拟机的待处理任务中。

为什么要执行完全生效任务:

  • 具有完全生效任务的更新与您的硬件、环境或配置相关。

为什么要选择不执行完全生效任务:

  • 具有完全生效指导的更新与您的硬件、环境或配置无关。
  • 完全生效任务现在会对您的虚拟机造成不必要的干扰。
  • 您目前不需要这些更新带来的好处。

如果完全生效任务适用于您的环境,但您选择推迟执行,请计划在合适的维护窗口期间完成这些任务,以保持环境的稳定性。

实时修补程序

某些组件的更新可能包含实时修补程序。实时修补程序允许在不要求主机重新启动的情况下将更新应用于核心组件。

实时修补程序是否可以应用于您的主机取决于主机上次重新启动时安装的组件版本。如果更新可以作为实时修补程序应用于您的主机,则实时修补程序指导将取代推荐指导。

示例:

您有两个池。池 A 已更新到最新级别。池 B 已有一段时间未更新。我们发布了一个新更新,其中包含推荐的更新任务“重新启动主机”和实时修补程序更新任务“重新启动工具堆栈”。

在池 A 中,实时修补程序可以应用于这些更新的主机。推荐指导显示“重新启动工具堆栈”。实时修补程序指导中干扰性较小的任务会覆盖推荐指导。

在池 B 中,实时修补程序无法应用于主机,因为它们处于较旧的级别。推荐指导显示“重新启动主机”。推荐指导仍然适用。在这种情况下,实时修补程序指导不相关。

有时,当更新作为实时修补程序应用时,更新中只有部分修复会启用。在这种情况下,即使实时修补程序适用,您可能仍然会看到建议的更新重新启动。请查看更新详细信息,以了解您是否需要更新中的所有修复,或者只需要实时修补程序启用的那些修复。然后,您可以使用此信息来选择是否执行这些任务。有关更多信息,请参阅查看池的可用更新

更新任务

应用更新可能需要您在更新应用之前或之后完成一个或多个任务。这些任务可以出现在任何指导类别中。下表概述了这些任务、其关联的 xe CLI 命令以及它们所涉及内容的描述。

主机的更新任务

Tasks required before applying updates:

更新任务 执行任务的 xe CLI 命令 描述
疏散主机 xe host-evacuate 在应用更新之前,所有虚拟机都必须从 XenServer 主机迁移或关闭。要完成此任务,XenCenter 会将所有虚拟机从主机迁移出去。在执行此任务期间,XenServer 池将以降低的容量运行,因为一台主机暂时无法运行虚拟机。此任务有时作为“重新启动主机”任务的一部分执行。

Tasks required after applying updates:

更新任务 执行任务的 xe CLI 命令 描述
重新启动主机 xe host-reboot XenServer 主机必须重新启动。所有虚拟机都将从主机迁移出去,然后主机重新启动。在执行此任务期间,XenServer 池将以降低的容量运行,因为一台主机暂时无法运行虚拟机。
在 Xen 实时修补程序失败时重新启动主机 xe host-reboot 应用 Xen 实时补丁失败。必须重新启动 XenServer 主机才能使更新生效。任何虚拟机都将从主机迁移出去,然后主机将重新启动。在此任务进行期间,XenServer 池将以降低的容量运行,因为一个主机暂时无法运行虚拟机。
在内核实时补丁失败时重新启动主机 xe host-reboot 应用 dom0 内核实时补丁失败。必须重新启动 XenServer 主机才能使更新生效。任何虚拟机都将从主机迁移出去,然后主机将重新启动。在此任务进行期间,XenServer 池将以降低的容量运行,因为一个主机暂时无法运行虚拟机。
重新启动工具栈 xe-toolstack-restart 必须重新启动主机上的工具栈。如果在池协调器上执行,与池的连接将暂时中断。在其他主机上重新启动对池的状态没有可见影响。

适用于虚拟机的更新任务

某些更新为虚拟机引入了新功能,需要执行以下任务:

更新任务 用于执行任务的 xe CLI 命令 描述
重新启动虚拟机 xe vm-reboot 虚拟机必须重启。在 XenCenter 中,虚拟机在重启时会显示一个红色停止图标(红色方块)。任务完成后,会出现绿色播放图标,表示虚拟机正在运行。在重启期间,最终用户无法使用虚拟机。
重启设备模型 xe vm-restart-device-models 更新主机上的虚拟机的设备模型必须重启。在 XenCenter 中,当设备模型重启时,虚拟机显示一个黄色播放三角形。完成后,会出现绿色播放图标。在此期间,您无法停止、启动或迁移虚拟机。虚拟机的最终用户可能会在会话中经历短暂的暂停和恢复。为了在 Windows 虚拟机上支持此任务,虚拟机必须安装 XenServer VM Tools for Windows。

将更新应用于池

开始之前

  • 在执行池更新之前,请确保池中的所有主机都处于联机状态。

  • 确保任何主机或虚拟机上都没有待处理的强制更新任务。任何先前更新中待处理的强制更新任务都必须在新池更新开始之前执行。有关详细信息,请参阅 查看主机所需的更新任务查看虚拟机所需的更新任务

  • 如果已启用高可用性 (HA),请将其禁用:

     pool_uuid=$(xe pool-list --minimal)
     xe pool-ha-disable uuid=$pool_uuid
     <!--NeedCopy-->
    
  • 如果已启用工作负载平衡 (WLB),请将其禁用:

     pool_uuid=$(xe pool-list --minimal)
     xe pool-param-set wlb-enabled=false uuid=$pool_uuid
     <!--NeedCopy-->
    

安装更新

要对池执行更新,您必须首先从池协调器开始,对池中的每个主机应用更新。请按照以下步骤操作,从池协调器开始:

  1. 禁用主机:

    xe host-disable uuid=<host_uuid>
    <!--NeedCopy-->
    
  2. 如果更新所需的更新任务之一是“疏散主机”或“重启主机”,请疏散主机:

    xe host-evacuate uuid=<host_uuid>
    <!--NeedCopy-->
    

    如果在主机疏散期间无法将虚拟机迁移到其他主机,请关闭或挂起虚拟机。

  3. 将更新应用于主机:

    1. 获取要应用的更新的更新校验和:

      xe repository-param-get uuid=<repository UUID> param-name=hash
      <!--NeedCopy-->
      
    2. 使用此校验和应用这组更新:

      xe host-apply-updates uuid=<host_uuid> hash=<update_checksum>
      <!--NeedCopy-->
      
  4. 获取所需的主机更新任务列表。有关详细信息,请参阅主机的更新任务

    按以下顺序执行列表中的主机更新任务:

    1. 重新启动工具栈(如果需要执行“重新启动主机”,则可以跳过)
    2. 重新启动主机
  5. 对于主机上每个正在运行的虚拟机,获取所需的虚拟机更新任务列表。有关详细信息,请参阅虚拟机的更新任务

    按以下顺序执行列表中的虚拟机更新任务:

    1. 重新启动设备模型(如果需要执行“重新启动虚拟机”,则可以跳过)
    2. 重新启动虚拟机
  6. 如果主机仍处于禁用状态,则启用它:

    xe host-enable uuid=<host_uuid>
    <!--NeedCopy-->
    
  7. 对于在主机更新之前使用 host-evacuate 迁移到另一台主机的每个虚拟机,获取更新任务列表。有关详细信息,请参阅虚拟机的更新任务

    如果更新任务列表中包含“重新启动虚拟机”,请关闭虚拟机并在当前已更新的主机上启动它。否则,将虚拟机迁移回当前已更新的主机。

  8. 恢复或启动在应用更新之前关闭或挂起的虚拟机。

  9. 查看主机更新状态:

    xe host-param-get param-name=last-software-update uuid=<host_uuid>
    xe host-param-get param-name=latest-synced-updates-applied uuid=<host_uuid>
    xe host-param-get param-name=last-update-hash uuid=<host_uuid>
    <!--NeedCopy-->
    

重复上述步骤以更新池中的每台主机。

更新主机后

更新池中的每台主机后,执行所有剩余的更新任务。

  1. 对于池中的每台虚拟机,获取更新任务列表。有关详细信息,请参阅虚拟机的更新任务

    如果更新任务列表中包含“重新启动虚拟机”,请执行该任务。

  2. 如果在应用更新之前禁用了 HA,请启用它:

    pool_uuid=$(xe pool-list --minimal)
    xe pool-ha-enable uuid=$pool_uuid
    <!--NeedCopy-->
    
  3. 如果在应用更新之前禁用了 WLB,请启用它:

    pool_uuid=$(xe pool-list --minimal)
    xe pool-param-set wlb-enabled=true uuid=$pool_uuid
    <!--NeedCopy-->
    
  4. 如果您选择仅执行池更新所需的强制更新任务,则尚未执行的更新任务将附加到主机所需的待处理更新任务列表中。要查看此列表并执行这些任务,请参阅完成所有待处理的更新任务

完成所有待处理的更新任务

应用更新后,完成所有待处理的更新任务,以确保主机和虚拟机按预期运行。使用以下命令查看所需任务。

查看主机的待处理任务

获取主机的强制任务列表:

xe host-param-get param-name=pending-guidances uuid=<host_uuid>
<!--NeedCopy-->

获取主机的推荐任务列表:

xe host-param-get param-name=pending-guidances-recommended uuid=<host_uuid>
<!--NeedCopy-->

获取主机的完全生效任务列表:

xe host-param-get param-name=pending-guidances-full uuid=<host_uuid>
<!--NeedCopy-->

查看虚拟机的待处理任务

获取您的虚拟机的强制性任务列表:

xe vm-param-get param-name=pending-guidances uuid=<VM UUID>
<!--NeedCopy-->

获取您的虚拟机的推荐任务列表:

xe vm-param-get param-name=pending-guidances-recommended uuid=<VM UUID>
<!--NeedCopy-->

获取您的虚拟机的完全生效任务列表:

xe vm-param-get param-name=pending-guidances-full uuid=<VM UUID>
<!--NeedCopy-->
使用 xe CLI 应用更新