SQL
 Computer >> コンピューター >  >> プログラミング >> SQL

【完全ガイド】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による動作確認という流れで行います。障害発生時には手動フェイルオーバーによってスレーブをマスターへ昇格させることで、システムの可用性を維持できます。

【完全ガイド】CentOS 8でPostgreSQL 12のストリーミングレプリケーションを構築する方法


  1. グラフデータベースとは?基本概念と主な活用例をわかりやすく解説

    グラフデータベースとはグラフ(Graph)とは、ノード(頂点)とエッジ(辺)から構成されるデータ構造のことです。各ノードは人や商品などの「エンティティ(実体)」を表し、各エッジはノードとノードをつなぐ「関係性」を示します。グラフデータベースは、このグラフ理論を基盤として、データの格納・マッピング・照会(クエリ)を行うNoSQLデータベースの一種です。従来のリレーショナルデータベースがテーブル形式でデータを管理するのに対し、グラフデータベースはノードとエッジによってデータ間のつながりを直接的に表現できる点が最大の特徴といえます。グラフデータベースの主な用途グラフデータベースは、データ間の相互接続

  2. RDBMSの主要用語を徹底解説!データベース・主キー・外部キーの基礎知識

    RDBMS(リレーショナルデータベース管理システム)には、データベース、テーブル、カラムなど、押さえておきたい重要な用語が数多くあります。ここでは、それぞれの用語の意味と役割を、具体例とともにひとつずつわかりやすく解説していきます。データベース(Database)データベースとは、「Student(学生)」や「Professors(教授)」などの複数のテーブルをまとめて管理する集合体のことです。システム全体のデータを格納する土台となる存在です。テーブル(Table)テーブルは、行(レコード)と列(カラム)で構成されるデータの集合です。例えば、学生情報を管理するテーブルは以下のようになります。S