如何使用PostgreSQL数据库水平扩展Laravel4应用程序
介绍
有两种方法可以扩展应用程序、服务、服务器等。 第一个,垂直扩展,需要更多的机器资源。 第二个,水平缩放,要求功能分离,以创建更零碎的零件组装。
例如,机器是否会在 syslog 中吐出内存错误? 只添加更多 RAM 或交换文件可能是有意义的。 但是,假设数据库服务器正在增长到大量条目,而 Web 服务器本身的流量开始增加——更好的想法可能是建立一个更可控的环境(更不用说更具成本效益)。 为此,将 Web 服务器和数据库服务器分离为不同的机器是关键。 那就是水平缩放。
要求
- 两个运行 Debian 7 的液滴。 每个VPS都应该完成初始服务器设置教程。
- 基本了解 Linux 命令及其作用。 请参阅 An Introduction to Linux Basics 以获得良好的起点。
- 你需要在其中一个 droplets 上成功安装 Laravel。 本教程适用于 NGINX + Laravel 4(跳过 Wrap Up 步骤):Laravel + Nginx
不要在与 Laravel 安装相同的虚拟服务器上安装数据库
为简单起见,我们将安装 Laravel 和 Nginx 的第一个 droplet 称为 Laravel droplet,IP 为 192.0.2.5。 安装 PostgreSQL 的第二个 droplet 将被称为 数据库 droplet,其 IP 为 192.0.2.1。
准备数据库
水平扩展是一个相当简单的概念,当您开始考虑更高级的主题(例如数据库复制和负载平衡)时可能会变得相当复杂。 但是,我们只会介绍基本的服务分离:Web 服务器前端和数据库后端。 幸运的是 PostgreSQL 和 Laravel 使这个过程变得相当简单。
首先,我们需要在我们的 数据库 droplet 上安装 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
接下来,数据库 droplet 需要知道 Laravel droplet 可以连接到它。 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
需要做的第一件事是让 PHP 了解如何使用 PostgreSQL 服务器。 通过安装 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,它是一组与我们的数据库交互的命令。
首先进入artisan所在的应用程序目录。
cd /var/www/laravel
伟大的! 现在是安装迁移并查看我们的数据库连接是否正常工作的时候了。
php artisan migrate:install
如果此命令成功运行且没有错误,您应该会在数据库中看到一个名为 migrations 的新表。
把它包起来
如您所见,拆分服务器相当简单。 通过将水平扩展与垂直扩展相结合,系统管理员可以实现服务分离并提高性能。 更好的是,这些方法需要 0 个额外的软件。