Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL HyperDB + Keepalivedを利用した、wordpress の負荷分散

keepalived

当記事、2012年に書いた記事になりますので、hyperdbがあるかないのかもわかりませんが、当方で活用する案件が発生しましたので、再アップしました。

思っていたより簡単にできた、そして結果からいいますと、思っていたよりパフォーマンスがよく無かった記憶があるのですが、こちらで検証したチープな環境だったからでしょう。。。きっと

表題の通り、wordpressのデータベースを、MySQL レプリケーションを駆使して負荷分散する際に活用できるプラグインです。それプラスといってはなんですが、KeepAlived(LVS)を間にはさんで、スケールアウトしやすい構成にしていました、以下の構成図になります。

  • データベースは、MASTER :1台 SLAVE :3台 の構成
  • 更新用のVIP(192.168.101.80)、参照用のVIP(192.168.0.70)の二種類を利用し、参照用のVIPでロードバランシングを行う
  • HyperDBの設定を、MASTER用、SLAVE用に分ける

とまあ、こんな感じです。MySQLレプリケーションや、KeepAlivedの設定については割愛させていただきます。

以下、HyperDBの設定手順です。

  1. HyperDBのダウンロード http://wordpress.org/extend/plugins/hyperdb/ からHyperDBプラグインをダウンロードし、解凍します。
  2. 以下のファイルが展開されます。
    -rw-r--r-- 1 root root 14486  7月 27 13:05 db-config.php
    -rw-r--r-- 1 root root 28653  7月 13 23:37 db.php
    -rw-r--r-- 1 root root  5605  7月 13 23:37 readme.txt
  3. db-config.phpwordpressルートディレクトリにコピーし、以下の通り編集します。
    # cp /usr/local/src/hyperdb/db-config.php /var/www/html/wordpress/# vi /var/www/html/wordpress/db-config.php
    /** Sample Configuration 1: Using the Default Server **/
    /** NOTE: THIS IS ACTIVE BY DEFAULT. COMMENT IT OUT. **//** * This is the most basic way to add a server to HyperDB using only the * required parameters: host, user, password, name. *
    This adds the DB defined in wp-config.php as a read/write server for * the 'global' dataset.
    (Every table is in 'global' by default.)
    */
    /* こちらにはMASTERの設定を記載します */
    $wpdb-add_database(array(
    'host'     = DB_HOST,
    'user'     = DB_USER,
    'password' = DB_PASSWORD,
    'name'     = DB_NAME,
    'write'    = 1,
    'read'     = 0,
    ));/**
    /* こちらはSLAVEの設定を記載します */
    * This adds the same server again, only this time it is configured as a slave.
    * The last three parameters are set to the defaults but are shown for clarity.
    */
    $wpdb-add_database(array(
    'host'     = '192.168.101.70',
    'user'     = DB_USER,
    'password' = DB_PASSWORD,
    'name'     = DB_NAME,
    'write'    = 0,
    'read'     = 1,
    ));
  4. db.php を所定の場所にコピーします
    # cp /usr/local/src/hyperdb/db.php /var/www/html/wordpress/wp-content/
  5. wp-config.phpを編集します
    # vi /var/www/html/wordpress/wp-config.php
    // replication setting
    define('DB_NAME', 'wordpress');
    define('DB_USER', 'dbuser');
    define('DB_PASSWORD', 'yourpassword');
    define('DB_HOST', '192.168.101.80');
    define('DB_CHARSET', 'utf8');
    define('DB_COLLATE', '');
    define('DB_CONFIG_FILE', ABSPATH . 'db-config.php');// ** MySQL 設定 - こちらの情報はホスティング先から入手してください。 ** //
    /** WordPress のためのデータベース名 */
    // define('DB_NAME', 'wordpress');/** MySQL データベースのユーザー名 */
    // define('DB_USER', 'dbuser');/** MySQL データベースのパスワード */
    // define('DB_PASSWORD', 'yourpassword');
    
    /** MySQL のホスト名 */
    // define('DB_HOST', '192.168.101.80');
    
    /** データベースのテーブルを作成する際のデータベースのキャラクターセット */
    // define('DB_CHARSET', 'utf8');
    /** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
    // define('DB_COLLATE', '');
  6. 以上で設定は終了です

実際に負荷分散されているか確認してみる。

ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
- RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.101.70:3306 rr
- 192.168.101.43:3306            Route   10     6          13
- 192.168.101.42:3306            Route   10     6          10
- 192.168.101.41:3306            Route   10     5          10
TCP  192.168.101.80:3306 rr
- 192.168.101.41:3306            Route   10     2          8

ipvsadm でデータベースの負荷分散状況を見る限りでは・・うまくいっているようです。

f:id:hit10231023:20180309104332j:plain