uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2020.10.24【Laravel】データーベースの接続をMasterとSlaveに分けて運用する

【Laravel】データーベースの接続をMasterとSlaveに分けて運用する

中規模のWEBアプリケーションを開発では、処理速度向上や可用性の担保のためMaster/Slaveに分けて複数台運用することがよくあります。 AWSではAmazon Aurora / MySQLなどを使うと簡単に増やすことができますよね。

WEBアプリケーションからの更新系クエリはMasterサーバーに対して実行、読み取りクエリはSlaveサーバーから行うことで全体の負荷分散により、処理速度の向上が期待できます。ただし、複数台データベースを運用するということは同期するまでに数ミリ秒単位でラグがあり、これをレプリケーション遅延といいます。

LaravelでMaster/Slave構成を設定する

LaravelではDBの接続情報を設定するconfig/database.php を編集することでMaster/Slave構成のコネクションを作成することができます。

config/database.php
'mysql' => [
    'read' => [
        'host' => [
            '192.168.1.1',
            '196.168.1.2',
        ],
    ],
    'write' => [
        'host' => [
            '196.168.1.3',
         ],
    ],
    'sticky'    => true,
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix'    => '',
],

writeには書き込み可能なMasterの接続情報 readには書き込み可能なSlaveの接続情報 を記述するのみです。

stickyオプション

stickyオプションはデータベースに書き込まれたレコードをすぐに読み取るために使用できるオプションの値です。stickyオプションが有効になっっていると要求サイクル中にデータベースに対して「書き込み」操作が実行された場合、それ以降の「読み取り」操作では「書き込み」接続が使用されます。これにより書き込まれたレコードをレプリケーション遅延を気にすることなく同じ要求中にデータベースからすぐに読み戻すことができます。

目次
PROFILE

このサイトを運営してるuiuifreeです。
渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

アウトプット中の技術

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)