Liferay 6.2 多播集群问题
Liferay 6.2 clustering issue with multicast
我正在尝试在启用多路广播的 2 台服务器上将 ehcache 和 lucene 与 Liferay 6.2 EE sp2 捆绑在一起。我们有 Apache HTTPD 服务器前端 tomcat 服务器使用反向代理。两个节点上都部署了有效的 6.2 许可证。
我们在门户中使用以下属性-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 集群不起作用的问题。以下测试失败:
- 在节点 1 上移动 portlet,但不会显示在节点 2 上
除了lucene的启动错误外,没有其他错误。
14:19:35,771 ERROR
[CLUSTER_EXECUTOR_CALLBACK_THREAD_POOL-1][LuceneHelperImpl:1186]
Unable to load index for company 10157
com.liferay.portal.kernel.exception.SystemException:
java.net.ConnectException: Connection refused at
com.liferay.portal.search.lucene.LuceneHelperImpl.getLoadIndexesInputStreamFromCluster(LuceneHelperImpl.java:488)
at
com.liferay.portal.search.lucene.LuceneHelperImpl$LoadIndexClusterResponseCallback.callback(LuceneHelperImpl.java:1176)
at
com.liferay.portal.cluster.ClusterExecutorImpl$ClusterResponseCallbackJob.run(ClusterExecutorImpl.java:614)
at
com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask._runTask(ThreadPoolExecutor.java:682)
at
com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask.run(ThreadPoolExecutor.java:593)
at java.lang.Thread.run(Thread.java:745) Caused by:
java.net.ConnectException: Connection refused at
java.net.PlainSocketImpl.socketConnect(Native Method) at
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at 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)
at 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)
at 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.
谢谢!
在我的团队和 liferay 支持人员的大量故障排除和帮助之后,我们切换到使用单播并且效果更好。
这是我们所做的:
- 从 tomcat home/webappts/ROOT/WEB_INF/lib 中提取 jgroups.jar,保存在本地。
- 解压缩 jgroups.jar 文件并从 jar 的 WEB_INF 文件夹
中提取并保存 tcp.xml
作为基线测试,更改了 tcp.xml 中的部分并保存
TCPPING 超时 =“3000”
initial_hosts="${jgroups.tcpping.initial_hosts:servername1[7800],servername2[7800]}"
port_range="1"
num_initial_members="10"
将tcp.xml复制到两个节点上的liferay home
更改 portal-ext.properties 以删除多播属性并添加以下行。
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 配置的步骤:
手动在liferay数据库中创建table。
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 editor/parser 中的前导小于号存在问题,隐藏了它后面的任何内容:
\JDBC_PING datasource_jndi_name="java:comp/env/jdbc/LiferayPool"
initialize_sql="" />
- 手动保存文件并将其推送到两个节点。
启动服务器并重复上面的测试。
它应该可以无缝运行。
在下面 post:
中提到的 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 复制添加了以下门户实例属性,以便在 2 个节点之间更好地工作:
portal.instance.http.port=port that the app servers listen on ex. 8080
portal.instance.protocol=http
希望这对某人有所帮助。
更新
集群中的 lucene 索引加载问题已通过支持上述 LPS 的 Liferay 6.2 EE 补丁解决。
我正在尝试在启用多路广播的 2 台服务器上将 ehcache 和 lucene 与 Liferay 6.2 EE sp2 捆绑在一起。我们有 Apache HTTPD 服务器前端 tomcat 服务器使用反向代理。两个节点上都部署了有效的 6.2 许可证。
我们在门户中使用以下属性-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 集群不起作用的问题。以下测试失败:
- 在节点 1 上移动 portlet,但不会显示在节点 2 上
除了lucene的启动错误外,没有其他错误。
14:19:35,771 ERROR [CLUSTER_EXECUTOR_CALLBACK_THREAD_POOL-1][LuceneHelperImpl:1186] Unable to load index for company 10157 com.liferay.portal.kernel.exception.SystemException: java.net.ConnectException: Connection refused at com.liferay.portal.search.lucene.LuceneHelperImpl.getLoadIndexesInputStreamFromCluster(LuceneHelperImpl.java:488) at com.liferay.portal.search.lucene.LuceneHelperImpl$LoadIndexClusterResponseCallback.callback(LuceneHelperImpl.java:1176) at com.liferay.portal.cluster.ClusterExecutorImpl$ClusterResponseCallbackJob.run(ClusterExecutorImpl.java:614) at com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask._runTask(ThreadPoolExecutor.java:682) at com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask.run(ThreadPoolExecutor.java:593) at java.lang.Thread.run(Thread.java:745) Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at 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) at 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) at 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.
谢谢!
在我的团队和 liferay 支持人员的大量故障排除和帮助之后,我们切换到使用单播并且效果更好。
这是我们所做的:
- 从 tomcat home/webappts/ROOT/WEB_INF/lib 中提取 jgroups.jar,保存在本地。
- 解压缩 jgroups.jar 文件并从 jar 的 WEB_INF 文件夹 中提取并保存 tcp.xml
作为基线测试,更改了 tcp.xml 中的部分并保存
TCPPING 超时 =“3000” initial_hosts="${jgroups.tcpping.initial_hosts:servername1[7800],servername2[7800]}" port_range="1" num_initial_members="10"
将tcp.xml复制到两个节点上的liferay home
更改 portal-ext.properties 以删除多播属性并添加以下行。
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 配置的步骤:
手动在liferay数据库中创建table。
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 editor/parser 中的前导小于号存在问题,隐藏了它后面的任何内容:
\JDBC_PING datasource_jndi_name="java:comp/env/jdbc/LiferayPool" initialize_sql="" />
- 手动保存文件并将其推送到两个节点。
启动服务器并重复上面的测试。
它应该可以无缝运行。
在下面 post:
中提到的 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 复制添加了以下门户实例属性,以便在 2 个节点之间更好地工作:
portal.instance.http.port=port that the app servers listen on ex. 8080
portal.instance.protocol=http
希望这对某人有所帮助。
更新
集群中的 lucene 索引加载问题已通过支持上述 LPS 的 Liferay 6.2 EE 补丁解决。