Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

PostgreSQL 9.0 レプリケーション機能を使ってみる @ RHEL5 x86_64

      2013/07/15

PostgreSQL 9.0 がリリースされましね。早速目玉機能の一つである、レプリケーション機能 (Streaming Replication) を試してみました。

●インストール

バイナリは、PostgreSQL 本家サイトからリンクされていた、EnterpriseDB社提供のバイナリを使用しました。インストールは簡単で、ダウンロードしたバイナリを実行し、途中postgresユーザのパスワードを求められますが、基本はリターンを押していくだけです。ただし、最後の追加ツール類のインストールだけは “n” を選択しました。
※X上で実行するとGUIが立ち上がるかもしれません

#  ./postgresql-9.0.0-1-linux-x64.bin
----------------------------------------------------------------------------
Welcome to the PostgreSQL Setup Wizard.

----------------------------------------------------------------------------
Please specify the directory where PostgreSQL will be installed.

Installation Directory [/opt/PostgreSQL/9.0]:

~ 省略 ~

Please wait while Setup installs PostgreSQL on your computer.

 Installing
 0% ______________ 50% ______________ 100%
 #########################################

----------------------------------------------------------------------------
Setup has finished installing PostgreSQL on your computer.

Launch Stack Builder at exit?

Stack Builder may be used to download and install additional tools,
drivers and applications to complement your PostgreSQL installation. [Y/n]: n

インストール後、勝手に起動するようなので、止めておきます。

# /etc/init.d/postgresql-9.0 stop
# chkconfig postgresql-9.0 off

レプリケーションをするには、2台のPCが必要なので、もう一台も同様にインストールしてください。

●設定

次は設定です。設定は、Primary側とHotStandby側 (レプリケーション元とレプリケーション先) で異なります。
※下記の例はパフォーマンスやセキュリティについては何も考慮していないので注意

設定ファイルは、/opt/PostgreSQL/9.0/data/ にあるpostgresql.conf , pg_hba.conf, recovery.conf(新規作成) です。

・ postgresql.conf

Primary側の変更箇所だけ以下に抜粋します。

wal_level = hot_standby
archive_mode = on
archive_command = 'cp %p /opt/PostgreSQL/9.0/data/pg_archive/%f'
max_wal_senders = 3

次にHotStandby側の変更箇所だけを以下に抜粋します。Primaryの設定 + hot_standby のパラメタを変更します。

wal_level = hot_standby
archive_mode = on
archive_command = 'cp %p /opt/PostgreSQL/9.0/data/pg_archive/%f'
max_wal_senders = 3
hot_standby = on

両PCでアーカイブの保存ディレクトリを作成します。

# mkdir /opt/PostgreSQL/9.0/data/pg_archive/
# chown postgres:postgres /opt/PostgreSQL/9.0/data/pg_archive/

 ・pg_hba.conf

レプリケーション接続を許可するIPの設定です。Primary側のHotStandby側も同様に以下を追記します。今回は192.168.0.0/255.255.255.0のセグメントを使用してレプリケーションを行いますので、以下のように記述しました。

host    replication     all             192.168.0.0/24          trust

・recovery.conf

HotStandb側には、 /opt/PostgreSQL/9.0/data/ に以下の内容のrecovery.confを新規に作成します。赤字の部分はPrimaryのIPを指定します。trigger_file は HotStandby を Primary に昇格させる際に設置するトリガーファイルの場所を指定します。PostgreSQL がアクセス(読み書き)できるディレクトリならばどこでも構いません。

standby_mode = 'on'
primary_conninfo = 'host=192.168.0.1 port=5432 user=postgres'
restore_command = 'cp /opt/PostgreSQL/9.0/data/pg_archive/%f %p'
trigger_file = '/tmp/trigger_file'

以上で設定は完了です。

●起動

まずはPrimary側を起動します

# /etc/init.d/postgresql-9.0 start

接続確認をし、testdbとういデータベースを作ってみます。

# su - postgres
$ /opt/PostgreSQL/9.0/bin/psql -l
$ /opt/PostgreSQL/9.0/bin/createdb testdb
$ exit

HotStandb は起動前に、Primaryからデータを持ってきます。本当は必要なデータだけを持ってくればよいのですが、面倒なので、ここではPrimary側のdataディレクトリ全部持ってきます。

# cd /opt/PostgreSQL/9.0/
# tar zcvf data.tar.gz data
# scp data.tar.gz 192.168.0.2:/opt/PostgreSQL/9.0/

HotStandby側で設定ファイルを上書きされてもいいように、設定ファイルをバックアップします。

# mkdir /root/backup
# cp -a /opt/PostgreSQL/9.0/data/*.conf /root/backup/

Primaryのデータを展開します。

# cd /opt/PostgreSQL/9.0/
# tar zxvf data.tar.gz

設定ファイルをバックアップから復元し、いらないデータを削除します。

# cp   -a /root/backup/*.conf  /opt/PostgreSQL/9.0/data/
# rm -f  /opt/PostgreSQL/9.0/data/postmaster.pid

HotStandbyを起動します。

# /etc/init.d/postgresql-9.0 start

/opt/PostgreSQL/9.0/data/pg_log/内の最新 ログに、以下のように出力されれば成功です。

2010-09-24 20:04:07 JST LOG:  database system was interrupted; last known up at 2010-09-24 19:23:27 JST
2010-09-24 20:04:07 JST LOG:  entering standby mode
2010-09-24 20:04:07 JST LOG:  consistent recovery state reached at 0/7000078
2010-09-24 20:04:07 JST LOG:  record with zero length at 0/7000078
2010-09-24 20:04:07 JST LOG:  database system is ready to accept read only connections
2010-09-24 20:04:08 JST LOG:  streaming replication successfully connected to primary

HotStandby側では読みだけはできますので、PrimaryのPostgreSQLに読み書きしてみて、レプリケーションされているか確認してみてください。

● Primaryの切り替え

Primary を止めて、HotStandby を Primary に昇格してみます。

Primaryの停止。

# /etc/init.d/postgresql-9.0 stop

この時HotStandby側では以下のようなログが出力され続けます。

2010-09-24 20:16:29 JST FATAL:  could not connect to the primary server: could not connect to server: 接続を拒否されました
                Is the server running on host "192.168.0.1" and accepting
                TCP/IP connections on port 5432?

HotStandbyをPrimaryに昇格させるために、トリガーファイルを設置します。

# touch /tmp/trigger_file

すると、以下のようなログが出力され、Primaryに昇格されました。

2010-09-24 20:19:09 JST LOG:  trigger file found: /tmp/trigger_file
2010-09-24 20:19:09 JST LOG:  redo done at 0/8000020
2010-09-24 20:19:09 JST LOG:  last completed transaction was at log time 2010-09-24 20:09:57.849207+09
2010-09-24 20:19:09 JST LOG:  selected new timeline ID: 2
2010-09-24 20:19:10 JST LOG:  archive recovery complete
2010-09-24 20:19:10 JST LOG:  autovacuum launcher started
2010-09-24 20:19:10 JST LOG:  database system is ready to accept connections

なお、元々もPrimaryで止めた方のPCをHotStandbyで起動するには、最初のHotStandbyの起動と同様に、新しいPrimaryからデータを持ってきて、postgresql.conf, recovery.conf を設置し、起動する必要があります。(面倒だなぁ)

 - IT技術, サーバ構築 ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
Trackpointでスクロールできない@ThinkPad キーボード 55Y9024 with Windows7 64bit

ThinkPadのトラックポイントキーボード 55Y9024 を使っているのです …

no image
chromeに独自のproxyを設定

Windows版のchromeのproxyの設定を開くと、システム(IE)のpr …

no image
PC電源ユニット ENERMAX MODU82+ EMD525AWT購入

PCのATX電源として、Seasonic の”SS-300FS&#8 …

no image
radikoを出張先で聞く@Windows 7 or XP Professional 以上

普段は自宅が関東にあり、インターネットラジオradikoを聞いていたのですが、出 …

no image
screenコマンド@cygwin with ck

cygwinのターミナルck上でscreenを使用しようとすると、デタッチ後にア …

no image
Apache 2.0 + OpenSSL

OpenSSLは SSLv2/SSLv3/TLSv1 をサポートしているオープン …

no image
QRコードスキャナーのようなカメラ使うアプリが起動しない@Galaxy S (2.2)

標準のカメラアプリは正常に動作するのに、QRコードスキャナやFxCamera と …

no image
Windows 10 のストアアプリが起動しない

Windows 10のストアが起動しなくなってしまったので、その時実施した対処方 …

no image
sendip

ネットワークのテストをしたいとき、任意のパケットを送出したい場合があります。Wi …

no image
vim (vi) でマッチした文字列の一部を置換

vim (vi)の置換のお話です。 全行のoldをnewに置換したい場合は普通こ …