gpt4 book ai didi

liferay - 在集群环境中设置 Jackrabbit

转载 作者:行者123 更新时间:2023-12-04 06:16:52 31 4
gpt4 key购买 nike

我想在集群中设置 Jackrabbit(我正在用 Liferay 设置它)。

我阅读了这份文件 - http://wiki.apache.org/jackrabbit/Clustering ,不幸的是它很短,所以我不明白一些概念和最佳实践。让我先解释一下我的设置:

我们有 2 个共享相同文件系统的 weblogic 服务器,并且我们将相同的 war 部署到两个 weblogics。我使用 Oracle 作为数据库(我在 WL 中配置了连接池并想使用 JNDI 进行连接)

正如我从文档中了解到的,每个节点都必须有一个单独的配置,它有自己的存储库目录、工作区文件系统和搜索索引。

两个节点共享 PersistranceManager、存储库文件系统和数据存储(如果我有和)

以下是问题:

  • 什么是工作区文件系统以及它与存储库文件系统有何不同。什么是工作区——据我所知,它是存储库的一部分,存储库可以有多个工作区,但文档中没有描述什么是工作区。
  • 我希望性能是最好的,我不需要太多的内容和用户(10 个同时使用的用户),所以我想优化页面加载时间以更快地呈现页面。最佳实践是什么 - 我应该将 PersistanceManager 配置为转到 db 吗?
  • 每个节点上的存储库文件系统应该指向哪里?
  • 每个节点上的工作区应该指向哪里?
  • 工作区文件系统应该指向哪里?

  • 我试图将所有这些都指向我的数据库,但我似乎遇到了死锁(或者数据库运行速度太慢)。

    我启用了日志记录,我看到很多不必要的读取,看起来像每次上传文件 jackrabbit 打开连接,预缓存所有文件,关闭并执行多次(大约需要一分钟)以上传非常小的文件,我的配置很可能有问题。

    这是我的配置文件:

    <?xml version="1.0"?>
    <Repository>
    <FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem">
    <param name="driver" value="javax.naming.InitialContext"/>
    <param name="url" value="ISG" />

    <param name="schema" value="oracle"/>
    <param name="schemaObjectPrefix" value="J_R_FS_"/>
    </FileSystem>
    <Security appName="Jackrabbit">
    <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
    <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
    <param name="anonymousId" value="anonymous" />
    </LoginModule>
    </Security>
    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="liferay" />
    <Workspace name="${wsp.name}">
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.db.OraclePersistenceManager">
    <param name="driver" value="javax.naming.InitialContext"/>
    <param name="url" value="ISG" />
    <param name="tableSpace" value="" />

    <param name="schema" value="oracle" />
    <param name="schemaObjectPrefix" value="J_PM_${wsp.name}_" />
    <param name="externalBLOBs" value="false" />
    </PersistenceManager>

    <FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem">
    <param name="driver" value="javax.naming.InitialContext"/>
    <param name="url" value="ISG" />
    <param name="tableSpace" value="" />

    <param name="schema" value="oracle"/>
    <param name="schemaObjectPrefix" value="J_FS_${wsp.name}_"/>
    </FileSystem>
    </Workspace>
    <Versioning rootPath="${rep.home}/version">
    <FileSystem class="org.apache.jackrabbit.core.fs.db.OracleFileSystem">
    <param name="driver" value="javax.naming.InitialContext"/>
    <param name="url" value="ISG" />

    <param name="schema" value="oracle"/>
    <param name="schemaObjectPrefix" value="J_V_FS_"/>
    </FileSystem>
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.db.OraclePersistenceManager">
    <param name="driver" value="javax.naming.InitialContext"/>
    <param name="url" value="ISG" />
    <param name="tableSpace" value="" />

    <param name="schema" value="oracle" />
    <param name="schemaObjectPrefix" value="J_V_PM_" />
    <param name="externalBLOBs" value="false" />
    </PersistenceManager>
    </Versioning>

    <Cluster id="node_1" syncDelay="2000">
    <Journal class="org.apache.jackrabbit.core.journal.OracleDatabaseJournal">
    <param name="revision" value="${rep.home}/revision.log"/>
    <param name="driver" value="javax.naming.InitialContext"/>
    <param name="url" value="ISG" />
    <param name="tableSpace" value="" />

    <param name="schema" value="oracle"/>
    <param name="schemaObjectPrefix" value="J_C_"/>
    </Journal>
    </Cluster>
    </Repository>

    最佳答案

    Liferay 的官方文档建议在集群场景中使用数据库共享 Jackrabbit 数据,而不是文件系统。

    假设您在每个 Liferay 节点上使用文件系统(这是开箱即用的 Liferay 配置)。节点 A 将无法访问节点 B 上的 Jackrabbit 数据,反之亦然。随着时间的推移,节点变得越来越不同步。为了解决这个问题,您可以创建一个网络共享并将每个节点配置为指向该共享。这样做的问题是,如果每个 Liferay 节点同时写入,可能会导致文件损坏。

    这给您留下了两个选择;保持独立的文件系统并集成同步实用程序或将数据放入数据库中。由于文件系统同步充其量只是一个骗局,因此您最好的选择是将 Jackrabbit 数据放入数据库中。

    使用数据库有一些优点和缺点。它可能会降低性能,确实如此。与此同时,数据现在是常规灾难恢复策略的一部分,有些人可能会认为它更便于携带。

    编辑 - 添加:在 5.2 版中的某个时候添加了一个 AdvancedFileSystemHook,它解决了使用共享网络文件系统时文件损坏和锁定问题的问题。为了实现这一点,更改您的 portal-ext.properties 文件以使用 AdvancedFileSystemHook,将您的数据迁移到共享位置,将您的水平节点指向共享位置。

    关于liferay - 在集群环境中设置 Jackrabbit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126226/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com