【完全ガイド】CentOS 8でPostgreSQL 12のストリーミングレプリケーションを構築する方法
PostgreSQLのストリーミングレプリケーションは、プライマリ(マスター)ノードからスタンバイ(スレーブ)ノードへWAL(Write-Ahead Log)データを継続的に転送し、ほぼリアルタイムのデータベース複製を作成する仕組みです。これにより、高可用性と耐障害性を実現できます。
全体構成イメージ
マスターノードが読み書き処理を担当し、生成されたWALを各スレーブへ送信します。スレーブ1・スレーブ2は読み取り専用として動作し、常に最新のデータを保持します。
マスターノードの設定
1. WALアーカイブの有効化
postgresql.confを編集し、以下のパラメータを設定します。
archive_mode = on archive_command = 'cp %p /var/lib/pgsql/12/archive/%f' wal_level = replica max_wal_senders = 3
2. レプリケーション接続の許可
pg_hba.confを編集し、スレーブからのレプリケーション接続を許可します。
# TYPE DATABASE USER ADDRESS METHOD host replication repluser 192.168.1.20/32 md5
3. レプリケーション用ユーザーの作成
psqlに接続し、レプリケーション権限を持つ専用ユーザーを作成します。
CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'securepass';
設定変更後、マスター側のPostgreSQLを再起動して設定を反映させます。
sudo systemctl restart postgresql-12
スレーブノードの設定
1. マスターからベースバックアップを取得
pg_basebackupコマンドを使用して、マスターのデータをスレーブにコピーします。
sudo -u postgres pg_basebackup -h master_ip -D /var/lib/pgsql/12/data -U repluser -P -R
-Rオプションを指定すると、PostgreSQL 12ではstandby.signalファイルが自動的に作成され、接続情報(primary_conninfo)がpostgresql.auto.confに書き込まれます。
2. スタンバイ設定の確認
PostgreSQL 12では、従来のrecovery.confは廃止されています。必要な設定は以下の通りです。
# postgresql.auto.conf(または postgresql.conf) primary_conninfo = 'host=master_ip port=5432 user=repluser password=securepass' restore_command = 'cp /var/lib/pgsql/12/archive/%f "%p"' recovery_target_timeline = 'latest'
また、データディレクトリ直下にstandby.signalファイルが存在することを確認してください。このファイルがあることで、サーバーはスタンバイモードで起動します。
3. スレーブの起動
sudo systemctl start postgresql-12 sudo systemctl enable postgresql-12
レプリケーションの確認
マスター側で以下のSQLを実行すると、接続中のレプリカの状態を確認できます。
SELECT client_addr, state, sync_state FROM pg_stat_replication;
client_addr | state | sync_state -----------------+-----------+------------ 192.168.1.20 | streaming | async
stateが「streaming」と表示されていれば、レプリケーションが正常に動作しています。
手動フェイルオーバー
マスターに障害が発生した場合は、以下の手順でスレーブを新しいマスターへ昇格させます。
- 障害が発生したマスターからのレプリケーションを切断する
- 昇格させるスレーブで
recovery_target_timeline = 'latest'が設定されていることを確認する pg_ctl promoteコマンドを実行するか、standby.signalを削除してPostgreSQLを再起動するpg_stat_replicationを使用して、他のスレーブが新マスターに接続していることを確認する
まとめ
CentOS 8上でのPostgreSQL 12ストリーミングレプリケーションの構築は、マスター側でのWALアーカイブとレプリケーションアクセスの設定、スレーブ側でのベースバックアップ取得とスタンバイ設定、そしてpg_stat_replicationによる動作確認という流れで行います。障害発生時には手動フェイルオーバーによってスレーブをマスターへ昇格させることで、システムの可用性を維持できます。

-
グラフデータベースとは?基本概念と主な活用例をわかりやすく解説
グラフデータベースとはグラフ(Graph)とは、ノード(頂点)とエッジ(辺)から構成されるデータ構造のことです。各ノードは人や商品などの「エンティティ(実体)」を表し、各エッジはノードとノードをつなぐ「関係性」を示します。グラフデータベースは、このグラフ理論を基盤として、データの格納・マッピング・照会(クエリ)を行うNoSQLデータベースの一種です。従来のリレーショナルデータベースがテーブル形式でデータを管理するのに対し、グラフデータベースはノードとエッジによってデータ間のつながりを直接的に表現できる点が最大の特徴といえます。グラフデータベースの主な用途グラフデータベースは、データ間の相互接続
-
RDBMSの主要用語を徹底解説!データベース・主キー・外部キーの基礎知識
RDBMS(リレーショナルデータベース管理システム)には、データベース、テーブル、カラムなど、押さえておきたい重要な用語が数多くあります。ここでは、それぞれの用語の意味と役割を、具体例とともにひとつずつわかりやすく解説していきます。データベース(Database)データベースとは、「Student(学生)」や「Professors(教授)」などの複数のテーブルをまとめて管理する集合体のことです。システム全体のデータを格納する土台となる存在です。テーブル(Table)テーブルは、行(レコード)と列(カラム)で構成されるデータの集合です。例えば、学生情報を管理するテーブルは以下のようになります。S