null Alfresco Community Editionでクラスタリングを試す(2)〜準備〜

こんにちは。てらしたです。

前回は概要のみのご説明でしたが、今回から実際にクラスタ構成を作っていきたいと思います。今回は標準のAlfrescoを2台立てて、キャッシュのレプリケーションが行われていないことを確認するところまでをご紹介します。

前回の最後にご説明したシステム構成を作っていくことになるのですが、環境構築を容易にするためにAlfresco PlatformとShare以外はDockerコンテナとして立ち上げることにします。具体的には以下のような構成を作成していきます。

連携するアプリケーションをDocker Composeで起動

AlfrescoをDocker Composeで起動するためのdocker-compose.ymlが提供されているので、まずはこれをコピーします(リンクは201911GAのバージョンのもの)。

docker-compose.yml

適当なディレクトリに、上記のファイルを以下のように変更して保存します。

  • 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をインストールしてキャッシュが同期していることを確認します。

関連記事
customize
customize

RANKING
2020.10.12
2020.11.19
2020.12.23
2020.10.05
2020.11.25