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
Googleの検索結果に近所の情報が表示される件

いつ頃からか、Googleで普通に検索すると、近所の情報が表示されるようになりま …

no image
Google Plublic DNS

Google が提供しているパブリックDNSサービス。名前解決が早くなり、インタ …

no image
コマンドの実行@Javascript with Rino

RhinoエンジンでのJavascriptのコマンド実行方法。 適当な配列(op …

no image
CygwinでWindowsの拡張子に関連づけられたファイルを簡単に開く

Cygwin 使っていると、コマンドラインでいろいろと処理したくなりますよね? …

no image
ローカルファイルの読み取り@Javascript with Rhino

Rhinoを使ったJavascriptスクリプトでファイルを読み込むにはread …

no image
JBossのHypersonicSQL(hsql)管理ツール起動方法

JBossには気軽に使用できるHSQLが組み込まれています。ちょっとしたDBを使 …

no image
ck@cygwin 1.7

cygwin 1.7 より前では、ターミナルエミュレータにckを使っていたのです …

no image
標準出力にタイムスタンプを付与する@Linux

シェルスクリプトの実行結果をファイルに保存する時など、タイムスタンプが欲しい時が …

no image
Windowsでの自動起動ソフトウェアを制御する@Windows XP

Windowsの起動時に自動で起動するソフトウェアは、全てのプログラムのスタート …

no image
linuxのSWAPパーティッションにUUIDを指定する

ext3とかext4のパーティッションはtune2fsでUUIDを指定できますが …