share facebook facebook twitter menu hatena pocket slack

2012.02.22 WED

PostgreSQL(9.1)でレプリケーション

鈴木 宏康

WRITTEN BY 鈴木 宏康

今回は、PostgreSQL(9.1)でホットスタンバイのDBへのレプリケーションを試してみます。

マスターデータベースとスレーブ(ホットスタンバイ)データベースは、CentOS(6.2) & PostgreSQL(9.1) & PostGIS(1.5)の記事のようにインストールされているものとします。

【マスターDBでの作業】

まず、PostgreSQLを停止しておきます。

# su - postgres
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop

postgresql.confを調整します。

$ cat postgresql.conf
...
listen_addresses = '*'
#listen_addresses = 'localhost'
...
wal_level = hot_standby
#wal_level = minimal
...
max_wal_senders = 2
#max_wal_senders = 0
...
wal_keep_segments = 8
#wal_keep_segments = 0
...
hot_standby = on
#hot_standby = off

そして、PostgreSQLを起動しておきます。

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start

レプリケーション用のユーザーを作成します。

$ /usr/local/pgsql/bin/psql
postgres=# CREATE ROLE repluser LOGIN REPLICATION PASSWORD 'replpass';
CREATE ROLE

pg_hba.confを調整します。

$ cat pg_hba.conf
...
host    replication     repluser        10.0.0.0/8            md5

※AWS上から(10.0.0.0/8)からrepluserでアクセスできるようにします。

PostgreSQLを再起動します。

$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log restart

【スレーブDBでの作業】

あらかじめPostgreSQLを停止しておきます。

# su - postgres
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop

データベースクラスタを削除します。

$ cd /usr/local/pgsql/data
$ rm -rf *

ベースバックアップを取得します。

$ /usr/local/pgsql/bin/pg_basebackup -D /usr/local/pgsql/data -x -P -h 10.150.117.75 -U repluser
Password:
42536/42536 kB (100%), 1/1 tablespace
$ ls -1
PG_VERSION
backup_label
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_multixact
pg_notify
pg_serial
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
pg_xlog
postgresql.conf
postgresql.log

recovery.confを作成し調整します。

$ cp /usr/local/pgsql/share/recovery.conf.sample recovery.conf
$ cat recovery.conf
...
standby_mode = on
#standby_mode = off
...
primary_conninfo = 'host=10.x.x.x port=5432 user=repluser password=replpass'
#primary_conninfo = ''          # e.g. 'host=localhost port=5432'
...

PostgreSQLを起動します。

$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start

以上で、マスターデータベースの変更がスレーブ(ホットスタンバイ)データベースにレプリケーションされるようになります。
(スレーブ(ホットスタンバイ)データベースでの読み取りは可能です)

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。