Laravelを使用していて、master/slave構成を実装したいことがあると思います。
今回は、Laravelを使用して、master/slave構成の実装の方法について紹介します。
master/slave構成の実装方法
Laravel 5系の場合
Laravel 5系の場合、config/database.phpを修正します。
下記のように記載することで、master/slave構成を実装することが出来ます。
'mysql' => [ 'read' => [ 'host' => '192.168.1.1', ], 'write' => [ 'host' => '196.168.1.2' ], 'driver' => 'mysql', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ],
この設定により、read/writeを明示的に指定する事無く、自動的に接続先を解決することが出来ます。
writeにマスターを指定し、readにはスレーブを指定します。
master・slave内で複数の接続先がある場合は、Laravel 4系の方に例を示したので参照してみてください。
データベースの接続先を明示的に指定するシンプルなマスタースレーブ構成以外にも、複数のデータベースを利用する事が多々あります。
例えば
・データ分散化の為に物理的にデータベースサーバが異なる場合。
・マスター、スレーブそれぞれのユーザー、パスワードが異なっている場合。
・MySQL, PostgreSQL, SQL Serverなど複数のデータベースを利用する場合。
のような例があります。そのような場合は、下記の記事を参考にしてみてください。
Laravel 4系の場合
Laravel 4系の場合、app/config/database.phpを修正します。修正内容は、同じですが、今回は、スレーブのDBが複数あった場合の例を示してみます。
//接続先に複数のIPがあった場合複数登録する $readHosts = ['193.168.1.1', '194.168.1.1']; 'mysql' => array( 'read' => array( // Return a random host 'host' => $readHosts[array_rand($readHosts)], ), 'write' => array( 'host' => '196.168.1.2' ), 'driver' => 'mysql', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
Laravel 5系の際にも利用できるのですが、これによりslave(read)のデータベースをランダムに指定することが出来ます。
Laravelでmaster/slave構成を実装しようとしている際には、参考にしてみてください。