Clustering for High Availability
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

例:シンプルなDXPクラスターの作成

DXPクラスタリングを素早く簡単に学ぶには、 個のDockerコンテナを使用して、1台のマシン上に2ノードのDXPクラスタ環境をセットアップします。この例では、2つのDXPサーバーコンテナに加え、データベース、検索エンジン、ファイルストア用のサーバーコンテナを作成します。

サーバータイプ実装コンテナ名
データベースMariaDBsome-mariadb
ファイルストアDBストアsome-mariadb
検索エンジンElasticsearchelasticsearch
DXPサーバートムキャットdxp-1
DXPサーバートムキャットdxp-2
警告

この例は学習目的のものであり、実運用環境での使用には適していません。本番環境では、DXPサーバーへのリクエストの負荷分散を行うためのHTTPサーバーを含め、読み取り専用操作と読み書き操作用に別々のデータベースサーバーを使用し、データベースサーバー、ファイルストアサーバー、検索エンジンサーバーのクラスタリングと負荷分散を検討する必要があります。詳細については、 高可用性のためのクラスタリング を参照してください。

主な手順は以下のとおりです。

  1. データベースサーバーを起動する
  2. ファイルストアサーバーを起動する
  3. 検索エンジンサーバーを起動する
  4. 各ノードの検索エンジンを設定する
  5. DXPクラスターを起動する
  6. DXPクラスターをテストする

データベースサーバーを起動する

DXPクラスタには、すべてのDXPクラスタノードからアクセス可能なデータソースが必要です。データソースは、JNDIデータソース、データベースサーバーへの直接接続、またはデータベースサーバークラスタのいずれかになります。お使いのDXPバージョンがサポートするデータベースサーバーについては、互換性マトリックスをご確認ください。

データベースサーバーとDXPデータベースを作成します。

  1. MariaDBのDockerコンテナを起動します。

    docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:10.2
    
  2. コンテナのシェルで、 DXP データベース を作成します。

    データベースサーバーにログインしてください。

    docker exec -it some-mariadb bash -c "/usr/bin/mysql -uroot -pmy-secret-pw"
    

    DXP用のデータベースを作成します。

    create database dxp_db default character set utf8mb4 collate utf8mb4_unicode_ci;
    

    データベースセッションを終了します。

    quit
    

    bashセッションを終了します。

    exit
    

お使いのデータベースサーバーはDXPに対応しています。詳細については、 クラスタノードのデータベース構成 を参照してください。

ファイルストアサーバーを起動する

DXPクラスタには、すべてのDXPクラスタノードからアクセス可能なファイルストアが必要です。便宜上、この例では DXP データベースに構成された DBStore ファイル ストア を使用します。この例では、既に起動しているデータベースサーバーにはファイルストアが含まれています。すべてのファイルストアタイプの構成方法については、 ファイルストレージの構成 を参照してください。

検索エンジンサーバーを起動する

DXPクラスタには、すべてのDXPクラスタノードからアクセス可能な検索エンジン(別プロセスとして実行)が必要です。詳細については、 検索エンジンのインストール を参照してください。

Elasticsearchサーバーの作成と設定:

  1. Elasticsearchサーバーのデータボリュームを保存するためのローカルフォルダを設定します。例えば、

    mkdir -p elasticsearch/es_data_volume
    
  2. elasticsearch という名前の Elasticsearch コンテナを起動します。

    docker run -it --name elasticsearch -p 9200:9200 -p 9300:9300 -e cluster.name=LiferayElasticsearchCluster -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -v $(pwd)/elasticsearch/es_data_volume:/var/lib/elasticsearch/data elasticsearch:6.8.7
    
    注記

    コンテナが max virtual memory areas vm.max_map_count [xxxxx] が低すぎると報告する場合は、少なくとも [xxxxxx]まで増やし、 vm.max_map_count を次のようなコマンドを使用して十分な値に設定します: sudo sysctl -w vm.max_map_count=[xxxxxx]。次にコンテナを起動します。

  3. 必要なElasticsearchプラグインをインストールしてください。

    docker exec -it elasticsearch bash -c '/usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu && /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji && /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-smartcn && /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-stempel'
    

お使いの検索エンジンは、検索インデックスを管理する準備ができています。

各ノードの検索エンジンサーバーを設定する

各 DXP ノードの Elasticsearch を設定するには、 設定ファイル を使用します。

  1. 設定ファイルの保存場所を作成します。

    mkdir -p dxp-1/files/osgi/configs dxp-2/files/osgi/configs
    
  2. dxp-1 サーバーノード用に Elasticsearch を設定します。

    cat <<EOT >> dxp-1/files/osgi/configs/com.liferay.portal.search.elasticsearch6.configuration.ElasticsearchConfiguration.config
    operationMode="REMOTE"
    transportAddresses="elasticsearch:9300"
    clusterName="LiferayElasticsearchCluster"
    EOT
    
  3. dxp-2 サーバーノード用に Elasticsearch を設定します。

    cat <<EOT >> dxp-2/files/osgi/configs/com.liferay.portal.search.elasticsearch6.configuration.ElasticsearchConfiguration.config
    operationMode="REMOTE"
    transportAddresses="elasticsearch:9300"
    clusterName="LiferayElasticsearchCluster"
    EOT
    

これらの設定ファイルは、DXPサーバーコンテナ上のバインドマウントを介して、クラスタノードからアクセスできるようにします。

注記

docker run --add-host elasticsearch:[ip] ... DXP サーバーで後で使用するコマンドは、 /etc/hosts/ エントリを追加し、名前 elasticsearch を Elasticsearch サーバー ホストの IP アドレスにマッピングします。

DXPクラスターを起動する

  1. elasticsearch および some-mariadb コンテナのコンテナ IP アドレスを取得するには、 docker network inspect bridge コマンドを実行します。ブリッジ ネットワークはデフォルト ネットワークです。

    重要

    以下の docker run コマンドでは、 [IP アドレス] を elasticsearch および some-mariadb コンテナの IP アドレスに置き換えてください。

  2. 開始 dxp-1。

    読みやすくするためにコマンドを拡張しました。

    docker run -it \
       --add-host elasticsearch:[IP address] \
       --add-host some-mariadb:[IP address] \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_JNDI_PERIOD_NAME="" \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME=org.mariadb.jdbc.Driver \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL="jdbc:mariadb://some-mariadb:3306/dxp_db?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false" \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_USERNAME=root \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_PASSWORD=my-secret-pw \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_ENABLED=true \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_CONTROL=control-channel-logic-name-1 \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_TRANSPORT_PERIOD_NUMBER0=transport-channel-logic-name-1 \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_AUTODETECT_PERIOD_ADDRESS=some-mariadb:3306 \
       -e LIFERAY_WEB_PERIOD_SERVER_PERIOD_DISPLAY_PERIOD_NODE=true \
       -e LIFERAY_DL_PERIOD_STORE_PERIOD_IMPL=com.liferay.portal.store.db.DBStore \
       --name dxp-1 \
       -p 11311:11311 \
       -p 8009:8009 \
       -p 8080:8080 \
       -v $(pwd)/dxp-1:/mnt/liferay \
       liferay/portal:7.4.3.132-ga132
    

    コマンドを1行に短縮したもの:

    docker run -it --name dxp-1 --add-host elasticsearch:[IP address] --add-host some-mariadb:[IP address] -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_JNDI_PERIOD_NAME="" -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME=org.mariadb.jdbc.Driver -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL="jdbc:mariadb://some-mariadb:3306/dxp_db?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false" -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_USERNAME=root -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_PASSWORD=my-secret-pw -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_ENABLED=true -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_CONTROL=control-channel-logic-name-1 -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_TRANSPORT_PERIOD_NUMBER0=transport-channel-logic-name-1 -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_AUTODETECT_PERIOD_ADDRESS=some-mariadb:3306 -e LIFERAY_WEB_PERIOD_SERVER_PERIOD_DISPLAY_PERIOD_NODE=true -e LIFERAY_DL_PERIOD_STORE_PERIOD_IMPL=com.liferay.portal.store.db.DBStore --name dxp-1 -p 11311:11311 -p 8009:8009 -p 8080:8080 -v $(pwd)/dxp-1:/mnt/liferay liferay/portal:7.4.3.132-ga132
    
  3. 開始 dxp-2。

    読みやすくするためにコマンドを拡張しました。

    docker run -it \
       --add-host elasticsearch:[IP address] \
       --add-host some-mariadb:[IP address] \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_JNDI_PERIOD_NAME="" \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME=org.mariadb.jdbc.Driver \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL="jdbc:mariadb://some-mariadb:3306/dxp_db?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false" \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_USERNAME=root \
       -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_PASSWORD=my-secret-pw \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_ENABLED=true \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_CONTROL=control-channel-logic-name-2 \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_TRANSPORT_PERIOD_NUMBER0=transport-channel-logic-name-2 \
       -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_AUTODETECT_PERIOD_ADDRESS=some-mariadb:3306 \
       -e LIFERAY_WEB_PERIOD_SERVER_PERIOD_DISPLAY_PERIOD_NODE=true \
       -e LIFERAY_DL_PERIOD_STORE_PERIOD_IMPL=com.liferay.portal.store.db.DBStore \
       --name dxp-2 \
       -p 11312:11311 \
       -p 9009:8009 \
       -p 9080:8080 \
       -v $(pwd)/dxp-2:/mnt/liferay \
       liferay/portal:7.4.3.132-ga132
    

    コマンドを1行に短縮したもの:

    docker run -it --add-host elasticsearch:[IP address] --add-host some-mariadb:[IP address] -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_JNDI_PERIOD_NAME="" -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS_UPPERCASEN_AME=org.mariadb.jdbc.Driver -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL="jdbc:mariadb://some-mariadb:3306/dxp_db?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false" -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_USERNAME=root -e LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_PASSWORD=my-secret-pw -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_ENABLED=true -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_CONTROL=control-channel-logic-name-2 -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME_PERIOD_TRANSPORT_PERIOD_NUMBER0=transport-channel-logic-name-2 -e LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_AUTODETECT_PERIOD_ADDRESS=some-mariadb:3306 -e LIFERAY_WEB_PERIOD_SERVER_PERIOD_DISPLAY_PERIOD_NODE=true -e LIFERAY_DL_PERIOD_STORE_PERIOD_IMPL=com.liferay.portal.store.db.DBStore --name dxp-2 -p 11312:11311 -p 9009:8009 -p 9080:8080 -v $(pwd)/dxp-2:/mnt/liferay liferay/portal:7.4.3.132-ga132
    

--add-host [domain]:[IP address] オプション は、ドメイン名を IP アドレスにマッピングする /etc/hosts ファイルのエントリ を追加します。これにより、構成(環境変数、ポータルプロパティ、および .config ファイルなど)がドメイン名でサーバーを参照できるようになります。

-e [変数]=[値] オプションは、DXP コンテナの環境変数を設定します。詳細については、 付録 A: 環境設定 を参照してください。

DXPクラスタノードコンテナには、以下の固有の設定があります。

構成dxp-1dxp-2
AJPポートマッピング8009:80099009:8009
HTTPポートマッピング8080:80809080:8080
OSGiコンテナポートマッピング11311:1131111312:11311
バインドマウント$(pwd)/dxp-1:/mnt/liferay$(pwd)/dxp-2:/mnt/liferay
クラスタリンク制御チャネルロジック名control-channel-logic-name-1control-channel-logic-name-2
クラスタリンクトランスポートチャネルロジック名transport-channel-logic-name-1transport-channel-logic-name-2

DXPノードを訪問する

DXPクラスタノードは、以下のURLからアクセスできます。

  • DXP-1: http://localhost:8080
  • DXP-2: http://localhost:9080

下図は、クラスタノードのホームページを示しています。

DXPクラスタノード。

各ノードのコンテナIDとポート(ノード:[id]:[port])は、各ページの下部に表示されます。 LIFERAY_WEB_PERIOD_SERVER_PERIOD_DISPLAY_PERIOD_NODE=true 環境設定により、この表示機能が有効になりました。 docker container ls コマンドを使用して、コンテナの ID を見つけることができます。

コンテンツを検索エンジンにインデックス登録する

  1. コントロール パネル → 設定 → 検索 に移動します。

  2. [インデックス操作] タブで、 すべての検索インデックスを再インデックスする と すべてのスペルチェックインデックスを再インデックスする をクリックします。

コンテンツは検索エンジンにインデックス登録されます。詳細については、 検索概要 を参照してください。

DXPクラスターをテストする

ノード間のテストデータ同期:

  1. クラスタノードのいずれかにコンテンツを追加します。例えば、 新着情報 という名前の新しいウィジェット ページを追加し、そこに言語セレクタ ウィジェットを追加します。

  2. もう一方のクラスタノードのUIを更新してください。

両方のノードに同じ新しいコンテンツが表示されます。

コンテンツはクラスタノード間で同期されます。

DXPクラスターが正常に動作するよう構築されたことをお祝い申し上げます!

次は?

DXP クラスター用にデータベース を設定します。

付録A:環境設定

サンプルとして示されているDXPサーバーコンテナは、これらの設定を使用します。

構成説明
LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_JNDI_PERIOD_NAME=データソースのJNDI名
LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_DRIVER_UPPERCASEC_LASS\
_UPPERCASEN_AME=\
org.mariadb.jdbc.Driver
データベースドライバークラス
LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_URL=\
jdbc:mariadb://some-mariadb:3306/dxp_db?\
useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
データソースURL
LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_USERNAME=\
root
データベース管理者のユーザー名
LIFERAY_JDBC_PERIOD_DEFAULT_PERIOD_PASSWORD=\
my-secret-pw
データベース管理者ユーザーのパスワード
LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_ENABLED=\
true
クラスタリンクを有効にする
LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME\
_PERIOD_CONTROL=\
control-channel-logic-name-2
クラスターノードの一意のコントロールチャネル名
LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_CHANNEL_PERIOD_LOGIC_PERIOD_NAME\
_PERIOD_TRANSPORT_PERIOD_NUMBER0=\
transport-channel-logic-name-2
クラスターノードの一意のトランスポートチャネル名
LIFERAY_CLUSTER_PERIOD_LINK_PERIOD_AUTODETECT_PERIOD_ADDRESS=\
some-mariadb:3306
クラスターノードアドレスを取得するためにpingする既知のアドレス
LIFERAY_WEB_PERIOD_SERVER_PERIOD_DISPLAY_PERIOD_NODE=\
true
サーバーアドレスとウェブサーバーポートを表示します
LIFERAY_DL_PERIOD_STORE_PERIOD_IMPL=\
com.liferay.portal.store.db.DBStore
ファイルストア(ドキュメントライブラリストア)クラス

詳細については、Env/ポータルプロパティ の定義を参照してください。