升级前维护任务

在开始升级之前,务必遵循这些维护任务,以确保系统准备就绪,并且在出现问题时可以回滚:

确保足够的磁盘空间

执行升级时,除了内容和代码升级活动之外,还需要执行存储库迁移。 迁移将以新的Segment Tar格式创建存储库的副本。 因此,您需要足够的磁盘空间来保留第二个可能更大的存储库版本。

完全备份AEM

AEM应在开始升级之前完全备份。 确保备份您的存储库、应用程序安装、数据存储和Mongo实例(如果适用)。 有关备份和恢复AEM实例的详细信息,请参阅备份和恢复

将更改备份到/etc

升级过程很好地维护和合并存储库中/apps/libs路径下的现有内容和配置。 对于对/etc路径(包括Context Hub配置)所做的更改,通常需要在升级后重新应用这些更改。 虽然升级将备份其无法合并到/var下的任何更改,但我们建议在开始升级之前手动备份这些更改。

生成quickstart.properties文件

从jar文件启动AEM时,将在crx-quickstart/conf下生成quickstart.properties文件。 如果AEM过去只是使用开始脚本启动,则此文件将不存在,并且升级将失败。 确保检查此文件是否存在,并从jar文件重新启动AEM(如果不存在)。

配置工作流和审核日志清除

WorkflowPurgeTaskcom.day.cq.audit.impl.AuditLogMaintenanceTask任务需要单独的OSGi配置,如果没有这些配置,它们将无法工作。 如果在预升级任务执行期间失败,则最可能的原因是缺少配置。 因此,如果您不希望运行这些任务,请确保为这些任务添加OSGi配置,或将它们从升级前优化列表中完全删除。 有关配置工作流清除任务的文档,请访问管理工作流实例,审计日志维护任务配置可在AEM 6](/docs/experience-manager-65/sites-administering/operations-audit-log.html?lang=zh-Hans)的[审计日志维护中找到。

有关在CQ 5.6上清除工作流和审核日志以及在AEM 6.0上清除审核日志,请参阅清除工作流和审核节点

安装、配置和运行预升级任务

由于AEM允许的定制级别,环境通常不遵循统一的升级方式。 这使得创建标准化升级程序成为一个困难的过程。

在以前版本中,停止或无法安全恢复的AEM升级也很困难。 这导致需要重新启动完整升级程序或进行有缺陷的升级而没有触发任何警告的情况。

为了解决这些问题,Adobe在升级过程中增加了多项增强功能,使其更具弹性和用户友好性。 之前必须手动执行的升级前维护任务正在优化和自动化。 此外,还增加了升级后报告,以便能够充分审查该过程,希望更容易找到任何问题。

预升级维护任务目前分布于手动部分或完全执行的各种界面上。 AEM 6.3中引入的升级前维护优化使触发这些任务的统一方式能够按需检查结果。

升级前优化步骤中包含的所有任务都与AEM 6.0之后的所有版本兼容。

如何设置

在AEM 6.3和更高版本中,快速启动程序中包含升级前维护优化任务。 如果您是从旧版AEM 6升级,则可以通过从包管理器下载的单独包来提供它们。

您可以在以下位置找到包:

如何使用

PreUpgradeTasksMBean OSGI组件预配置了一列表可同时运行的升级前维护任务。 您可以按照以下过程配置任务:

  1. 浏览至​https://serveraddress:serverport/system/console/configMgr,转到Web控制台

  2. 搜索“预升级任务”,然后单击第一个匹配的组件。 组件的全名为com.adobe.aem.upgrade.prechecks.mbean.impl.PreUpgradeTasksMBeanImpl

  3. 修改需要运行的维护任务的列表,如下所示:

    1487758925984

任务列表会因用于开始实例的运行模式而异。 以下是每个维护任务所针对的运行模式描述。

任务 运行模式 注释
TarIndexMergeTask crx2
DataStoreGarbageCollectionTask crx2 会进行标记和扫描。 对于共享数据存储,请删除此步骤,并在执行前手动或正确地运行
准备实例。
ConsistencyCheckTask crx2
WorkflowPurgeTask crx2/crx3 运行前必须配置AdobeGranite工作流清除配置OSGi。
GenerateBundlesListFileTask crx2/crx3
RevisionCleanupTask crx3 对于AEM 6.0到6.2上的TarMK实例,请手动运行脱机修订清理。
com.day.cq.audit.impl.AuditLogMaintenanceTask crx3 运行前必须配置审核日志清除调度程序OSGi配置。
注意

DataStoreGarbageCollectionTask 正在使用标记和扫描阶段调用Datastore Garbage Collection操作(如果使用)。对于使用共享数据存储的部署,请确保重新配置它或正确地准备该实例以避免删除其他实例引用的项目。 这可能需要在触发此预升级任务之前,在所有实例上手动运行标记阶段。

预升级运行状况检查的默认配置

PreUpgradeTasksMBeanImpl OSGI组件预配置了一列表预升级运行状况检查标签,以在调用runAllPreUpgradeHealthChecks方法时执行:

  • system - granite维护运行状况检查使用的标签

  • 预升级 — 这是一个自定义标记,可添加到所有运行状况检查中,您可以设置这些检查在升级前运行

列表是可编辑的。 除了标签外,您可以使用加号​(+)​和减号​(-)​按钮添加更多自定义标签,或删除默认标签。

MBean方法

可以使用JMX控制台访问受管Bean功能。

可以通过以下方式访问MBean:

  1. 转到位于​https://serveraddress:serverport/system/console/jmx​的JMX控制台

  2. 搜索​PreUpgradeTasks​并单击结果

  3. 从​Operations​部分选择任意方法,并在以下窗口中选择​Invoke

以下是PreUpgradeTasksMBeanImpl公开的所有可用方法的列表:

方法名称 类型 描述
getAvailablePreUpgradeTasksNames() 信息 显示可用升级前维护任务名称的列表。
getAvailablePreUpgradeHealthChecksTagNames() 信息 显示升级前运行状况检查标记名称的列表。
runAllPreUpgradeTasks() 动作 运行列表中的所有预升级维护任务。
runPreUpgradeTask(preUpgradeTaskName) 动作 运行升级前维护任务,其名称为参数。
isRunAllPreUpgradeTaskRunning() ACTION_INFO 检查runAllPreUpgradeTasksmaintenance任务当前是否正在运行。
getAnyPreUpgradeTaskRunning() ACTION_INFO 检查是否有任何预升级维护任务当前正在运行,
返回一个包含当前正在运行的任务名称的数组。
getPreUpgradeTaskLastRunTime(preUpgradeTaskName) 动作 显示升级前维护任务的确切运行时间,并以给定的名称作为参数。
getPreUpgradeTaskLastRunState(preUpgradeTaskName) 动作 显示升级前维护任务的最后运行状态,其名称为参数。
runAllPreUpgradeHealthChecks(shutDownOnSuccess) 动作

运行所有预升级运行状况检查,并将其状态保存在sling主路径中名为preUpgradeHCStatus.properties的文件中。 如果shutDownOnSuccess参数设置为true,将关闭AEM实例,但前提是所有预升级运行状况检查都处于“OK”状态。

属性文件将用作任何未来升级
的先决条件,如果预升级运行状况检查
执行失败,则升级过程将停止。 如果要忽略预升级
运行状况检查的结果并启动升级,则可以删除文件。

detectUsageOfUnavailableAPI(aemVersion) 动作 列表在
升级到指定的AEM版本时,将不再满足的所有导入包。 目标 AEM版本必须
作为参数赋予。
注意

可通过以下方式调用MBean方法:

  • JMX控制台
  • 连接到JMX的任何外部应用程序
  • cURL

禁用自定义登录模块

注意

只有从AEM 5版本升级时,才需要此步骤。 可以完全跳过它以从旧AEM 6版本升级。

在Apache Oak中,自定义LoginModules在存储库级别进行身份验证的配置方式已发生根本性变化。

在使用CRX2配置的AEM版本中,将CRX2配置放在repository.xml文件中,而从AEM 6开始,将通过Web控制台在Apache Felix JAAS配置工厂服务中完成配置。

因此,升级后,必须禁用并重新为Apache Oak创建任何现有配置。

要禁用repository.xml的JAAS配置中定义的自定义模块,您需要修改配置以使用默认的LoginModule,如本例中所示:

<Security >
             ....
          <!--
                 Use LoginModule authenticating against repository itself
                 -->
                 <LoginModule class = "com.day.crx.core.CRXLoginModule" >
                     <param name = "anonymousId" value = "anonymous" />
                     <param name = "adminId" value ="admin" />
                     <param name = "disableNTLMAuth" value = "true" />
                     <param name = "tokenExpiration" value = "43200000" />
                     <!-- param name="trust_credentials_attribute" value="d5b9167e95dad6e7d3b5d6fa8df48af8"/
                -->
                 </LoginModule >
         </ Security>
注意

有关详细信息,请参阅使用外部登录模块进行身份验证

有关AEM 6中LoginModule配置的示例,请参阅使用AEM 6配置LDAP。

从/install目录中删除更新

注意

在关闭AEM实例后,仅从crx-quickstart/install目录中删除包。 这是开始就地升级过程之前的最后步骤之一。

删除通过本地文件系统上的crx-quickstart/install目录部署的所有服务包、功能包或修补程序。 这将防止在更新完成后在新AEM版本上意外安装旧的修补程序和服务包。

停止任何冷备用实例

如果使用TarMK冷备用,请停止任何冷备用实例。 这将保证在出现升级问题时,有效地恢复在线。 成功完成升级后,需要从升级的主实例重建冷备用实例。

禁用自定义计划作业

禁用应用程序代码中包含的任何OSGi计划作业。

执行脱机修订清理

注意

此步骤仅对TarMK安装是必需的

如果使用TarMK,则应在升级前执行脱机修订清理。 这将使存储库迁移步骤和后续升级任务执行得更快,并有助于确保在升级完成后可以成功执行联机修订清理。 有关运行脱机修订清理的信息,请参阅执行脱机修订清理

执行数据存储垃圾收集

注意

此步骤仅对运行crx3的实例是必需的

在对CRX3实例运行修订清理后,您应运行Datastore Garbage Collection以删除数据存储中任何未引用的Blob。 有关说明,请参阅数据存储垃圾收集上的文档。

如果需要,请升级数据库模式

通常,Apache Oak stack AEM用于持久性的基础将根据需要负责升级数据库模式。

但是,当模式无法自动升级时,可能会出现这种情况。 这些环境大多是高安全性的,数据库在权限非常有限的用户下运行。 如果发生这种情况,AEM将继续使用旧模式。

为防止发生这种情况,您需要按照以下步骤升级模式:

  1. 关闭需要升级的AEM实例。

  2. 升级数据库模式。 请查阅您的数据库类型的相关文档,以了解实现此目的需要使用哪些工具。

    有关Oak如何处理模式升级的详细信息,请参阅Apache网站](https://jackrabbit.apache.org/oak/docs/nodestore/document/rdb-document-store.html#upgrade)上的[此页。

  3. 继续升级AEM。

删除可能妨碍升级的用户

注意

此升级前维护任务仅在以下情况下是必需的:

  • 您是从AEM 6.3之前的版本升级
  • 在升级过程中,您会遇到以下任何错误。

服务用户最终可能被误标记为常规用户的AEM旧版本时,会出现异常情况。

如果发生这种情况,升级将失败,并显示如下消息:

ERROR [Apache Sling Repository Startup Thread] com.adobe.granite.repository.impl.SlingRepositoryManager Exception in a SlingRepositoryInitializer, SlingRepository service registration aborted
java.lang.RuntimeException: Unable to create service user [communities-utility-reader]:java.lang.RuntimeException: Existing user communities-utility-reader is not a service user.

要解决此问题,请确保执行以下操作:

  1. 将实例与生产流量分离

  2. 创建导致问题的用户备份。 您可以通过包管理器执行此操作。 有关详细信息,请参阅如何使用包。

  3. 删除导致问题的用户。 以下是可能属于此类别的用户列表:

    1. dynamic-media-replication
    2. communities-ugc-writer
    3. communities-utility-reader
    4. communities-user-admin
    5. oauthservice
    6. sling-scripting

旋转日志文件

我们建议在开始升级之前存档您的当前日志文件。 这样,在升级期间和升级后可以更轻松地监视和扫描日志文件,以识别和解决可能发生的任何问题。

在此页面上

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now