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
iSCSIを使ってみる@CenOS5.2 (ターゲット) + Windows XP (イニシエータ)

CentOS 5をtarget、Windowsをinitiatorとして、iSC …

no image
vimでpythonの補完を行う

pythonを少し書いてみようと思い立ち、とりあえずvimでpythonのキーワ …

Lenovo Trackpoint キーボードで、Fnキーの振る舞いを逆にする@Windows 10

Lenovo の Trackpointキーボード 0B47208を使っているので …

no image
vimで検索語をハイライトする@さくらインターネット

普通vimで検索すると、検索語がハイライトされるのですが、さくらインターネットに …

no image
Windowsの管理機能を集約@Windows 7

Windows 7でフォルダ名に特殊名をつけると、コントロールパネルのよう、いや …

no image
Googleの検索に検索ツールが出現

GoogleでWeb検索すると、いつの間にか”検索ツール&#8220 …

no image
Google Plublic DNS

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

no image
ディスクイメージを直接マウントする@Linux

以前、ディスクイメージファイルをkpartxを使ってマウントする方法を紹介しまし …

no image
Apacheのプロキシ(proxy)機能

Apacheにはフォワードプロキシやリバースプロキシの機能があります。 フォワー …

no image
dockerのストレージドライバーをdevicemapperに変更する@Ubuntu 14.04

Ubuntu 14.04(desktop)にdockerを入れて、docker …