7

私は次の設定をしています

1. AWS 上の 2 台のマシンを持つ 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 も変更しようとしましたが、何も機能しません。

4

2 に答える 2

8

無数のブログ投稿、フォーラム トピック、そしてもちろん SO の質問を読むのに何日も費やした後、Amazon EC2 に合わせてユニキャスト TCP を使用して、Liferay 6.2 クラスターでキャッシュ レプリケーションを最終的に構成する方法をここに要約したいと思います。

JGroups 構成

キャッシュ レプリケーション用に Liferay を設定する前に、Liferay が JGroups チャネルに依存していることを理解する必要があります。基本的に、JGroups を使用すると、リモート インスタンスを検出して通信できます。デフォルトでは (少なくとも Liferay では)、マルチキャスト UDP を利用してこれらの目標を達成します。詳細については、 JGroups の Web サイトを参照してください。

ユニキャスト TCP を有効にするには、最初jgroups.jarに Liferay webapp から 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"
         ...

お気づきかもしれませんが、

A. この構成ファイルでは、リッスンするバインド アドレスが指定されていません。

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]

バインド アドレスは、リッスンするネットワーク インターフェイスを定義します (JGroups ポートは、TCP 構成ファイルで 7800 に設定されています)。初期ホスト プロパティには、クラスターのすべての単一インスタンスが含まれている必要があります(詳細については、JGroups ドキュメントの TCPPING および MERGE2 を参照してください)。リモート インスタンスは、ホスト名、ローカル アドレス、またはパブリック アドレスで参照できます。

(ヒント: Amazon EC2 で Liferay クラスターをセットアップしている場合、再起動するたびにインスタンスのローカル IP アドレスとホスト名が異なる可能性があります。これを回避するには、setenv.sh のローカル アドレスをhostname コマンドの結果: `hostname`-- バッククォートに注意してください)

(ヒント: EC2 でセキュリティ グループを使用する場合は、同じセキュリティ グループ内のすべてのインスタンスに対してポート 7800 を開くことも確認する必要があります)

ライフレイ構成

JGroups レプリケーションは、次のプロパティを portal-ext.properties に追加することで、Liferay で有効になります。

# 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 用に JGroups を設定するには、正しいファイルを指定するだけです。

# 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 インデックスのレプリケーションには次の 1 つのプロパティが必要です。

# Enable Lucene indexes replication through Cluster Link
lucene.replicate.write=true

EhCache キャッシュのレプリケーションはより微妙です。Hibernate キャッシュと Liferay の内部キャッシュの両方に JGroups を設定する必要があります。この構成を理解するには、Liferay 6.2 以降、デフォルトのEhCache 構成ファイルが「クラスター化」されていることを知っておく必要があります (これらのプロパティを設定しないでください)。

# 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 のキャッシュ マネージャー ピア プロバイダー ファクトリはfile、JGroups 構成を含むパラメーターを予期します。ユニキャスト 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 チャネルは、プローブ ツールを通じて利用可能な診断サービスを公開します。

最後の注意事項

これはインデックスとキャッシュ レプリケーションのみを対象とすることに注意してください。Liferay クラスターをセットアップするときは、次のセットアップも検討する必要があります。

  • 共有データベース (RDS on AWS)、
  • 共有DocumentLibrary (AWS 上の S3 または RDS)、
  • Tomcat でのセッション レプリケーション、
  • Liferay の使用方法によっては、さらに多くの可能性があります。
于 2015-02-26T10:02:03.553 に答える
3

Liferay 6.1.1 CE クラスターを AWS で動作させるのに何時間も費やしました。

これが私の「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 設定の 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"

これが時間を節約するのに役立つことを願っています。

于 2013-04-28T21:55:04.020 に答える