在开始升级之前,请遵循这些维护任务,以确保系统准备就绪,并在出现问题时可以回滚:
执行升级时,除了内容和代码升级活动之外,还需要执行存储库迁移。 迁移将以新的“区段Tar”格式创建存储库的副本。 因此,您需要足够的磁盘空间来保留第二个可能更大的存储库版本。
在开始升级之前,AEM应完全备份。 确保备份您的存储库、应用程序安装、数据存储和Mongo实例(如果适用)。 有关备份和恢复AEM实例的详细信息,请参见备份和恢复。
升级过程能够很好地维护和合并存储库中/apps
和/libs
路径下的现有内容和配置。 对于对/etc
路径(包括Context Hub配置)所做的更改,通常需要在升级后重新应用这些更改。 虽然升级将备份其无法合并到/var
下的任何更改,但我们建议在开始升级之前手动备份这些更改。
从jar文件启动AEM时,将在crx-quickstart/conf
下生成quickstart.properties
文件。 如果AEM过去只是使用开始脚本启动,则此文件将不存在,并且升级将失败。 确保检查此文件是否存在,并从jar文件重新启动AEM(如果不存在)。
WorkflowPurgeTask
和com.day.cq.audit.impl.AuditLogMaintenanceTask
任务需要单独的OSGi配置,如果没有这些配置,将无法工作。 如果在预升级任务执行期间失败,则最可能的原因是缺少配置。 因此,如果您不想运行这些任务,请确保为这些任务添加OSGi配置,或将它们从升级前优化列表中完全删除。 有关配置工作流清除任务的文档,请访问管理工作流实例,审计日志维护任务配置可在AEM 6](/docs/experience-manager-64/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组件预配置了一列表升级前维护任务,可以一次全部运行。 您可以按照以下过程配置任务:
浏览至https://serveraddress:serverport/system/console/configMgr
,转到Web控制台
搜索“预升级任务”,然后单击第一个匹配的组件。 组件的完整名称为com.adobe.aem.upgrade.prechecks.mbean.impl.PreUpgradeTasksMBeanImpl
修改需要运行的维护任务的列表,如下所示:
任务列表会因用于开始实例的运行模式而异。 以下是每个维护任务所针对的运行模式的说明。
任务 | 运行模式 | 注释 |
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
正在调用带有标记和扫描阶段的数据存储垃圾收集操作(如果使用)。对于使用共享数据存储的部署,请确保重新配置它或正确准备实例,以避免删除其他实例引用的项目。 这可能需要在触发此预升级任务之前,在所有实例上手动运行标记阶段。
PreUpgradeTasksMBeanImpl
OSGI组件预配置了一列表升级前运行状况检查标记,在调用runAllPreUpgradeHealthChecks
方法时执行:
system -花岗岩维护运行状况检查使用的标签
升级前 -这是一个自定义标记,可添加到升级前可以设置为运行的所有运行状况检查中
列表可编辑。 除了标记外,您可以使用加号(+)和减号(-)按钮添加更多自定义标记,或删除默认标记。
MBean方法
可以使用JMX控制台访问托管Bean功能。
可通过以下方式访问MBean:
转到位于https://serveraddress:serverport/system/console/jmx的JMX控制台
搜索PreUpgradeTasks并单击结果
从操作部分选择任何方法,并在以下窗口中选择调用。
以下是PreUpgradeTasksMBeanImpl
公开的所有可用方法的列表:
方法名称 | 类型 | 描述 |
getAvailablePreUpgradeTasksNames() |
信息 | 显示可用升级前维护任务名称的列表。 |
getAvailablePreUpgradeHealthChecksTagNames() |
信息 | 显示升级前运行状况检查标记名称的列表。 |
runAllPreUpgradeTasks() |
动作 | 运行列表中的所有升级前维护任务。 |
runPreUpgradeTask(preUpgradeTaskName) |
动作 | 运行升级前维护任务,其名称为参数。 |
isRunAllPreUpgradeTaskRunning() |
ACTION_INFO | 检查runAllPreUpgradeTasksmaintenance 任务当前是否正在运行。 |
getAnyPreUpgradeTaskRunning() |
ACTION_INFO | 检查是否有任何预升级维护任务当前正在运行, 返回一个包含当前正在运行的任务名称的阵列。 |
getPreUpgradeTaskLastRunTime(preUpgradeTaskName) |
动作 | 显示升级前维护任务的确切运行时间,其名称为参数。 |
getPreUpgradeTaskLastRunState(preUpgradeTaskName) |
动作 | 显示升级前维护任务的上次运行状态,其名称为参数。 |
runAllPreUpgradeHealthChecks(shutDownOnSuccess) |
动作 | 运行所有升级前运行状况检查,并将其状态保存在sling home路径中名为 属性文件将用作任何未来升级的先决条件 |
detectUsageOfUnavailableAPI(aemVersion) |
动作 | 列表在 升级到指定的AEM版本时不再满足的所有导入的包。 目标AEM版本必须 作为参数提供。 |
可通过以下方式调用MBean方法:
只有从AEM 5版本升级时,才需要此步骤。 可以完全跳过它,从AEM 6旧版本升级。
在Apache Oak中,自定义LoginModules
在存储库级别进行身份验证的配置方式已发生根本变化。
在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。
在关闭AEM实例后,仅从crx-quickstart/install目录中删除包。 这是开始就地升级过程之前的最后步骤之一。
删除通过本地文件系统上的crx-quickstart/install
目录部署的所有服务包、功能包或修补程序。 这将防止在更新完成后在新的AEM版本上意外安装旧的修补程序和服务包。
如果使用TarMK冷备用,请停止任何冷备用实例。 这将保证在出现升级问题时有效地恢复在线。 升级成功完成后,需要从升级的主实例重建冷备用实例。
禁用应用程序代码中包含的任何OSGi计划作业。
此步骤仅对TarMK安装是必需的
如果使用TarMK,则应在升级前执行脱机修订清理。 这将使存储库迁移步骤和后续升级任务执行得更快,并有助于确保在升级完成后可以成功执行在线修订清理。 有关运行脱机修订清除的信息,请参阅执行脱机修订清除。
此步骤仅对运行crx3的实例是必需的
在对CRX3实例运行修订清理后,您应运行数据存储垃圾收集,以删除数据存储中任何未引用的blob。 有关说明,请参阅数据存储垃圾收集上的文档。
此升级前维护任务仅在以下情况下是必需的:
服务用户最终可能被误标记为常规用户的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.
要解决此问题,请确保执行以下操作:
要解决此问题,请确保执行以下操作:
通常,Apache Oak堆栈AEM用于持久性的底层将负责根据需要升级数据库模式。
但是,当模式无法自动升级时,可能会出现这种情况。 这些环境大多是高安全性的,数据库在权限非常有限的用户下运行。 如果发生这种情况,AEM将继续使用旧模式。
为防止这种情况发生,您需要按照以下步骤升级模式:
关闭需要升级的AEM实例。
升级数据库模式。 请查阅有关数据库类型的文档,以了解实现此目的需要使用哪些工具。
有关Oak如何处理模式升级的详细信息,请参阅Apache网站](https://jackrabbit.apache.org/oak/docs/nodestore/document/rdb-document-store.html#upgrade)上的[此页。
继续升级AEM。
我们建议在开始升级之前存档您的当前日志文件。 这样,在升级过程中和升级后,可以更轻松地监视和扫描日志文件,以识别和解决可能出现的任何问题。