web-dev-qa-db-ja.com

PostgreSQL 9.1でのフェイルオーバーの自動化

PostgreSQL 9.1で自動フェイルオーバー用に2つの同一のサーバーをセットアップするにはどうすればよいですか。

[〜#〜] os [〜#〜]

Centos 5
ソースからコンパイルされたPostgreSQL 9.1
postgresユーザーアカウントは両方のマシンに存在し、両方のマシンに接続するためのsshパスワードレスキーを持っています。

私の現在のセットアップ:

マスターサーバー構成:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 Host  replication   all   10.0.66.1/32      trust
 Host  replication   all   10.0.66.2/32      trust

スタンバイサーバー

postgresql.confおよびpg_hba.confは、マスターサーバーで構成されているものと同じです。

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'Host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

HzRootのおかげで、サーバーをスタンバイからマスターに切り替える方法を理解しました。

次のコマンドを使用して、新しいスレーブを新しいマスターと同期し、レプリケーションのバックアップを取得して実行できます。

新しいマスター(10.0.66.2)

  1. su-postgres
  2. / opt/pgsql91/data /のtrigger.txtをタッチします
  3. recovery.confがrecovery.doneになります
  4. psql -c "; SELECT pg_start_backup( 'backup'、true)";
  5. rsync -a -v -e ssh/opt/pgsql91/data/10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c "; SELECT pg_stop_backup()";

新しいスレーブ(10.0.66.1)

  1. recovery.confを作成します。cprecovery.doneからrecovery.confへ
  2. vi recovery.conf IPアドレスの変更:primary_conninfo = 'Host = 10.0.66.2'
  3. postgresqlを起動する

だから私の質問は今です:

  1. これは役割を切り替える正しい方法ですか?
  2. 誰かがこのプロセスを自動化しましたか?
  3. 同期レプリケーションが有効になっている場合、新しいマスターサーバーはスレーブの応答を待機しているため、トランザクションをコミットしません。ただし、他のサーバーである古いマスターがダウンしているため、スレーブはありません。これは正しいですか、または新しいスレーブがダウンしている間、同期レプリケーションを一時的に無効にする必要がありますか?
18
Craig Efrein

チェックアウト repmrg

repmgrは、DBAおよびシステム管理者がPostgreSQLデータベースのクラスターを管理するのに役立つオープンソースツールのセットです。

PostgreSQL 9で導入されたホットスタンバイ機能を利用することにより、repmgrは、高可用性とスケーラビリティの要件を持つデータベースのセットアップと管理のプロセスを大幅に簡素化します。

repmgrは、管理と日常管理を簡素化し、生産性を高め、PostgreSQLクラスタの全体的なコストを削減します。

  • 複製プロセスの監視。 DBAが高レベルで発行できるようにする
  • スイッチオーバーやフェイルオーバーなどの可用性操作。

次の2つのことを行います。

  1. repmgr:クラスターでタスクを実行して終了するコマンドプログラム
  2. repmgrd:クラスターを監視し、リモートアクションを自動化できる管理および監視デーモン。

自動フェイルオーバーの場合、repmgrdはトリックを実行し、pgPoolのようなネットワーク内のSPOFではありません。ただし、すべてのデーモンを監視し、障害発生後にそれらを元に戻すことは依然として重要です。

RPMを含むバージョン2.0がまもなくリリースされます。

8
Frank Heikens

recovery.confファイルに、マスターからスレーブにフェイルオーバーするようpostgresに指示する行を追加する必要があります。追加する必要があります

trigger_file = '/any/file/to/trigger'

このファイルを指定されたパスに作成したとき。ノードが変更されます。 (ファイルには何も含まれていません。トリガーにすぎません)

ストリーミングレプリケーション に関する追加情報を見つけることができます

一方、いくつかのトリックを使用して自動的に作成することは可能かもしれませんが、監視ツールを使用して手動でフェイルオーバーを行う方が良いでしょう。

4
sftsz

誰かがこれにpgpool-IIを使用することを検討しましたか?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

PostgreSQLのレプリケーションを設定しています。古いマスターが戻ってきたときにトリッキーな部分が発生するようです。

私が読んだことから、pgpoolはそのほとんどを自動化できるようです。ただし、PostgreSQL 9.1にすでに存在するレプリケーション機能を活用しているかどうかはわかりません。

0
Paulo SantAnna