Alfresco Community Editionでクラスタリングを試す(2)〜準備〜 - Alfresco Community Editionでクラスタリングを試す(2)〜準備〜 - aegif Labo Blog Alfresco
null Alfresco Community Editionでクラスタリングを試す(2)〜準備〜
こんにちは。てらしたです。
前回は概要のみのご説明でしたが、今回から実際にクラスタ構成を作っていきたいと思います。今回は標準のAlfrescoを2台立てて、キャッシュのレプリケーションが行われていないことを確認するところまでをご紹介します。
前回の最後にご説明したシステム構成を作っていくことになるのですが、環境構築を容易にするためにAlfresco PlatformとShare以外はDockerコンテナとして立ち上げることにします。具体的には以下のような構成を作成していきます。
連携するアプリケーションをDocker Composeで起動
AlfrescoをDocker Composeで起動するためのdocker-compose.ymlが提供されているので、まずはこれをコピーします(リンクは201911GAのバージョンのもの)。
適当なディレクトリに、上記のファイルを以下のように変更して保存します。
- servicesからalfresco、share、proxyを削除
- solr6の環境変数SOLR_ALFRESCO_HOSTの値をalfrescoからhost.docker.internalに変更
- solr6のホスト側のポートを8083から8983に変更
変更後のファイルは以下のとおりです。
version: "2"
services:
alfresco-pdf-renderer:
image: alfresco/alfresco-pdf-renderer:2.1.0
mem_limit: 1g
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8090:8090
imagemagick:
image: alfresco/alfresco-imagemagick:2.1.0
mem_limit: 1g
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8091:8090
libreoffice:
image: alfresco/alfresco-libreoffice:2.1.0
mem_limit: 1g
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8092:8090
tika:
image: alfresco/alfresco-tika:2.1.0
mem_limit: 1g
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8093:8090
transform-misc:
image: alfresco/alfresco-transform-misc:2.1.0
mem_limit: 1g
environment:
JAVA_OPTS: " -Xms256m -Xmx512m"
ports:
- 8094:8090
postgres:
image: postgres:11.4
mem_limit: 512m
environment:
- POSTGRES_PASSWORD=alfresco
- POSTGRES_USER=alfresco
- POSTGRES_DB=alfresco
command: postgres -c max_connections=300 -c log_min_messages=LOG
ports:
- 5432:5432
solr6:
image: alfresco/alfresco-search-services:1.4.0
mem_limit: 2g
environment:
#Solr needs to know how to register itself with Alfresco
- SOLR_ALFRESCO_HOST=host.docker.internal
- SOLR_ALFRESCO_PORT=8080
#Alfresco needs to know how to call solr
- SOLR_SOLR_HOST=solr6
- SOLR_SOLR_PORT=8983
#Create the default alfresco and archive cores
- SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
#HTTP by default
- ALFRESCO_SECURE_COMMS=none
- "SOLR_JAVA_MEM=-Xms2g -Xmx2g"
ports:
- 8983:8983 #Browser port
activemq:
image: alfresco/alfresco-activemq:5.15.8
mem_limit: 1g
ports:
- 8161:8161 # Web Console
- 5672:5672 # AMQP
- 61616:61616 # OpenWire
- 61613:61613 # STOMP
保存したらdocker-compose upで起動します。solr6がAlfrescoに接続できないというエラーを出しますが、Alfrescoはまだ起動していないので問題ありません。無事に各コンテナが起動できたら一旦終了してもOKです。
Alfresco PlatformとShareをデプロイ
次に、1台目のTomcatを準備します。こちらでご紹介している手順の「Tomcatのダウンロードと設定」と「Alfrescoのインストール」を実施します。ただし、alfresco-global.propertiesについては以下のとおり変更してください。
- dir.rootの値はalf_dataを置く適当なディレクトリへのパスを指定する
- local.transform.service.enabledおよびlegacy.transform.service.enabledの値をtrueに変更する
- 以下のプロパティを追記する
localTransform.pdfrenderer.url=http://localhost:8090/
localTransform.imagemagick.url=http://localhost:8091/
localTransform.libreoffice.url=http://localhost:8092/
localTransform.tika.url=http://localhost:8093/
localTransform.misc.url=http://localhost:8094/
alfresco-pdf-renderer.url=http://localhost:8090/
jodconverter.url=http://localhost:8092/
img.url=http://localhost:8091/
tika.url=http://localhost:8093/
transform.misc.url=http://localhost:8094/
ここまで準備ができたら、tomcat/bin/startup.shを実行してAlfrescoを起動します(先ほどコンテナを停止していた場合はAlfrescoを起動する前に起動しておきます)。無事に起動したらブラウザからhttp://localhost:8080/shareを開いて簡単に動作確認をして、問題なければtomcat/bin/shutdown.shで終了します。
2台目のTomcatの構築
tomcatディレクトリをtomcat1にリネームして、ディレクトリごとtomcat2としてコピーします。
mv tomcat tomcat1
cp -a tomcat1 tomcat2
tomcat1とtomcat2が使用するポートが競合しないようにtomcat2配下のファイルを以下のように変更します。
- tomcat2/conf/server.xml を開き、ポートがtomcat1と競合しないように8000番台のポートを全て18000番台に変更する(変更後のポートは競合していなければなんでもよい)
- tomcat2/shared/classed/alfresco.propertiesで以下の2行のコメントを外して8080から 18080 に変更する
alfresco.port=18080
share.port=18080 - tomcat2/shared/classed/alfresco/web-extension/share-config-custom.xmlを開き、endpoint-url で指定されているURLのポートを全て8080から18080に変更する
- tomcat2/work配下のファイル/フォルダを全て削除する
- tomcat2/temp配下のファイル/フォルダを全て削除する
準備ができたら、コンテナ、tomcat1、tomcat2をそれぞれ起動します。http://localhost:8080/shareとhttp://localhost:18080/shareをブラウザで開き、ログインやフォルダ/ファイルの閲覧ができれば準備は完了です。
キャッシュのレプリケーションが行われていないことの確認
ここまでの作業では、別々のWebアプリケーションサーバを立てただけなので、tomcat1とtomcat2のAlfresco Platform間でキャッシュのレプリケーションは行われていません。aldicaインストール後と比較するためにこの時点でそれを確認しておきます。
aldica適用後の動作確認の方法についてこのドキュメントで説明されているとおり、Alfrescoでは認証チケットをキャッシュに保持するのみでDBには保存しません。そのため、キャッシュのレプリケーションが行われていなければ、tomcat1のAlfresco Platformにログインして取得した認証チケットはtomcat2では無効なはずです。それを以下の手順で確認します。
まず、以下のコマンドでtomcat1のAlfrescoから認証チケットを取得します。
curl "http://localhost:8080/alfresco/service/api/login?u=admin&pw=admin"
ログインに成功すると以下のようなレスポンスが返ってきます。
<?xml version="1.0" encoding="UTF-8"?>
<ticket>TICKET_394596160d21982de407c81bc3389f17ced666d6</ticket>
次に、このチケットを使用してtomcat1のAlfrescoから以下のコマンドでadminのユーザ情報を取得してみます。
curl "http://localhost:8080/alfresco/service/api/people/admin?alf_ticket=TICKET_394596160d21982de407c81bc3389f17ced666d6"
以下のようなレスポンスが返ってくるので、取得したチケットが有効であることがわかります。
{
"url": "\/alfresco\/service\/api\/people\/admin",
"userName": "admin",
"enabled": true,
"firstName": "Administrator",
...
一方、同じリクエストを tomcat2 の Alfresco に送ると(ポートを変えただけで他の部分は同じです)、
curl "http://localhost:18080/alfresco/service/api/people/admin?alf_ticket=TICKET_394596160d21982de407c81bc3389f17ced666d6"
以下のように認証に失敗するので、キャッシュのレプリケーションは行われていないことがわかります。サーバを2台立てただけで何も手を加えていないので当然ですが...。
{
"status" :
{
"code" : 401,
"name" : "Unauthorized",
"description" : "The request requires HTTP authentication."
},
...
以上で準備は完了です。次回はこのalfresco1とalfresco2にaldicaをインストールしてキャッシュが同期していることを確認します。