PostgreSQLデータベースを使用してLaravel4アプリを水平方向にスケーリングする方法
序章
アプリケーション、サービス、サーバーなどをスケーリングするには2つの方法があります。 最初の垂直スケーリングでは、マシンにより多くのリソースが必要です。 2番目の水平スケーリングでは、機能を分離して、パーツのより断片的なアセンブリを作成する必要があります。
たとえば、マシンはsyslogでメモリエラーを吐き出しますか? RAMまたはスワップファイルを追加するだけでも意味がある場合があります。 ただし、データベースサーバーが大量のエントリに成長し、Webサーバーだけでトラフィックが増加し始めているとしましょう。より制御可能な環境を設定することをお勧めします(費用対効果は言うまでもありません)。 そのためには、Webサーバーとデータベースサーバーを別々のマシンに分離することが重要です。 それが水平スケーリングです。
要件
-
それぞれDebian7を実行している2つのドロップレット。 各VPSは、サーバーの初期設定チュートリアルを完了している必要があります。
-
Linuxコマンドとその機能の基本的な理解。 良い出発点として、LinuxBasicsの紹介を参照してください。
-
液滴の1つにLaravelを正常にインストールする必要があります。 このチュートリアルは、NGINX + Laravel 4で機能します(まとめステップをスキップ): Laravel + Nginx
Laravelのインストールと同じ仮想サーバーにデータベースをインストールしないでください
簡単にするために、LaravelとNginxがインストールされた最初のドロップレットをIPが192.0.2.5のLaravelドロップレットと呼びます。 PostgreSQLがインストールされた2番目のドロップレットは、IPが192.0.2.1のデータベースドロップレットと呼ばれます。
データベースの準備
水平スケーリングはかなり単純な概念であり、データベースレプリケーションや負荷分散などのより高度なトピックについて考え始めると、かなり複雑になる可能性があります。 ただし、ここでは、サービスの基本的な分離、つまりWebサーバーのフロントエンドとデータベースのバックエンドについてのみ説明します。 幸いなことに、PostgreSQLとLaravelはこれをかなり単純なプロセスにします。
まず、データベースドロップレットにPostgreSQLをインストールする必要があります。
sudo apt-get install postgresql
次に、データベースと対話するための適切な権限を持つサーバー内にデータベースとユーザーを作成する必要があります。 そのためには、PostgreSQLサーバーにログインする必要があります。
sudo -u postgres psql
まず、データベースユーザーを作成しましょう。
CREATE USER databaseuser WITH PASSWORD 'password';
GRANT CREATE ON SCHEMA public TO databaseuser;
GRANT USAGE ON SCHEMA public TO databaseuser;
次に、所有者としてユーザーを使用してデータベースを作成し、サーバーを終了します。
CREATE DATABASE mydatabase WITH OWNER databaseuser;
\q
次に、データベースドロップレットは、Laravelドロップレットがそれに接続しても問題がないことを知る必要があります。 PostgreSQLには、これを非常に簡単にするクライアント認証ファイルがあります。
sudo nano /etc/postgresql/9.1/main/pg_hba.conf
接続、データベース名、データベースユーザー、受け入れられるアドレス、および接続方法を含む行を追加します。
# IPv4 local connections:
host mydatabase databaseuser 192.0.2.5/32 md5
保存して終了し、 postgresql.conf を開いて、「listen_addresses=’localhost’」という行を見つけます。
sudo nano /etc/postgresql/9.1/main/postgresql.conf
listen_addresses = '192.0.2.1'
この値を、任意のアドレスを受け入れる値に変更することもできます。
listen_addresses = '*'
PostgreSQLサーバーを保存して終了し、再起動します。
sudo service postgresql restart
Laravelの設定
最初に行う必要があるのは、PostgreSQLサーバーの操作方法に関する知識をPHPに提供することです。 これを行うには、php5-pgsql拡張機能をインストールします。
sudo apt-get install php5-pgsql
sudo service php5-fpm restart
次に、データベースサーバーの場所とアクセス方法をLaravelに通知する必要があります。 NGINX + Laravelチュートリアルに従った場合、Laravelは/var/www/laravel
にインストールする必要があります。
sudo nano /var/www/laravel/app/config/database.php
まず、LaravelにPostgreSQLドライバーを使用させましょう。
'default' => 'pgsql',
次に、PostgreSQLサーバーに関する情報を設定しましょう。
'pgsql' => array(
'driver' => 'pgsql',
'host' => '192.0.2.1',
'database' => 'mydatabase',
'username' => 'databaseuser',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),
保存して終了。
接続のテスト
この接続をテストするために、データベーステーブルの構築に役立つコマンドラインからの移行を実行してみましょう。
注:移行は、インストールする追加のパッケージではありません。 Laravelが付属しており、データベースとやり取りするための一連のコマンドです。
まず、職人がいるアプリケーションディレクトリに入ります。
cd /var/www/laravel
素晴らしい! 次に、移行をインストールして、データベース接続が機能しているかどうかを確認します。
php artisan migrate:install
このコマンドがエラーなしで正常に実行されると、データベースにmigrationsという新しいテーブルが表示されます。
まとめ
ご覧のとおり、サーバーの分割はかなり簡単です。 水平スケーリングと垂直スケーリングを組み合わせることにより、システム管理者はサービスの分離とパフォーマンスの向上を実現できます。 さらに良いことに、これらの方法では追加のソフトウェアは必要ありません。