我正在尝试使用启用了mutlicast的2台服务器上的Liferay 6.2 EE sp2捆绑集群ehcache和lucene。我们使用反向代理在面向tomcat服务器的Apache HTTPD服务器上运行。两个节点都部署了有效的6.2许可证。
我们在portal-ext.properties中使用以下属性:
cluster.link.enabled=true
lucene.replicate.write=true
ehcache.cluster.link.replication.enabled=true
# Since we are using SSL on the frontend
web.server.protocol=https
# set this to any server that is visible to both the nodes
cluster.link.autodetect.address=dbserverip:dbport
#ports and ips we know work in our environment for multicast
multicast.group.address["cluster-link-control"]=ip
multicast.group.port["cluster-link-control"]=port1
multicast.group.address["cluster-link-udp"]=ip
multicast.group.port["cluster-link-udp"]=port2
multicast.group.address["cluster-link-mping"]=ip
multicast.group.port["cluster-link-mping"]=port3
multicast.group.address["hibernate"]=ip
multicast.group.port["hibernate"]=port4
multicast.group.address["multi-vm"]=ip
multicast.group.port["multi-vm"]=port5
我们遇到的问题是ehcache和lucene集群无法正常工作。以下测试失败:
除了lucene的启动错误外没有任何错误。
14:19:35,771错误 [CLUSTER_EXECUTOR_CALLBACK_THREAD_POOL-1] [LuceneHelperImpl:1186] 无法加载公司10157的索引 com.liferay.portal.kernel.exception.SystemException: java.net.ConnectException:拒绝连接 com.liferay.portal.search.lucene.LuceneHelperImpl.getLoadIndexesInputStreamFromCluster(LuceneHelperImpl.java:488) 在 com.liferay.portal.search.lucene.LuceneHelperImpl $ LoadIndexClusterResponseCallback.callback(LuceneHelperImpl.java:1176) 在 com.liferay.portal.cluster.ClusterExecutorImpl $ ClusterResponseCallbackJob.run(ClusterExecutorImpl.java:614) 在 com.liferay.portal.kernel.concurrent.ThreadPoolExecutor $ WorkerTask._runTask(ThreadPoolExecutor.java:682) 在 com.liferay.portal.kernel.concurrent.ThreadPoolExecutor $ WorkerTask.run(ThreadPoolExecutor.java:593) 在java.lang.Thread.run(Thread.java:745)引起: java.net.ConnectException:拒绝连接 java.net.PlainSocketImpl.socketConnect(Native Method)at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)at java.net.Socket.connect(Socket.java:579)at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:625)at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160) 在sun.net.NetworkClient.doConnect(NetworkClient.java:180)at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)at sun.net.www.protocol.https.HttpsClient。(HttpsClient.java:275) 在sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)
我们通过运行以下命令并使用下载的jgroups.jar副本并替换为5个多播ips和端口来验证jgroups多播在liferay之外工作。
Testing with JGROUPS
1) McastReceiver -
java -cp ./jgroups.jar org.jgroups.tests.McastReceiverTest -mcast_addr 224.10.10.10 -port 5555
ex. java -cp jgroups-final.jar org.jgroups.tests.McastReceiverTest -mcast_addr 224.10.10.10 -port 5555
2) McastSender -
java -cp ./jgroups.jar org.jgroups.tests.McastSenderTest -mcast_addr 224.10.10.10 -port 5555
ex. java -cp jgroups-final.jar org.jgroups.tests.McastSenderTest -mcast_addr 224.10.10.10 -port 5555
From there, typing things into the McastSender will result in the Receiver printing it out.
谢谢!
答案 0 :(得分:1)
经过我团队中各方人员和liferay支持的大量故障排除和帮助后,我们转而使用单播,并且工作得更好。
以下是我们的所作所为:
作为基线测试,更改了tcp.xml中的部分并保存了
TCPPING超时=" 3000" initial_hosts =" $ {jgroups.tcpping.initial_hosts:servername1 [7800],servername2 [7800]}" port_range =" 1" num_initial_members =" 10"
将tcp.xml复制到两个节点上的liferay主页
更改portal-ext.properties以删除mutlicast属性并添加以下行。
cluster.link.channel.properties.control = $ {liferay.home} /tcp.xml cluster.link.channel.properties.transport.0 = $ {liferay.home} /tcp.xml
启动节点1
启动节点2
检查日志
执行群集缓存测试:
在节点1上移动portlet,显示在节点2上
在控制面板下 - >许可证管理器两个节点都显示有效许可证。
在控制面板中添加节点1后在节点2上搜索用户 - >用户和组织。
以上所有测试均有效。
因此我们关闭服务器并将tcp.xml更改为使用jdbc而不是tcpping,因此我们不必手动指定节点名称。
jdbc config的步骤:
手动在liferay数据库中创建表。
CREATE TABLE JGROUPSPING(own_addr varchar(200)not null,cluster_name varchar(200)not null,ping_data blob default null,primary key(own_addr,cluster_name))
更改tcp.xml并删除tcpping部分并添加以下内容。
注意:请在以下代码块中替换带小于符号的前导\。 SO编辑器/解析器隐藏的内容少于签名存在问题隐藏在它之后:
\ JDBC_PING datasource_jndi_name =" java:comp / env / jdbc / LiferayPool" initialize_sql ="" />
启动服务器并重复上述测试。
它应该无缝地工作。
对于以下帖子中提到的jgroups的调试登录是非常宝贵的:
tomcat home/webapps/ROOT/WEB-INF/classes/META-INF/portal-log4j-ext.xml file I used to triage various issues on bootup related to clustering.
<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<category name="com.liferay.portal.cluster">
<priority value="TRACE" />
</category>
<category name="com.liferay.portal.license">
<priority value="TRACE" />
</category>
我们还发现Lucene群集复制启动错误已在修订包中得到修复,并且正在为其获取补丁。
https://issues.liferay.com/browse/LPS-51714
https://issues.liferay.com/browse/LPS-51428
我们为lucene复制添加了以下门户网站实例属性,以便在两个节点之间更好地工作:
portal.instance.http.port=port that the app servers listen on ex. 8080
portal.instance.protocol=http
希望这有助于某人。
<强>更新强>
群集问题中的lucene索引负载由Liferay 6.2 EE补丁解决,支持上面提到的LPS。