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


18

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. 同期レプリケーションが有効になっている場合、スレーブが応答するのを待っているため、新しいマスターサーバーはトランザクションをコミットしません。ただし、他のサーバーである古いマスターがダウンしているため、スレーブはありません。これは正しいですか、または新しいスレーブがダウンしている間、同期レプリケーションを一時的に無効にする必要がありますか?

1.はい、正しい2.そのプロセスを自動化しない方が良いかもしれません。3.したがって、少なくとも2つのスレーブと1つのマスターが必要です。あなたが言ったように同期するため。レプリケーションでコミット同期をプッシュするには、少なくとも2つのノードが必要です。マスターノードが1つしかない場合、コミットできません
。– sftsz

新しいマスターでは手順4、5、および6は必要ありません。なぜなら、そもそも複製しているからです。第二に、マスターが死亡してオフラインになった場合-マスタに接続できなくなります。手順4、5、および6は通常、レプリケーションプールに参加する新しいスレーブノードで実行されます。
エリック

@Ericでこれをプレイしたとき、古いマスターを動作状態に戻すには、ステップ4、5、6が必要です。スタンバイを新しいプライマリにすると、すぐに新しいWALエントリが作成されるため、古いマスターの1つ先のエントリになります。スタンバイモードで古いマスターを起動するとエラーが発生したため、新しいマスターと同期するために古いマスターで手順4、5、6を行う必要がありました(pg_basebackupを使用して、xlog全体を新しいマスターからストリーミングできます) -postgres> = 9.1のステップ4,5,6を置き換えます)。私は正しいですか、何か間違ったことをしましたか?これは必要ありませんか?
ダリボーフィラス

回答:


8

repmrgをチェックしてください

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

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

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

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

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

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

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

RPMを含むバージョン2.0がリリースされようとしています。


こんにちはフランク、答えてくれてありがとう。repmrgについて聞いたことがないので、ぜひ試してみます。
クレイグエフレイン

こんにちはフランク、repmgrに感謝します。まさに私が探していたものでした。今日ついに試してみました。
クレイグエフレイン

4

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

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

指定されたパスにこのファイルを作成するとき。ノードが変更されます。(ファイルには、単なるトリガーであるものは含めないでください)

ストリーミング複製に関する追加情報を見つけることができます

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


回答ありがとうございます。試してみるのに数日かかるかもしれませんが、必ずお返しします。
クレイグエフレイン

プロセスを大幅に合理化するのに役立ったtrigger_file回答に対して+1を提供します。プロセスを完全に自動化する方法は、すべての答えではありません。私が気づいたもう1つのことは、マスターがダウンしている間、マスターが確認するのを待っていたため、トランザクションが完了しないことです。これは非同期レプリケーションを使用することで解決されました
Craig Efrein

すごいね。PostgreSQLのレプリケーション実装の柔軟性の欠如については多くの批判がありますが、これはフェイルオーバーを処理するための優れたシンプルな方法です。
アーロンブラウン

1
ただし、マスター自体がまだ実行されている場合でも(マスターが2つある場合)、マスターの役割を引き継ぎます。これはpostgres自体によって自動化されていません。
ダリボーフィラス

0

これにpgpool-IIの使用を検討している人はいますか?

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

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

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


1
pgPoolは単一障害点であり、停止するとすべてが失われます。
フランクハイケンズ

1
ご回答ありがとうございます。CentOSとDebianの両方で結果が異なるPGPool IIを試しましたが、最終的にはgaveめました。
クレイグエフレイン

1
HAproxyでpgpool IIを使用しないのはなぜですか?ハートビートとフローティングIPリスニングで?
mikiemorales 14

歴史的な参考のために、pgpool-iiは現在Windows上でも実行されません。
14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.