WordPressでWEBサーバ、NFS、DBサーバの冗長構成 5 [DBサーバ(スレーブ)+HyperDBの設定]

2020年11月1日

前回に引き続きWordPressの冗長構成について説明していきます。
さて、今回はDBサーバ(スレーブ)とHyperDBの設定になります。
DBサーバ2つでレプリケーション設定を行い、マスター・スレーブ構成にすることで、DBサーバに冗長性をもたせることができるようになります。

早速設定を始めていきましょう。

スレーブの設定

マスター(DB1)、スレーブ(DB2)とします。

DB2に接続し、DB1と同じバージョンでmariaDBをインストールします。

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
yum -y install MariaDB-server MariaDB-client
systemctl start mariadb
systemctl enable mariadb

ポート3306をあけておきます。

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports

マスターの設定

my.confの設定

vi /etc/my.cnf

#my.cnfに下記記述を追加
[mysqld]
log-bin
server-id=1

#再起動
systemctl restart mariadb

my.cnfの位置ががわからないときは検索しましょう

mysql --help | grep my.cnf

レプリケーション用のユーザを作成します。

#スレーブ用ユーザ作成
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO repl@DB2のIP IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

ここで、DB1にあるデータをDB2に移す作業を行います。

#データを同期させるため、一時的にデータをロックする
FLUSH TABLES WITH READ LOCK;

ステータスも見ておきましょう。ここの数値はあとで使います。

MariaDB [(none)]> SHOW MASTER STATUS;
+---------------------------+----------+--------------+------------------+
| File                      | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------------+----------+--------------+------------------+
| db-test-bin.000001 |     1022 |              |                  |
+---------------------------+----------+--------------+------------------+
1 row in set (0.001 sec)

MariaDBからログアウトし、DBのダンプファイルを用意します。

mysqldump -u root -p --all-databases --lock-all-tables > dump.sql
mysql -u root -p
UNLOCK TABLES;

SCPとかでダンプファイルをDB2に送っておきましょう

scp  dump.sql DB2のIP:/root/

再度DB2で設定

vi /etc/my.cnf

#下記の記述を変更
[mysqld]
server-id=2

#再起動
systemctl restart mariadb

#ダンプファイルのインポート
mysql -u root -p < dump.sql

#MariaDBの設定
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='***', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='***', MASTER_LOG_POS=***;
START SLAVE;

それぞれ下記の値をいれます。

MASTER_HOST : マスター側のホスト名、もしくは IP アドレス
MASTER_USER : マスター接続に使用するユーザー名
MASTER_PASSWORD : マスター接続に使用するユーザーのパスワード
MASTER_LOG_FILE : SHOW MASTER STATUS で確認した File
MASTER_LOG_POS : SHOW MASTER STATUS で確認した Position

ここまでできたら設定完了です!
試しにDB1でなにかSQLを実行して、DB2にも反映されることも確認しておきましょう。

HyperDBの設定

DBのレプリケーションの設定が終わったら、最後にWordPressから2つのDBを使用するように設定する必要があります。
その際に使えるのがHyperDBというプラグインです。

これを使用することで、書き込みをDB1、読み込みの際はDB2を優先的に読むという設定が簡単にできます。
HyperDBは通常のプラグインと異なり、WordPressのダッシュボードから設定するのではなく、一部ファイルを配置して利用します。
以下で設定をしていきます。

もし、このブログの解説通りにWordPressの冗長構成を行っている場合は、WordPress一式のファイルを置いているNFSサーバで設定を行います。

#wp-config.phpと同じ階層にdb-config.phpを作成
vi db-config.php
#db-config.php
<?php
// Master ( read and write )
$wpdb->add_database(array(
        'host'     => 'DB1のIP',
        'user'     => 'user',
        'password' => 'password',
        'name'     => 'DB_name',
        'write'    => 1,
        'read'     => 2,
));

// Slave ( read only )
$wpdb->add_database(array(
        'host'     => 'DB2のIP'
        'user'     => 'user',
        'password' => 'password',
        'name'     => 'DB_name',
        'write'    => 0,
        'read'     => 1,
));

最後にhyperdb.zipをダウンロードしてdb.phpをwp-content以下に置きます。

wget https://downloads.wordpress.org/plugin/hyperdb.1.5.zip
unzip hyperdb.1.5.zip
mv hyperdb/db.php /export/nfs/wp-content/

これでHyperDBの設定が完了です!!