CentOS 7
Sponsored Link

PostgreSQL 9.2 : レプリケーションの設定2015/07/26

 
PostgreSQL のレプリケーションの設定です。マスタースレーブ型の冗長構成になります。
[1] マスター側ホストの設定です。
[root@dlp ~]#
yum -y install postgresql-server
[root@dlp ~]#
postgresql-setup initdb

Initializing database ... OK
[root@dlp ~]#
vi /var/lib/pgsql/data/postgresql.conf
# 59行目:コメント解除して変更

listen_addresses = '
*
'
# 165行目:コメント解除して変更

wal_level =
hot_standby
# 168行目:コメント解除して変更

# on ⇒ 同期

# remote_write ⇒ メモリは同期

# local ⇒ スレーブは非同期

# off ⇒ 完全非同期

synchronous_commit =
local
# 194行目:コメント解除して変更 (アーカイブ有効化)

archive_mode =
on
# 196行目:コメント解除して変更 (アーカイブ取得時のコマンド)

archive_command = '
cp %p /var/lib/pgsql/archive/%f
'
# 212行目:コメント解除して変更 (スレーブ数 + 1)

max_wal_senders =
2
# 214行目:コメント解除して変更 (アーカイブログの保持数)

wal_keep_segments =
10
# 221行目:コメント解除して変更 (任意の名称)

synchronous_standby_names = '
slave01
'
[root@dlp ~]#
vi /var/lib/pgsql/data/pg_hba.conf
# 最終行に追記 (接続許可の設定)

# host replication [レプリケーションユーザー] [接続許可IP] password

host    replication     replica          127.0.0.1/32            md5
host    replication     replica          10.0.0.30/32            md5
host    replication     replica          10.0.0.51/32            md5

[root@dlp ~]#
systemctl start postgresql

[root@dlp ~]#
systemctl enable postgresql

# レプリケーション用ユーザー作成

[root@dlp ~]#
su - postgres
-bash-4.2$
createuser --replication -P replica

Enter password for new role:
Enter it again:
[2] Firewalld を有効にしている場合は、PostgreSQL サービスの許可が必要です。
[root@dlp ~]#
firewall-cmd --add-service=postgresql --permanent

success
[root@dlp ~]#
firewall-cmd --reload

success
[3] スレーブ側ホストの設定です。
[root@node01 ~]#
yum -y install postgresql-server
[root@node01 ~]#
su - postgres
# マスター側のデータバックアップを取得

-bash-4.2$
pg_basebackup -h 10.0.0.30 -U replica -D /var/lib/pgsql/data -P --xlog

Password:    
# replica ユーザーのパスワード
-bash-4.2$
vi /var/lib/pgsql/data/postgresql.conf
# 230行目:コメント解除して変更

hot_standby =
on
-bash-4.2$
cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf

-bash-4.2$
vi /var/lib/pgsql/data/recovery.conf
# 44行目:コメント解除して変更 (アーカイブ取得時のコマンド)

restore_command = '
scp 10.0.0.30:/var/lib/pgsql/archive/%f %p
'
# 108行目:コメント解除して変更

standby_mode =
on
# 115行目:コメント解除して変更 (マスターサーバー接続情報)

primary_conninfo = '
host=10.0.0.30 port=5432 user=replica password=password application_name=slave01
'
-bash-4.2$
exit

logout
[root@node01 ~]#
systemctl start postgresql

[root@node01 ~]#
systemctl enable postgresql

[4] マスターサーバー側で SQL 実行し、以下のような結果が返ってくれば OK です。 データベースを作成する等してレプリケーションが行われていることを確認してください。
-bash-4.2$
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"

 application_name |   state   | sync_priority | sync_state
------------------+-----------+---------------+------------
 slave01          | streaming |             1 | sync
(1 row)
関連コンテンツ