MySQL 5.5でLiferay 6.2を設定してデータベースの読み書きを分割する

この記事では、MySQL 5.5上でJNDI接続を使用してLiferay 6.2バンドルをセットアップし、読み書きスプリット設定を行う方法を説明します。

決議

1. 新鮮なバンドルを解凍します。

2. これらのプロパティを portal-ext.properties に配置してください(新しいデータベースを使用してください)。

jdbc.default.jndi.name=jdbcLiferayWritePool
jdbc.read.jndi.name=jdbcLiferayReadPool
jdbc.write.jndi.name=jdbcLiferayWritePool
counter.jdbc.prefix=jdbc.write.
    spring.configs=\
        META-INF/base-spring.xml,\
        \
        META-INF/hibernate-spring.xml,\
        META-INF/infrastructure-spring.xml,\
        META-INF/management-spring.xml,\
        \
        META-INF/util-spring.xml,\
        \
        META-INF/jpa-spring.xml,\
        \
        META-INF/executor-spring.xml,\
        \
        META-INF/audit-spring.xml,\
        META-INF/cluster-spring.xml,\
        META-INF/editor-spring.xml,\
        META-INF/jcr-spring.xml,\
        META-INF/ldap-spring.xml,\
        META-INF/messaging-core-spring.xml,\
        META-INF/messaging-misc-spring.xml,\
        META-INF/mobile-device-spring.xml,\
        META-INF/notifications-spring.xml,\
        META-INF/poller-spring.xml,\
        META-INF/rules-spring.xml,\
        META-INF/scheduler-spring.xml,\
        META-INF/search-spring.xml,\
        META-INF/workflow-spring.xml,\
        \
        META-INF/counter-spring.xml,\
        META-INF/mail-spring.xml,\
        META-INF/portal-spring.xml,\
        META-INF/portlet-container-spring.xml,\
        META-INF/staging-spring.xml,\
        META-INF/virtual-layouts-spring.xml,\
        \
        META-INF/monitoring-spring.xml,\
        \
        META-INF/dynamic-data-source-spring.xml,\
        #META-INF/shard-data-source-spring.xml,\
        #META-INF/memcached-spring.xml,\
        \ 

3. このリソース設定をROOT.xmlに追加します。

<Resource
    name="jdbcLiferayReadPool"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://[IP of VM with Slave DB]:3306/[DB name]?useUnicode=true&amp;characterEncoding=UTF-8"
    username="root"
    password="liferay"
    maxActive="20"
/>
<Resource
    name="jdbcLiferayWritePool"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost/[DB name]?useUnicode=true&amp;characterEncoding=UTF-8"
    username="root"
    password="liferay"
    maxActive="20"
/>

4. MySQL 5.5 をインストールした別の VM を実行します。 これは、スレーブデータベースサーバを実行します。

5. マスターデータベースサーバーの my.ini "mysqld" セクションに以下の設定が含まれていることを確認してください。 マスタサーバはバイナリログを利用してスレーブにレプリケーション情報を送信します。 server-idは1から4294967295までの任意の整数を指定することができます。

log-bin=mysql-bin
binlog_format=row
server-id=1

6. スレーブDBサーバのmy.ini mysqldセクションでレプリケーションスレーブのserver-id番号を設定します。 マスターズとは別のものであることを確認してください。

server-id=2

7. マスターDBサーバとスレーブDBサーバを再起動して、my.iniの設定変更を拾うようにします。

8. バイナリログ上のマスターの現在位置を取得する必要があります。 その前に、マスターのテーブルへの書き込みを停止する必要があります。 マスタDBサーバ上で以下のコマンドを実行します。

mysql> FLUSH TABLES WITH READ LOCK;

と表示され、この端末は開いたままにしておきます。

9. 別のコマンドプロンプトを開き、マスター上で実行します。

mysql > SHOW MASTER STATUS;

後で参照できるように、ファイル名と位置番号を記録します。

10. これでマスターのテーブルの読み取りロックを解除できます。 マスターランで

mysql> UNLOCK TABLES;

11. スレーブレプリケーションサーバーをマスターに向ける必要があります。 その前に、スレーブDBのmysqlターミナルで次のように実行します。

mysql> stop slave;

12. このステートメントをスレーブ・データベース上で実行して、マスター・サーバにポイントします。 実際のホスト名、ユーザー名、パスワードなどを挿入する必要があります。

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS='recorded_log_position';

13. スレーブのmysqlターミナルで実行します。

mysql> start slave;

スレーブの状態は "show slave statusG "で確認できます。 Slave_IO_Running と Slave_SQL_Running が両方とも yes であることを確認し、ログの位置が "show master status" に記載されているものと同じであることを確認してください。

14. ローカル マシンのマスター DB サーバーで、ROOT.xml で指定したデータベースを作成します。 スレーブサーバーでレプリケートされているか確認してください。

15. Liferayを起動し、アプリサーバのログに「ルートコンテキスト用のプラグインパッケージを読み込んでいます」と表示された後、スレーブDBの一般的なクエリログを確認します。

追加情報

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています