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
EJB3 JPAのmapping-type @ JBoss 4.2

JBoss 4.2 でEJB3のJPA (JAVA Persistence AP …

no image
cygwin ckでmanが見れない@cygwin with ck

cygwinをcygwin ck上で使っているのですが、manを見ようとすると以 …

no image
LDAPサーバ構築 @ Debian etch

まずはapt-getでインストールします # apt-get install s …

no image
blu-rayの再生でちらつく@Acer AS 1410 with PowerDVD 10 on Windows 7

Acer AS 1410 で blu-ray を再生してみました。 blu-ra …

no image
ドメイン名一覧をドメイン毎にソート(文字列の反転)@bash

Webページのアクセス解析をドメイン毎に集計してみようと思って、IPを抜き出しホ …

no image
Fedora 17を19にアップグレードする

Fedora 17 のサポートが気づいたら終わっていたので、最新の19にアップグ …

no image
シェルスクリプトでファイル内の文字列を置換する

== 2012/11/8 追記 == 以下ではedコマンドでの文字列置換を紹介し …

no image
Tracの導入@Debian etch

Tracはメジャーなオープンソースのバグトラッキングシステム。 Subversi …

no image
Windows 10の強制アップデート・再起動を無効にする

Windows 10 Proでは、Windowsが強制的にアップデートされ、ほっ …

no image
Ubuntuの起動画面が途中で見えなくなる@Ubuntu 9.04

Ubuntu 9.04を入れてみました。 起動時の画面が途中で真っ暗になったり、 …