我有以下设置
1.在AWS上有2台机器的1.liferay集群
2.通过tcp与JGroups进行单播集群复制
我在portal-ext.properties
中有以下参数#Setup hibernate
net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml
#Setup distributed ehcache
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml
#
# Clustering settings
#
cluster.link.enabled=true
ehcache.cluster.link.replication.enabled=true
cluster.link.channel.properties.control=tcp.xml
cluster.link.channel.properties.transport.0=tcp.xml
lucene.replicate.write=true
#In order to make use of jgroups
ehcache.bootstrap.cache.loader.factory=com.liferay.portal.cache.ehcache.JGroupsBootstrapCacheLoaderFactory
ehcache.cache.event.listener.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory
ehcache.cache.manager.peer.provider.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory
net.sf.ehcache.configurationResourceName.peerProviderProperties=file=/myehcache/tcp.xml
ehcache.multi.vm.config.location.peerProviderProperties=file=/myehcache/tcp.xml
cluster.executor.debug.enabled=true
ehcache.statistics.enabled=true
我无法使群集缓存复制正常工作。任何人都可以指出正确的方向吗? 如果以后需要,我可以发布更多细节。我还试图修改hibernate-clustered.xml和liferay-multi-vm-clustered.xml,但没有任何作用。
答案 0 :(得分:8)
在花了好几天阅读无数博客文章,论坛主题,当然还有SO问题之后,我想在这里总结一下我们如何最终设法在Liferay 6.2集群中配置缓存复制,使用单播TCP来适应Amazon EC2。
在配置Liferay进行缓存复制之前,您必须了解Liferay依赖于JGroups通道。基本上,JGroups允许发现远程实例并与之通信。默认情况下(至少在Liferay中)它利用多播UDP来实现这些目标。有关详情,请参阅JGroups website。
要启用单播TCP,您必须首先从Liferay webapp中的jgroups.jar
获取JGroups的TCP配置文件(类似$LIFERAY_HOME/tomcat-7.0.42/webapps/ROOT/WEB-INF/lib/jgroups.jar
)。将此文件解压缩到Liferay webapp的类路径可用的位置。说$LIFERAY_HOME/tomcat-7.0.42/webapps/ROOT/WEB-INF/classes/custom_jgroups/tcp.xml
。注意这条道路。
要使此配置在Liferay群集中运行,您只需向singleton_name="liferay"
标记添加TCP
属性:
<config xmlns="urn:org:jgroups"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.1.xsd">
<TCP singleton_name="liferay"
bind_port="7800"
loopback="false"
...
您可能已经注意到:
一个。此配置文件未指定要侦听的绑定地址,
B中。必须通过系统属性设置集群的初始主机。
实际上,您需要修改$LIFERAY_HOME/tomcat-7.0.42/bin/setenv.sh
以添加以下JVM系统属性:
-Djava.net.preferIPv4Stack=true
-Djgroups.bind_addr=192.168.0.1
-Djgroups.tcpping.initial_hosts=192.168.0.1[7800],80.200.230.2[7800]
绑定地址定义要侦听的网络接口(在TCP配置文件中JGroups端口设置为7800)。初始主机属性必须包含群集的每个单个实例(有关详细信息,请参阅TCPPING and MERGE2 on JGroups docs)及其侦听端口。远程实例可以通过其主机名,本地地址或公共地址来引用。
(提示:如果您在Amazon EC2上设置Liferay群集,则每次重新启动后,实例的本地IP地址和主机名可能会有所不同。要解决此问题,您可以用hostname命令的结果替换setenv.sh中的本地地址:`hostname`
- 注意这里的反引号)
(提示:如果在EC2上使用安全组,您还应确保将端口7800打开到同一安全组中的所有实例)
通过向portal-ext.properties添加以下属性,在Liferay上启用了JGroups复制:
# Tells Liferay to enable Cluster Link. This sets up JGroups control and transport channels (necessary for indexes and cache replication)
cluster.link.enabled=true
# This external address is used to determine which network interface must be used. This typically points to the database shared between the instances.
cluster.link.autodetect.address=shareddatabase.eu-west-1.rds.amazonaws.com:5432
为单播TCP配置JGroup只需指向正确的文件:
# Configures JGroups control channel for unicast TCP
cluster.link.channel.properties.control=/custom_jgroups/tcp.xml
# Configures JGroups transport channel for unicast TCP
cluster.link.channel.properties.transport.0=/custom_jgroups/tcp.xml
在同一个文件中,Lucene索引复制需要以下单个属性:
# Enable Lucene indexes replication through Cluster Link
lucene.replicate.write=true
EhCache缓存复制更加微妙。您必须为Hibernate缓存和Liferay的内部缓存配置JGroups。要了解此配置,您必须知道,自Liferay 6.2起,默认 EhCache配置文件是&#34; clustered&#34; (不设置这些属性):
# Default hibernate cache configuration file
net.sf.ehcache.configurationResourceName=/ehcache/hibernate-clustered.xml
# Default internal cache configuration file
ehcache.multi.vm.config.location=/ehcache/liferay-multi-vm-clustered.xml
这些配置文件都依赖于必须设置启用JGroups的EhCache工厂:
# Enable EhCache caches replication through JGroups
ehcache.bootstrap.cache.loader.factory=com.liferay.portal.cache.ehcache.JGroupsBootstrapCacheLoaderFactory
ehcache.cache.event.listener.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory
ehcache.cache.manager.peer.provider.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory
的JGroups&#39;缓存管理器对等提供程序工厂需要包含JGroups配置的file
参数。指定单播TCP配置文件:
# Configure hibernate cache replication for unicast TCP
net.sf.ehcache.configurationResourceName.peerProviderProperties=file=/custom_jgroups/tcp.xml
# Configure internal caches replication for unicast TCP
ehcache.multi.vm.config.location.peerProviderProperties=file=/custom_jgroups/tcp.xml
(提示:如果有疑问,您应该参考属性定义和默认值:https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html)
此外,您可以使用以下命令启用调试跟踪:
cluster.executor.debug.enabled=true
您甚至可以告诉Liferay在每个页面上显示处理请求的节点的名称:
web.server.display.node=true
最后,JGroups频道通过probe tool公开可用的诊断服务。
请记住,这仅涵盖索引和缓存复制。设置Liferay群集时,还应考虑设置:
答案 1 :(得分:3)
我花了很多时间在AWS上制作Liferay 6.1.1 CE群集。
这是我的“portal-ext.properties”,与您的
几乎没有区别##
## JDBC
##
# Tomcat datasource
jdbc.default.jndi.name=jdbc/LiferayPool
##
## Mail
##
# Tomcat mail session
mail.session.jndi.name=mail/MailSession
##
## Document Library Portlet
##
# NFS shared folder
dl.store.file.system.root.dir=/opt/document_library/
##
## Cluster Link
##
# Cluster Link over JGroups TCP unicast
cluster.link.enabled=true
cluster.link.channel.properties.control=custom_cache/tcp.xml
cluster.link.channel.properties.transport.0=custom_cache/tcp.xml
# Any VPC internal IP useful to detect local eth interface
cluster.link.autodetect.address=10.0.0.19:22
##
## Lucene Search
##
# Lucene index replication over Cluster Link
lucene.replicate.write=true
##
## Hibernate
##
# Second Level cache distributed with Ehcache over JGroups TCP unicast
net.sf.ehcache.configurationResourceName=/custom_cache/hibernate-clustered.xml
net.sf.ehcache.configurationResourceName.peerProviderProperties=file=custom_cache/tcp.xml
##
## Ehcache
##
# Liferay cache distributed with Ehcache over JGroups TCP unicast
ehcache.multi.vm.config.location=/custom_cache/liferay-multi-vm-clustered.xml
ehcache.multi.vm.config.location.peerProviderProperties=file=custom_cache/tcp.xml
ehcache.bootstrap.cache.loader.factory=com.liferay.portal.cache.ehcache.JGroupsBootstrapCacheLoaderFactory
ehcache.cache.event.listener.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory
ehcache.cache.manager.peer.provider.factory=net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory
我添加了以下属性
singleton_name="custom_cache"
到“custom_cache / tcp.xml”JGroups config的TCP信封。
最后,我为节点NODE_1的Liferay启动脚本添加了以下选项
JAVA_OPTS="$JAVA_OPTS -Djgroups.bind_addr=NODE_1 -Djgroups.tcpping.initial_hosts=NODE_1[7800],NODE_2[7800] -Djava.net.preferIPv4Stack=true"
和NODE_2
JAVA_OPTS="$JAVA_OPTS -Djgroups.bind_addr=NODE_2 -Djgroups.tcpping.initial_hosts=NODE_1[7800],NODE_2[7800] -Djava.net.preferIPv4Stack=true"
我希望这可以帮助您节省时间。