RubyonRailsのスケーリング:専用のPostgreSQLサーバーのセットアップ(パート3)
序章
これまで、Ruby-on-Railsアプリケーションをデプロイするさまざまな方法について説明してきました(例: UnicornとNginxを搭載したRails 、 乗客とNginxを備えたレール )、設定スケーラブルなサーバー構造接続する方法を学びました専用のMySQLインスタンス Railsアプリケーションサーバーに。
このDigitalOceanScaling-Rails シリーズのインストールでは、 PostgreSQL サーバーを最初から構築して、Ruby-on-Railsのデータベース永続化レイヤーとして使用する方法を説明します。 Webアプリケーション。 続いて、必要な構成変更を行って、Railsアプリケーションサーバーをデータベースに接続する方法を見ていきます。
注:この記事は、すでに述べたように、Scaling-Railsシリーズの一部であり、専用のUbuntuVPSにPostgreSQLサーバーをインストールすることで構成されています。 ただし、ここで説明したのとまったく同じ方法でPostgreSQLをインストールして、Railsアプリケーションと一緒に単一の仮想サーバーで使用することができます。 UnicornまたはPassengerを使用して単一のドロップレットにRailsを展開する方法を確認するには、最初の段落にあるリンクをクリックしてから、ここから続行してデータベースレイヤーを形成してください。
用語集
1. データベースの選択
2. サーバーのセットアップ構造
- 複数のアプリケーションサーバーの負荷分散
- データベースサーバーレイヤー
3. デプロイメントセットアップへのデータベースサーバーの追加
- サーバーの準備
4. PostgreSQLのインストール
- PostgreSQLソフトウェアリポジトリの追加
- PostgreSQLのインストール
5. PostgreSQLの構成
- デフォルトの
postgres
ユーザーパスワードの変更 - 役割とデータベースの作成
- リモート接続の有効化
6. Railsアプリケーションの構成
- Railsの
database.yml
の構成 PostgreSQL
ジェムの入手
データベースの選択
Ruby on Railsアプリケーション開発フレームワークは、データベースサーバーにさまざまなサポートを提供します。 ほとんどのアプリケーションでは、リレーショナルデータベース管理システムが最適です。 ただし、リレーショナルサーバーまたは両方を一緒に実行する代わりに、非リレーショナルのスキーマレスNoSQLデータベースサーバーが必要になる場合があります。
自分の開発用コンピューターでRailsの操作を開始する場合、最も簡単でおそらく最も論理的な方法は、機能はあるが基本的なデータベース実装(SQLiteライブラリなど)を使用することから始めることです。 ただし、実際の展開では、SQLiteではアプリケーションの負荷を処理するには不十分である可能性があります[したがって、本格的なRDBMSが必要です]。
ニーズとアプリケーションの種類に応じて、データベース管理システムを決定する必要があります(つまり、 データベースサーバー)を使用して、アプリケーション展開セットアップのデータベースレイヤーを作成します。
リレーショナルデータベースの場合、より一般的な選択肢のいくつかは次のとおりです。
- PostgreSQLとその派生物:
最も人気があり、一般的に使用されているRDBMSおよび関連するフォークプロジェクト。
- PostgreSQL:
最も高度なSQL準拠のオープンソース目標-RDBMS。
非リレーショナルデータベースサーバーの場合:
- 列ベース:
Cassandra、HBaseなど。
- 書類:
MongoDB、Couchbaseなど
- グラフ:
OrientDB、Neo4Jなど。
データベースサーバーの展開を続行する前に明確で長期的な決定を下すために、このテーマに関する記事を読むことに興味があるかもしれません。
- データベースの概要:
SQLおよびNoSQLデータベースとさまざまなデータベースモデルを理解する
- 関連した:
- NoSQL:
サーバーのセットアップ構造
データベースレイヤーの構築を開始する前に、最終的な展開のセットアップがどのようになるかを見てみましょう。
複数のアプリケーションサーバーの負荷分散
以前は、複数のアプリケーションサーバーでロードバランサー/リバースプロキシを作成した後、これが最終的に得られたものです。
Three droplets with each having a distinct role: ------------------------------------------------ 1 x Load-Balancer / Reverse-Proxy 2 x Application Servers Running Your Rails Web-Application / API --- DEPLOYMENT STRUCTURE +-------------------------------+ | | | LOAD-BALANCER / REVERSE PROXY | | | +-------------------------------+ + | | +---------------+ | +---------------+ | APP SERVER | | | APP SERVER | |---------------| | |---------------| | | | | | | RAILS |<---+--->| RAILS | | | | | +---------------+ +---------------+
データベースサーバーレイヤー
一元的にアクセス可能なデータベースサーバーを使用するため(例: RDBMSおよび/またはNoSQLデータベース)、サーバー設定に4番目の要素を追加します。
Four droplets: ------------------------------------------------ 1 x Load-Balancer / Reverse-Proxy 2 x Application Servers Running Your Rails Web-Application / API 1 x Database Server (e.g. PostgreSQL, PostgreSQL, MongoDB etc.) +-------------------------------+ | | | LOAD-BALANCER / REVERSE PROXY | | | +-------------------------------+ + | | +---------------+ | +---------------+ | APP SERVER | | | APP SERVER | |---------------| | |---------------| | | | | | | RAILS |<---+--->| RAILS | | | | | +---------------+ +---------------+ + + | | | +-------------------+ | | | DATABASE SERVER | | | |-------------------| | | | | | | | PostgreSQL, | | +->| PostgreSQL, |<-+ | etc. | | | +-------------------+
デプロイメントセットアップへのデータベースサーバーの追加
この記事では、Ubuntu13VPS上にPostgreSQLデータベース管理サーバーを作成して構成します。
さぁ、始めよう!
サーバーの準備
ソフトウェアソースリストを更新し、古いアプリケーションをアップグレードします。
aptitude update aptitude -y upgrade
次のコマンドを実行して、build-essential
パッケージをインストールします。
aptitude install -y build-essential
次のコマンドを実行して、一般的に使用される追加のツールをインストールします。
aptitude install -y cvs subversion git-core mercurial
PostgreSQLのインストール
PostgreSQLソフトウェアリポジトリの追加
最新バージョンのPostgreSQL(9.3
)をダウンロードするには、リポジトリをaptitude
ソースリストに追加する必要があります。
次のコマンドを実行して、PostgreSQLのソースリストを作成します。
nano /etc/apt/sources.list.d/pgdg.list
以下の内容をコピーして貼り付けます。
deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main
CTRL + Xを押し、Yで確定して、保存して終了します。
注: Ubuntu 13(saucy)を使用していることを前提としています。 別のバージョンを使用している場合は、lsb_release -c
を実行してディストリビューションの名前を確認し、上記の手順でsaucy
に置き換えてください。
ソースリストを更新して、新しい追加を含めます。
aptitude update aptitude -y upgrade
PostgreSQLのインストール
これでソースにアクセスできるようになり、デフォルトのパッケージマネージャーaptitude
(またはapt-get
)を使用して、利用可能な最新バージョンのPostgreSQLを直接インストールできます。
次のコマンドを実行してPostgreSQLvをインストールします。 9.3
:
aptitude install postgresql-9.3 pgadmin3
PostgreSQLの構成
デフォルトのpostgres
ユーザーパスワードの変更
データベースを操作するには、デフォルトのパスワードを変更する必要があります。
次のコマンドを実行して、プロセスを開始します。
sudo -u postgres psql postgres
postgres=#
のようなプロンプトが表示されたら、次のように入力します。
\password postgres
パスワードを入力し、もう一度入力して確認し、CTRL + Zを押すか、 \qと入力して終了します。
役割とデータベースの作成
次のコマンドを使用してPostgreSQLにログインします。
sudo -u postgres psql
そして、以下の手順を実行して、Railsで使用するロールとデータベースを作成します。
# Usage: CREATE USER [user name] WITH PASSWORD '[password]'; # Example: CREATE USER rails_myapp_user WITH PASSWORD 'pwd'; # Usage: CREATE DATABASE [database name] OWNER [user name]; # Example: CREATE DATABASE rails_myapp OWNER rails_myapp_user;
Ctrl + Zキーを押すか、 \qと入力して終了します。
注: PostgreSQLの役割と管理については、次の記事を確認してください。
リモート接続の有効化
Railsアプリケーションを実行しているリモートコンピューターからPostgreSQLサーバーにアクセスできるようにする必要があるため、構成ファイルを変更する必要があります。
次のコマンドを実行して、nanoテキストエディターを使用してPostgreSQL構成postgresql.conf
を編集します。
nano /etc/postgresql/9.3/main/postgresql.conf
ドロップレットに割り当てられたIPアドレスからの接続をリッスンするようにPostgreSQLに指示します。
ファイルを下にスクロールして、次の行を見つけます。
#listen_addresses = 'localhost'
次のように変更します。
listen_addresses = '*'
そして、CTRL + Xを押してYで確定することにより、保存して終了します。
次に、ファイアウォールの動作と同様に、PostgreSQLに受け入れたい特定の接続を指示する必要があります。
次のコマンドを実行して、nanoテキストエディタを使用してPostgreSQLhba
ファイルpg_hba.conf
を編集します。
nano /etc/postgresql/9.3/main/pg_hba.conf
ファイルを下にスクロールして、次のセクションを見つけます。
# Put your actual configuration here # ..
コメントブロックの後に、次の行を追加します。
# TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 md5
また、CTRL + Xを押してYで確定することにより、保存して終了します。
次のコマンドを使用してPostgreSQLデーモンを再起動します。
service postgresql restart # * Restarting PostgreSQL 9.3 database server # ...done.
Railsアプリケーションの構成
このセクションでは、Railsアプリケーションサーバーを変更して、セットアップしたばかりのデータベースサーバーで動作を開始します。
Railsのdatabase.yml
の構成
Railsアプリケーションのデータベース設定は、/config
ディレクトリのdatabase.yml
ファイル内に保持されます。
次のコマンドを実行して、nanoテキストエディタを使用してdatabase.yml
ファイルを編集します。
# Make sure to enter your application deployment directory # Example: # cd /var/www/my_app nano config/database.yml
このファイルを開くと、データベース設定が環境名で分割されているのがわかります。 アプリケーションはproduction
環境を使用して実行する必要があるため、その構成を編集してみましょう。
production:
YML
コードブロックを次のコードブロックに置き換え、必要なビットを独自のセットアップ構成に合わせて変更します。 IPアドレスなど。
# Example: # production: # adapter: postgresql # encoding: utf8 # database: [database name] # username: [user name] # password: [password] # host: [server IP address] # port: [port number] # protocol: [protocol] # pool: [connection pool] production: adapter: postgresql encoding: utf8 database: rails_myapp username: rails_myapp_user password: pwd host: 128.199.233.36 port: 5432 pool: 10
注:上記の例で提供されているように、プロトコルを指定する必要がある場合があります。
注: pool
引数には、最大同時データベース接続スロットの数が含まれます(つまり、 プール)利用可能。 あなたはあなたのニーズを評価し、それに応じて数を設定する必要があります。
CTRL + Xを押し、Yで確定して、保存して終了します。
PostgreSQL
ジェムの入手
以下を使用して、nanoを使用してGemfileの編集を開始します。
nano Gemfile
次の行をファイルに追加します。
gem 'pg'
CTRL + Xを押し、Yで確定して、保存して終了します。
bundle
を使用して新しいgemをインストールします。
bundle install
以上です! 今後、Railsアプリケーションサーバーはすべての操作に新しいデータベースサーバーを使用します。