序章

データベースは時間の経過とともに大きくなり、元のファイルシステムのスペースを超えることもあります。 それらがオペレーティングシステムの他の部分と同じパーティションにある場合、これはI/Oの競合につながる可能性もあります。

RAID、ネットワークブロックストレージ、およびその他のデバイスは、その他の望ましい機能とともに、冗長性を提供し、スケーラビリティを向上させることができます。 スペースを追加する場合でも、パフォーマンスを最適化する方法を評価する場合でも、他のストレージ機能を利用する場合でも、このチュートリアルでは、PostgreSQLのデータディレクトリを再配置する方法について説明します。

前提条件

このガイドを完了するには、次のものが必要です。

この例では、/mnt/volume_nyc1_01にマウントされたブロックストレージデバイスにデータを移動しています。 DigitalOceanでブロックストレージを使用している場合、このガイドは、このチュートリアルを続行する前にボリュームをマウントするのに役立ちます。

ただし、使用する基盤となるストレージに関係なく、次の手順は、データディレクトリを新しい場所に移動するのに役立ちます。

ステップ1—PostgreSQLデータディレクトリの移動

PostgreSQLのデータディレクトリの移動を開始する前に、インタラクティブなPostgreSQLセッションを開始して現在の場所を確認しましょう。 次のコマンドでは、psqlはインタラクティブモニターに入るコマンドであり、-u postgressudoにシステムのpostgresとしてpsqlを実行するように指示します。 ]ユーザー:

  1. sudo -u postgres psql

PostgreSQLプロンプトを開いたら、次のコマンドを使用して現在のデータディレクトリを表示します。

  1. SHOW data_directory;
Output
data_directory ------------------------------ /var/lib/postgresql/10/main (1 row)

この出力は、PostgreSQLがデフォルトのデータディレクトリ/var/lib/postgresql/10/mainを使用するように構成されていることを確認するため、移動する必要のあるディレクトリです。 システム上のディレクトリを確認したら、\qと入力し、ENTERを押してPostgreSQLプロンプトを閉じます。

データの整合性を確保するには、データディレクトリに実際に変更を加える前にPostgreSQLを停止します。

  1. sudo systemctl stop postgresql

systemctlは、すべてのサービス管理コマンドの結果を表示するわけではありません。 サービスが正常に停止したことを確認するには、次のコマンドを使用します。

  1. 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ユーザーによる所有権を保持することで、将来のアップグレードでのアクセス許可の問題を回避できます。

注:ディレクトリに末尾のスラッシュがないことを確認してください。これは、タブ補完を使用する場合に追加される可能性があります。 末尾にスラッシュを含めると、rsyncは、ディレクトリ自体をコピーする代わりに、ディレクトリの内容をマウントポイントにダンプします。

バージョンディレクトリ10は、postgresql.confファイルで場所を明示的に定義しているため、厳密には必要ありませんが、プロジェクトの規則に従うことは、特に必要がある場合は、確かに害はありません。将来、PostgreSQLの複数のバージョンを実行するには:

  1. sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

コピーが完了したら、現在のフォルダーの名前を.bak拡張子に変更し、移動が成功したことを確認するまで保持します。 これは、新しい場所と古い場所の両方に同じ名前のディレクトリがあることから生じる可能性のある混乱を回避するのに役立ちます。

  1. sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak

これで、新しい場所のデータディレクトリにアクセスするようにPostgreSQLを構成する準備が整いました。

ステップ2—新しいデータの場所を指す

デフォルトでは、data_directory/etc/postgresql/10/main/postgresql.confファイルで/var/lib/postgresql/10/mainに設定されています。 このファイルを編集して、新しいデータディレクトリを反映します。

  1. 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 + XYENTERの順に押して、ファイルを保存して閉じます。 これは、新しいデータディレクトリの場所を使用するようにPostgreSQLを構成するために必要なすべてです。 この時点で残っているのは、PostgreSQLサービスを再度開始し、それが実際に正しいデータディレクトリを指していることを確認することだけです。

ステップ3—PostgreSQLを再起動する

postgresql.confファイルのdata-directoryディレクティブを変更した後、systemctlを使用してPostgreSQLサーバーを起動します。

  1. sudo systemctl start postgresql

PostgreSQLサーバーが正常に起動したことを確認するには、systemctlを再度使用してそのステータスを確認します。

  1. sudo systemctl status postgresql

サービスが正しく開始された場合、このコマンドの出力の最後に次の行が表示されます。

Output
. . . Jul 12 15:45:01 ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS. . . .

最後に、新しいデータディレクトリが実際に使用されていることを確認するには、PostgreSQLコマンドプロンプトを開きます。

  1. sudo -u postgres psql

データディレクトリの値をもう一度確認してください。

  1. SHOW data_directory;
Output
data_directory ----------------------------------------- /mnt/volume_nyc1_01/postgresql/10/main (1 row)

これは、PostgreSQLが新しいデータディレクトリの場所を使用していることを確認します。 これに続いて、データベースにアクセスし、データベース内のデータを操作できることを確認してください。 既存のデータの整合性を確認したら、バックアップデータディレクトリを削除できます。

  1. sudo rm -Rf /var/lib/postgresql/10/main.bak

これで、PostgreSQLデータディレクトリを新しい場所に正常に移動できました。

結論:

従った場合、データベースは新しい場所にあるデータディレクトリで実行されているはずであり、ストレージを拡張できるようにするための重要なステップを完了しています。 また、Webアプリケーションのスケーリングと最適化に役立つサーバーインフラストラクチャを作成する方法については、Webアプリケーションの5つの一般的なサーバーセットアップを参照することをお勧めします。