前書き
データベースは時間とともに成長し、元のファイルシステムのスペースが大きくなることがあります。 オペレーティングシステムの他の部分と同じパーティションに配置されている場合、I / O競合が発生する可能性もあります。
RAID、ネットワークブロックストレージ、およびその他のデバイスは、他の望ましい機能とともに、冗長性を提供し、スケーラビリティを向上させることができます。 スペースを追加する場合、パフォーマンスを最適化する方法を評価する場合、または他のストレージ機能を活用する場合、このチュートリアルでは、PostgreSQLのデータディレクトリの再配置について説明します。
前提条件
このガイドを完了するには、次のものが必要です。
-
sudo
権限を持つroot以外のユーザーを持つUbuntu18.04サーバー。 これらの権限を持つユーザーを設定する方法の詳細については、Initial Server Setup with Ubuntu 18.04ガイドを参照してください。 -
サーバーにインストールされたPostgreSQL。 これをまだ設定していない場合は、How To Install and Use PostgreSQL on Ubuntu 18.04ガイドが役立ちます。
この例では、/mnt/volume_nyc1_01
にマウントされたブロックストレージデバイスにデータを移動しています。 DigitalOceanでブロックストレージを使用している場合、このチュートリアルを続行する前に、this guideを使用してボリュームをマウントできます。
ただし、使用する基本的なストレージに関係なく、次の手順はデータディレクトリを新しい場所に移動するのに役立ちます。
[[step-1 -—- moving-the-postgresql-data-directory]] ==ステップ1—PostgreSQLデータディレクトリの移動
PostgreSQLのデータディレクトリの移動を開始する前に、インタラクティブなPostgreSQLセッションを開始して現在の場所を確認しましょう。 次のコマンドで、psql
は対話型モニターに入るコマンドであり、-u postgres
はsudo
にシステムのpostgresユーザーとしてpsql
を実行するように指示します。
sudo -u postgres psql
PostgreSQLプロンプトを開いたら、次のコマンドを使用して現在のデータディレクトリを表示します。
SHOW data_directory;
Output data_directory
------------------------------
/var/lib/postgresql/10/main
(1 row)
この出力は、PostgreSQLがデフォルトのデータディレクトリ/var/lib/postgresql/10/main
を使用するように構成されていることを確認しているため、移動する必要のあるディレクトリです。 システム上のディレクトリを確認したら、\q
と入力し、ENTER
を押してPostgreSQLプロンプトを閉じます。
データの整合性を確保するには、データディレクトリに実際に変更を加える前にPostgreSQLを停止します。
sudo systemctl stop postgresql
systemctl
は、すべてのサービス管理コマンドの結果を表示するわけではありません。 サービスが正常に停止したことを確認するには、次のコマンドを使用します。
sudo systemctl status postgresql
出力の最終行は、PostgreSQLが停止したことを示しているはずです。
Output. . .
Jul 12 15:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
PostgreSQLサーバーがシャットダウンされたので、既存のデータベースディレクトリをrsync
を使用して新しい場所にコピーします。 -a
フラグを使用すると、アクセス許可とその他のディレクトリプロパティが保持され、-v
は詳細な出力を提供するため、進行状況を追跡できます。 新しい場所の元のディレクトリ構造を模倣するために、postgresql
ディレクトリからrsync
を開始します。 マウントポイントディレクトリ内にそのpostgresql
ディレクトリを作成し、PostgreSQLユーザーによる所有権を保持することで、将来のアップグレードでのアクセス許可の問題を回避できます。
[.note]#Note:ディレクトリに末尾のスラッシュがないことを確認してください。これは、タブ補完を使用する場合に追加される可能性があります。 末尾にスラッシュを含めると、rsync
は、ディレクトリ自体をコピーする代わりに、ディレクトリの内容をマウントポイントにダンプします。
#
postgresql.conf
ファイルで場所を明示的に定義しているため、バージョンディレクトリ10
は厳密には必要ありませんが、プロジェクトの規則に従うことは、特に必要がある場合は、確かに害はありません。 PostgreSQLの複数のバージョンを実行する将来:
sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
コピーが完了したら、現在のフォルダの名前を.bak
拡張子に変更し、移動が成功したことを確認するまで保持します。 これにより、新しい場所と古い場所の両方に同じような名前のディレクトリがあるために生じる混乱を避けることができます。
sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak
これで、PostgreSQLを設定して、新しい場所のデータディレクトリにアクセスする準備が整いました。
[[step-2 -—-新しいデータの場所を指す]] ==ステップ2—新しいデータの場所を指す
デフォルトでは、data_directory
は/etc/postgresql/10/main/postgresql.conf
ファイルで/var/lib/postgresql/10/main
に設定されています。 このファイルを編集して、新しいデータディレクトリを反映します。
sudo nano /etc/postgresql/10/main/postgresql.conf
data_directory
で始まる行を見つけ、新しい場所を反映するように続くパスを変更します。 このチュートリアルのコンテキストでは、更新されたディレクティブは次のようになります。
/etc/postgresql/10/main/postgresql.conf
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .
CTRL + X
、Y
、ENTER
の順に押して、ファイルを保存して閉じます。 新しいデータディレクトリの場所を使用するようにPostgreSQLを構成するために必要なことはこれだけです。 この時点で残っているのは、PostgreSQLサービスを再度開始し、それが実際に正しいデータディレクトリを指していることを確認することです。
[[step-3 -—- restarting-postgresql]] ==ステップ3—PostgreSQLの再起動
postgresql.conf
ファイルのdata-directory
ディレクティブを変更した後、先に進み、systemctl
を使用してPostgreSQLサーバーを起動します。
sudo systemctl start postgresql
PostgreSQLサーバーが正常に起動したことを確認するには、systemctl
を再度使用してそのステータスを確認します。
sudo systemctl status postgresql
サービスが正常に開始された場合、このコマンドの出力の最後に次の行が表示されます。
Output. . .
Jul 12 15:45:01 ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .
最後に、新しいデータディレクトリが実際に使用されていることを確認するには、PostgreSQLコマンドプロンプトを開きます。
sudo -u postgres psql
データディレクトリの値を再度確認します。
SHOW data_directory;
Output data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)
これにより、PostgreSQLが新しいデータディレクトリの場所を使用していることが確認されます。 これに続いて、データベースにアクセスし、内部のデータとやり取りできることを確認してください。 既存のデータの整合性を確認したら、バックアップデータディレクトリを削除できます。
sudo rm -Rf /var/lib/postgresql/10/main.bak
これで、PostgreSQLデータディレクトリを新しい場所に正常に移動できました。
結論:
順調に進めば、データベースは新しい場所にあるデータディレクトリで実行され、ストレージを拡張できるようになるための重要なステップが完了します。 また、Webアプリケーションのスケーリングと最適化に役立つサーバーインフラストラクチャを作成する方法については、5 Common Server Setups For Your Web Applicationを参照することをお勧めします。