使用离线重新索引以减少升级期间的停机时间

简介

升级Adobe Experience Manager的主要挑战之一是执行就地升级时与创作环境相关的停机。 内容作者在升级期间将无法访问环境。 因此,最好将执行升级所需的时间减至最少。 对于大型存储库,特别是AEM Assets项目(通常具有大型数据存储和每小时高级别的资源上传),重新索引Oak索引占升级时间的显着百分比。

本节介绍如何使用Oak-run工具重新索引资料档案库 早于 执行升级,从而减少实际升级期间的停机时间。 所介绍的步骤适用于 Lucene 版本AEM 6.4及更高版本的索引。

概述

随着功能集的扩展,新版本的AEM引入了对Oak索引定义的更改。 对Oak索引所做的更改会在升级AEM实例时强制重新索引。 由于资产中的文本(例如PDF文件中的文本)被提取并编制索引,因此重新索引对于资产部署而言代价高昂。 使用MongoMK存储库,数据通过网络保留,进一步增加了重新索引所花费的时间。

大多数客户在升级过程中面临的问题是缩短停机时间。 解决方案是 跳过 升级期间的重新索引活动。 这可以通过创造新的法令来实现 优先 执行升级,然后在升级期间直接导入它们。

方针

offline-reindexing-upgrade-text-extraction

建议是在升级之前使用,根据目标AEM版本的索引定义创建索引 Oak-run 工具。 上图显示了离线重新索引方法。

此外,这是方法中描述的步骤顺序:

  1. 首先提取二进制文件中的文本
  2. 目标索引定义已创建
  3. 已创建脱机索引
  4. 然后,在升级过程中导入索引

文本提取

要在AEM中启用完全索引,将提取二进制文件(如PDF)中的文本并将其添加到索引中。 在索引过程中,这通常是代价高昂的步骤。 文本提取是一个优化步骤,尤其对于在资产存储库存储大量二进制文件时重新索引资产存储库而言。

offline-reindexing-upgrade-text-extraction

使用带有tika库的oak-run工具,可以提取存储在系统中的二进制文件中的文本。 生产系统的克隆可以在升级前进行,并可用于此文本提取过程。 然后,此进程通过执行以下步骤来创建文本存储:

1. 遍历资料档案库并收集二进制文件的详细信息

此步骤会生成一个包含二进制文件的元组的CSV文件,其中包含一个路径和一个blob ID。

从要创建索引的目录执行以下命令。 以下示例假定存储库主目录。

java java -jar oak-run.jar tika <nodestore path> --fds-path <datastore path> --data-file text-extraction/oak-binary-stats.csv --generate

位置 nodestore pathmongo_urcrx-quickstart/repository/segmentstore/

使用 --fake-ds-path=temp 参数而不是 –fds-path 以加快该过程。

2. 重用现有索引中可用的二进制文本存储

从现有系统中转储索引数据并提取文本存储。

可以使用以下命令转储现有索引数据:

java -jar oak-run.jar index <nodestore path> --fds-path=<datastore path> --index-dump

位置 nodestore pathmongo_urcrx-quickstart/repository/segmentstore/

然后,使用上述索引转储填充存储:

java -jar oak-run.jar tika --data-file text-extraction/oak-binary-stats.csv --store-path text-extraction/store --index-dir ./indexing-result/index-dumps/<oak-index-name>/data populate

位置 oak-index-name 是全文索引的名称,例如“lucene”。

3. 使用tika库为上述步骤中遗漏的二进制文件运行文本提取过程

java -cp oak-run.jar:tika-app-1.21.jar org.apache.jackrabbit.oak.run.Main tika --data-file text-extraction/oak-binary-stats.csv --store-path text-extraction/store --fds-path <datastore path> extract

位置 datastore path 是二进制数据存储的路径。

创建的文本存储区可以更新,并可在将来重新索引方案。

有关文本提取过程的更多详细信息,请参阅 Oak-run文档.

脱机重新索引

offline-reindexing-upgrade-offline-reindexing

在升级前脱机创建Lucene索引。 如果使用MongoMK,建议直接在某个MongoMk节点上运行它,因为这可避免网络开销。

为了脱机创建索引,请执行以下步骤:

1. 为目标AEM版本生成Oak Lucene索引定义

转储现有索引定义。 发生更改的索引定义是使用AdobeAEM版本和oak-run的Granite存储库包生成的。

要从以下位置转储索引定义: AEM实例,运行此命令:

注意

有关转储索引定义的更多详细信息,请参阅 Oak文档.

java -jar oak-run.jar index --fds-path <datastore path> <nodestore path> --index-definitions

位置 datastore pathnodestore path 来自 AEM实例。

然后,从生成索引定义 目标 AEM版本(使用Target版本的Granite存储库包)。

java -cp oak-run.jar:bundle-com.adobe.granite.repository.jar org.apache.jackrabbit.oak.index.IndexDefinitionUpdater --in indexing-definitions_source.json --out merge-index-definitions_target.json --initializer com.adobe.granite.repository.impl.GraniteContent
注意

仅支持以上索引定义创建过程 oak-run-1.12.0 版本以后。 使用Granite存储库包进行定位 com.adobe.granite.repository-x.x.xx.jar.

上述步骤会创建一个名为的JSON文件 merge-index-definitions_target.json 索引定义。

2. 在存储库中创建检查点

在生产中创建检查点 具有长生命周期的AEM实例。 此操作应在克隆存储库之前完成。

通过位于JMX控制台的 http://serveraddress:serverport/system/console/jmx,转到 CheckpointMBean 并创建一个具有足够长的生命周期(例如,200天)的检查点。 为此,调用 CheckpointMBean#createCheckpoint 替换为 17280000000 作为生命周期持续时间(以毫秒为单位)的参数。

完成此操作后,复制新创建的检查点ID并使用JMX验证生命周期 CheckpointMBean#listCheckpoints.

注意

稍后导入索引时,将删除此检查点。

有关更多详细信息,请参阅 检查点创建 来自Oak文档。

为生成的索引定义执行脱机索引

可以使用oak-run离线完成Lucene重新索引。 此过程在下面的磁盘中创建索引数据 indexing-result/indexes. 确实如此 写入存储库,因此不需要停止正在运行的AEM实例。 创建的文本存储已馈送到此进程:

java -Doak.indexer.memLimitInMB=500 -jar oak-run.jar index <nodestore path> --reindex --doc-traversal-mode --checkpoint <checkpoint> --fds-path <datastore path> --index-definitions-file merge-index-definitions_target.json --pre-extracted-text-dir text-extraction/store

Sample <checkpoint> looks like r16c85700008-0-8
—fds-path: path to data store.
--pre-extracted-text-dir: Directory of pre-extracted text.
merge-index-definitions_target: JSON file having merged definitions for the target AEM instance. indexes in this file will be re-indexed.

的使用情况 --doc-traversal-mode 使用MongoMK安装时,参数非常有用,因为它通过将存储库内容假脱机到本地平面文件来显着缩短重新索引时间。 但是,它需要的磁盘空间是存储库大小的两倍。

对于MongoMK,如果在更靠近MongoDB实例的实例中执行此步骤,则可以加快此进程。 如果在同一台计算机上运行,则可以避免网络开销。

欲知其他技术详情,请访问 用于索引的oak-run文档.

导入索引

使用AEM 6.4及更高版本时,AEM具有按启动顺序从磁盘导入索引的内置功能。 文件夹 <repository>/indexing-result/indexes 启动期间将观察是否存在索引数据。 在2008年12月31日期间,您可以将预创建的索引复制到上述位置 升级过程 在开始使用的新版本之前 目标 AEM jar。 AEM会将其导入到存储库中,并从系统中删除相应的检查点。 因此,完全避免了重新索引。

其他提示和疑难解答

在下方,您将找到一些有用的提示和故障排除说明。

减少对实时生产系统的影响

建议克隆生产系统并使用克隆创建离线索引。 这消除了对生产系统的任何潜在影响。 但是,导入索引所需的检查点需要存在于生产系统中。 因此,在获取克隆之前创建检查点至关重要。

准备Runbook并试运行

建议准备 runbook 并在生产环境中运行升级之前,执行一些试验。

带脱机索引的文档遍历模式

离线索引需要遍历整个存储库。 使用MongoMK安装时,通过网络访问存储库,从而影响索引过程的性能。 一个选项是对MongoDB副本本身运行离线索引过程,这将消除网络开销。 另一个选项是使用文档遍历模式。

可通过添加命令行参数来应用文档遍历模式 —doc-traversal 离线索引的oak-run命令。 此模式将本地磁盘中整个存储库的副本作为平面文件假脱机并使用它来运行索引。

在此页面上