LIFERAY门户系统集群配置

更新时间:2024-04-26 06:39:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 LIFERAY门户系统集群配置

1.1 所有节点都指向同一 Liferay 数据库

Liferay做集群配置的时候,所有Liferay的节点应采用指向同一个数据库 (或数据库集群) 的数据源配置。这样可以确保的所有节点操作同步性和基本数据集中性。这意味着,Liferay 不应使用嵌入式的 HSQL 数据库。因为其不满足集群需求。

1.2 JackRabbit共享

Liferay 使用 Jackrabbit — 这是一个Apache的符合JSR-170规范的兼容文档库。

默认情况下,Jackrabbit 配置为将文档存储到本地文件系统,位置在 /Documents and Settings/liferay/jackrabbit。

此文件夹内名为 repository.xml的文件是Jackrabbit 的配置文件。

在只将默认存储库的位置移动到一个共享的文件夹的情况下,不需要编辑 Jackrabbit 的配置文件。替代的方式是修改portal.propties文件的标题为JCR的部分:

jcr.jackrabbit.repository.root=${resource.repositories.root}/jackrabbit

将此属性更改为指向所有节点可以看到的一个共享的文件夹路径。(将在该位置中生成一个新的 Jackrabbit 配置文件)

请注意由于文件的锁定问题,这不是共享 Jackrabbit 资源的最佳方法。 如果您有两人在同一时间上载内容文件,您可能会遇到使用此方法的数据损坏问题,就因为这种情况,我们不建议用于生产系统。

替代的解决方案是,应定向 Jackrabbit 到您的选择的数据库以便更好的保护文件数据。你可以使用Liferay数据库或者其他的数据库来达到这个目的。当然这需要编辑 Jackrabbit 的配置文件。

默认 Jackrabbit 配置文件中有关于将 Jackrabbit 配置到数据库存储的注释,可以将与文件系统有关的部分注释掉,在反注释有关数据库部分的方法进行Jackrabbit 存储配置移动到数据库。

默认情况下为一个 MySql 数据库的配置。如果要使用其它数据库,您可能需要修改相应的配置的特定数据库配置部分。默认配置下例如在数据库中的文件系统使用 Jackrabbit 的 DbFileSystem 类。虽然这适用于 MySQL,它不适用于所有数据库。

例如:使用 Oracle 数据库时需要将修改此项使用 OracleFileSystem。

也同样需要 JDBC 数据库 URL连接来指向数据库

别忘了首先创建数据库并建立相应的用户,并对用户进行相应表的访问创建、 修改,和删除的操作进行授权。并与配置文件对应。

一旦配置完 Jackrabbit 在一个数据库中存储其存储库,下次你迁移 Liferay时必要的数据库表将自动创建。

jackrabbit,不会对这些表创建索引,随着时间的推移这可能会降低性能。若要解决此问题,您需要手动进入数据库和索引所有 Jackrabbit 表的主键列。

所有 Liferay 节点应配置为使用相同的 Jackrabbit 数据库。一旦配置完成,您可以创建一个 Jackrabbit 群集。

1.3 JACKRABBIT 集群配置

如果要使用文档库,默认情况下您使用的是 Apache 的符合JSR 170规范的Jackrabbit文件库产品。

在这之前您已通过配置将其配置移动到节点之间共享数据的一个数据库。接下来您需要做的是配置 Jackrabbit集群,这样每个节点就会共享被输入存储库的其他节点的数据。

您可以在/ liferay/jackrabbit中找到 Jackrabbit 配置文件,该文件名 repository.xml。您可能在将存储方式迁移到数据库是已经编辑过此文件。

在此文件的底部被注释掉部分就是群集配置部分。

如果使用 MySQL 数据库,您可以直接取消注释,需要将每个节点的Cluster id更改为相应节点的Cluster id,以便他们不与另一个节点冲突。

如果要使用其他数据库,connection、credentials,和schema设置是必要的唯一的更改。修改他们根据您选择的数据库即可,然后保存该文件。这就是所有Jackrabbit 集群方面的配置。

1.4 全文搜索配置

您可以以两种方式配置搜索:1.使用可插接式企业搜索 (推荐群集配置),或在这种存储在每个节点的文件系统上或在数据库中共享或索引中配置 Lucene的方式。

1.4.1 插接式企业搜索

作为另一种使用 Lucene的方法,Liferay 5.1 现在支持可插入的搜索引擎。第一个实现使用开放源码的搜索引擎是 Solr,但在未来为您将选择的搜索引擎插件会有很多。这里允许你将一个完全独立的产品使用在可以安装在您的环境中

的任何应用程序服务器上的liferay上,您的搜索引擎在群集环境中可以同时以一项搜索服务的形式完全独立的运作在所有节点上。

分享 Lucene 索引是以下要解决问题。您现在可以共享一个搜索索引在所有的群集的节点之间的而不必担心把它放在数据库中(如果您希望,当配置Solr 或另一个搜索引擎时,您仍可以这样做) 或维持您的节点的所有单独搜索索引。每个 Liferay 节点会将请求发送到搜索引擎来更新所需要时的搜索索引并且这些更新是以排队方式由搜索引擎自动处理。

由于在撰写本文时只有一种已实现的可插接式企业搜索插件,所以我们将介绍如何使用 Solr 实现功能。

由于 Solr 是一个独立的搜索引擎所以首先需要下载并安装它,可以访问 Solr 网站http:// lucene.apache.org/ solr 。

1.4.1.1 SOLR安装与配置 1.4.1.1.1 安装前准备

Java 1.5 或更高版本

servlet 容器,如 Tomcat 5.5。

1.4.1.1.2 SOLR安装

将SOLR发行包解压,复制apache-solr-1.3.0\\dist\\ apache-solr-1.3.0.war到指定目录,例如\\webapps

1.4.1.1.3 TOMCAT配置

server.xml

在server.xml注意将URIEncoding设置为UTF-8。例如AJP等更多Native优化,参考TOMCAT优化方案。

solr.xml

新增solr.xml在{$TOMCAT}/conf/Catalina/localhost/下。TOMCAT在启动时将自动加载该CONTEXT。 docBase应设置为solr war包存放位置,例如

/ webapps /solr.war

solr/home的值应设置为你规划存放的索引根路径,例如c:/web/solr/。该目录在以下将称为{$SOLR_HOME}

1.4.1.1.4 SOLR配置

1.4.1.1.4.1 SOLR home设置

复制solr解压目录下的example/solr/bin目录和example/solr/conf目录到{$SOLR_HOME}。

启动Tomcat后访问:http://localhost:8080/solr/admin/ 会出现以下界面:

表示solr样例程序配置成功。

一旦您成功运行Solr后,它与 Liferay结合会非常容易,但它将需要重新启动您的应用程序服务器。

首先要做的事情是您需要定义您的搜索索引的位置。假设有安装在 /solr 索引的文件系统的 Linux 服务器在运行,需要创建一个指向此文件夹的环境变量。这种环境变量需要调用 $ SOLR_HOME。 因此针对我们的示例我们会这样定义:

$SOLR_HOME=/solr

此环境变量可以定义在任何您需要的地方:比如在您的操作系统的启动项里,在用户登录记录环境中或在应用程序服务器启动脚本中。如果您想使用 Tomcat 作为Solr主机,您需要修改 catalina.sh 或 catalina.bat文件在其中添加环境变量参数。

一旦环境变量被创建,

你可以在您的应用程序服务器的启动配置文件使用此环境变量作为一个JVM参数,这就是每个应用服务器采用不同的配置方式,但再次,如果您使用 Tomcat 时,编辑 catalina.sh 或 catalina.bat 并将以下变量追加到 $ JAVA_OPTS 变量:

-Dsolr.solr.home=$SOLR_HOME

该处详细描述了 Solr 存储其搜索索引的位置。

下一步,你有一个选择。如果你在同一个运行liferay的系统上安装了Solr 您可以只是使用Installer portlet 来安装solr-Web 插件。

当然,如果在群集环境中以这种方式时,可能您不会在同一处运行 Liferay 和您的搜索引擎,所以必须对该插件中的配置文件进行更改,在安装之前手动修改插件配置文件:

在插件中你可以找到一个名为WEB-INF/classes/META-INF文件夹中。

solr-spring.xml文件在

编辑文件将看到有两项关于Solr 服务器定义:

修改这些值,以便他们指向正在运行 Solr 的服务器。然后保存该文件。 下一步,修改schema.xml文件,应在 docroot/WEB-INF/conf 文件夹中。

将此文件复制到 $SOLR_HOME/conf (您可能必须创建 conf 目录)。现在继续操作并启动要安装 Solr的应用程序服务器。这可以是同样运行 Liferay的相同的服务器也可以是一个完全不同的服务器 (一个单独的服务器,会给你更好的性能)。在将 Solr.war 文件安装到此应用程序服务器后,执行以下操作:您现在可以热部署 solr-Web 插件到的所有你的节点。关于热部署到群集,请参阅有关的说明下一节。

一旦该插件被热部署, Liferay的搜索Porlet将自动升级为使用 Solr搜索引擎。唯一要做的是初始化搜索需要重置使用 Solr 索引。

转向Admin Portlet。点击“server”选项栏后点击靠近“Reindex all serach indexes”的“Exceute”按钮。

可能需要一段的时间, Liferay 将开始发送索引 Solr 执行的请求。过程完成后Liferay将具有一个完整的搜索索引,并且将独立于所有你运行的Liferay 节点。

该插件被安装到您的节点后将重写调用 Lucene 。所有 Liferay 的搜索框现在将使用Solr 搜索引擎作为搜索索引,这是一个群集环境的理想选择,因为它允许您的所有节点来共享一个搜索服务器和搜索索引,并且该服务独立于所有集群中的节点。

1.4.2 LUCENE 配置

Liferay 默认使用Lucene搜索引擎,搜索索引器可以在为每个群集的节点上提供一个共享的配置,可以创建一个群集的环境或索引。

如果要有一个共享的索引,您将需要共享该索引到文件系统或者数据库当中。

可以通过修改您的portal.properties 文件中的值更改 Lucene 配置。如果你想为 Liferay 节点提供一个在文件系统上共享存储 Lucene 的搜索索引的环境,您可以修改的搜索索引位置lucene.dir 属性:

lucene.dir=${resource.repositories.root}/lucene/

默认情况下,该属性指向/liferay/lucene 文件夹:

通过修改该值将转到您选择的文件夹,若要使更改生效,您将需要重新启动 Liferay。您可以将所有节点指向到此文件夹,使他们使用相同的索引。

像 Jackrabbit一样这并非共享搜索索引的最佳方法,不同节点尝试在同一时间重建索引时,它同样可能导致文件损坏,我们不建议在生产环境下使用该方式。

一种更好的方法是共享索引是通过数据库,数据库可以在索引执行时强制数据完整性,需要对portal.properties 文件做一些简单的更改。

在portal.proptites文件中有一个名为 lucene.store.type 的属性。默认情况下,此设置为文件系统。您可以更改改值使搜索索引存储在数据库中:

lucene.store.type=jdbc

在下一次启动时 Liferay后,将在该 Liferay 数据库中创建新表和索引。如果所有 Liferay 节点都指向同一个数据库表,他们将能够共享索引。

或者,你可以放弃单独配置,此时每个节点届时将有其自己的索引。这样可以确保有多个节点更新索引时不产生冲突,因为他们具有单独的索引。

1.5 热部署

需要热部署的插件将需要部署到的所有 Liferay 节点。每个节点因此应有自己的热部署文件夹。此文件夹必须使运行liferay的用户可写,因为他们部署插件时会从此文件夹移到另一个临时文件夹。这是为了防止该系统进入无限循环,因为在文件夹中存在插件是触发热部署的一个过程。

当您要部署一个插件时,将该插件复制到所有liferay的热部署文件夹下,当节点数目多时最好创建一个脚本来执行此操作。

一旦该插件已被发布到所有节点,然后可以通过添加 portlet到页面。

某些容器支持最终用户部署应用程序到一个节点后,将复制应用程序到所有其他节点的功能。如果您的应用程序服务器支持此功能,不需要将一个插件热部署到所有节点,可以由应用程序服务器以透明方式处理。但是,您使用 Liferay 的热部署机制,如在部署插件,请确保很多情况下 Liferay 轻微修改插件.war 文件时热部署它们。

上述各点将获得基本 Liferay 集群环境; 然而,配置可以进一步优化。 我们将了解如何做下一步。

1.6 分布式缓存

Liferay 4.3.1 及更高的版本支持 Ehcache。这意味着缓存可以分布在多个 Liferay 节点下同时运行。启用缓存可以显著提高性能。例如说两个用户在浏览留言板。第一次用户通过单击启动一个线程的命令来阅读。Liferay 必须从数据库查找该线程并且格式化在浏览器中显示的格式。

通过一个分布式的 Ehcache运行此线程时,可以从数据库中提取该线程存储在一个用于快速检索的高速缓存中,然后第二个用户要是想点击它读取同一论坛线程,这一次因为该线程是在本地的缓存中,无须去检索数据库数据,相比要快得多。

可以这样做的只是因为在每个节点上都分别运行缓存, 但分布式缓存的力量允许更多的功能. 第一个用户可以发送供他或她阅读的消息到线程,这时缓存将会被所有通过的节点更新,立即从本地缓存中设置新的内容。如果没有它,第二个用户需要等待一直到缓存在他或她连接到的节点上失效之前,他或她才可以看到更新的论坛发布内容。

配置分布式缓存需要修改portal.properties 文件或者追加一个你想要特殊缓存的内容。第一件你要做的事情是:你要确定你想要将你的缓存配置文件存储到服务器的什么位置。

这也许在liferay的class path的某些位置,也就需要您查找你在当前应用服务器上部署的liferay的路径。并在 Liferay 的 WEB-INF/classes文件夹中创建一个文件夹来存储文件。因为默认文件存储在.jar 文件内,所以您需要将它们解压缩到此处,然后告诉liferay它们在什么地方 (通过修改portal.properties 文件)。

例如:在Tomcat下运行的Liferay 存储在 / webapps/ROOT目录下。并且文件夹结构为 WEB-INF\\classes。

您可以在这里中创建一个名称为 myehcache的新文件夹来存储自定义缓存配置文件。

将/ehcache 文件夹复制 (在portal- impl.jar 文件内)到刚刚创建的 myehcache 文件夹。

修改portal.propties文件中的

net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml部分。重新定向文件位置

现在,Liferay 已经指向您的自定义文件可以通过修改此文件来更改Hibernate的缓存配置。

通过修改portal.proptites文件中的Ehcache部分的属性,以便它们指向您的自定义文件夹中的文件。

例如:

ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm.xml部分。 如果你想启用分布式集群取消对以下行注释并将它指向您的自定义文件: ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml 现在,您可以看一下这些文件中设置,并优化以适合您的环境及应用程序。

1.6.1 Hibernate缓存设置

默认情况下,Hibernate(Liferay 的数据库持久性层) 被配置为使用 Ehcache 作为其缓存提供程序。这是推荐的设置。不过默认的配置所指向的一个文件,并没有启用集群。

若要使用群集的缓存,

可以修改portal.propties文件的hibernate部分,注释掉默认的文件 (hibernate.xml),并取消注释文件中集群的部分。确认您所更改路径,以便它能指向您的自定义文件:

net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml

下一步,在文本编辑器中打开此文件。 您会发现配置已设置为执行分布式缓存通过 multi-cast 连接。可能是这样,但是,配置并没有为您特定的应用程序设置。您会注意默认情况下,唯一的缓存对象中,hibernate缓存是用户对象

(com.liferay.portal.model.impl.UserImpl)。这意味着,当一个用户登录在他或她的用户对象就会在缓存中,任何门户的操作要求都会访问它 (例如,权限检查) 这样可以非常迅速地从缓存检索该对象。

您可能想将其他对象添加到缓存,例如您的应用程序的一大部分可能被使用文档库 Portlet 的文档管理。在这种情况下您可能要缓存文档库对象DLFileEntryImpl来当用户访问文档时提高性能。可以将您要缓存的类添加到配置文件另一个块:

name=\maxElementsInMemory=\eternal=\

timeToIdleSeconds=\overflowToDisk=\>

class=\properties=\propertySeparator=\/>

class=\

/>

还有,您的网站可能会使用留言板的 portlet 而且那些留言板可能会有太多的数据交互情况。若要缓存消息板上线程,可以配置MBMessageImpl 类到配置

文件中:

name=\maxElementsInMemory=\eternal=\

timeToIdleSeconds=\overflowToDisk=\>

class=\properties=\propertySeparator=\/>

class=\

/>

请注意如果您的开发人员有重写这些类的情况,将必须指定被重写的类而不是使用Liferay的类。

您可以很容易添加特定的数据进行缓存,但是要小心的是,太多的缓存会降低性能,而且会过于频繁启动垃圾回收导致JVM 运行的内存不足。可能需要将您 JVM 上关于缓存设置的内存设置提高,您可以在 Ehcache 的文档中找到有关这些设置的细节。

1.7 工作流 1.8 性能调整

一旦您设置和运行了liferay,您可能发现需要调整它的性能,尤其是如果您的门户上的数据流量大于您所预计的情况时。有一些明确的步骤,您对于相关方面采用来提高 Liferay 的性能。

1.8.1 内存

内存当您要优化性能的第一个要素。如果您有任何磁盘交换都会对性能有严重影响。请确保您的服务器具有一个适宜量的内存而且被你JVM调到和使用它。

将使用控制内存量的三个 JVM 命令: -Xms -Xmx

-XX:MaxPermSize

这三个设置可以控制JVM 最初最大可用内存量、可以增长量,和堆的单独面积调用永久生成空间的内存量。

前两个设置应为合理设置,例如默认称为 catalina.sh (或 catalina.bat) 的 Tomcat 启动脚本将选项设置为:

-Xms128m -Xmx1024m -XX:MaxPermSize=128m

这对于一个中等机器或开发人员计算机是完全合理的。这些设置允许最初采取 128 MB 的 RAM JVM,增长到1024MB RAM 并且有 128 MB 的 PermGen 空间。

如果您的Liferay 具有 4 GB 的 RAM 并且您的服务器有性能问题,您可能首先要查看的是JVM 的增长值,

通过在运行分析器(例如,Jprobe 和YourKit),可以告诉你服务器的内存是否有问题。如果您看到垃圾回收 (GC) 经常运行,则一定要增加JVM 的可用内存的数量。

PermGen 空间的问题也会影响性能。PermGen 空间包含long-live类、匿名类和 interned 的字符串。已知的Liferay 广泛使用Hibernate的特别之处在于使用 PermGen 的空间。如果你增加JVM 的可用内存的数量。可能要相应地增加的 PermGen 空间量。

1.8.2 属性文件更改

修改portal.proptites文件将以下设置为 false,则禁用检查服务器端最后修改的日期CSS 和 JavaScript。

last.modified.check=false

将此属性设置为 true用于在生产环境下更快速度缓解主题的 CSS 文件加载的负荷。默认情况下它设置为 false 的是有利于系统诊断。您也可以通过将 URL 参数 css_fast_load 设置为 0 来禁用快速装载。

theme.css.fast.load=true

将此属性设置为 true用于在生产环境下更快速度缓解JS文件加载的负荷。默认默认情况下它设置为 false 的是有利于系统诊断。。您也可以通过将 URL 参数 js_fast_load 设置为 0 来禁用快速装载。

javascript.fast.load=true

1.8.3 Servlet 过滤器

Liferay 默认情况下启用和运行附带的15个 servlet 过滤器,实际情况时可能您不全部需要他们。其中的两个筛选器,您可以禁用而没有任何影响是compression filter和strip filter。

这些过滤器负责收缩response (节省带宽) 大小。

Strip filte从响应对象中移除空白并且使用compression filter来压缩它。 这显然需要一些处理过程,因此禁用这些两个过滤器器是可以提高性能。 若要禁用 servlet 过滤器,只需注释web.xml 文件的相关部分。

如果有不使用的功能相关的过滤器,可以注释掉,以实现一些性能收益。 例如如果不使用 CAS 单点登陆,注释掉 CAS 过滤器。 如果您不使用 NTLM,注释掉 Ntlm 过滤器。

如果您不使用社区功能,注释掉虚拟主机过滤器的虚拟托管。 在运行较少 servlet 过滤器时,每个请求需要的处理能力就较少。

1.8.4 Portlet

Liferay 内含的Portlet 含有大量的功能,但不是每个正在运行 Liferay要使用它们的所有功能。可以禁用掉不使用的portlet来提高服务器性能。

本文来源:https://www.bwwdw.com/article/jk3p.html

Top