OpenSCGのHAフェイルオーバーソリューション「PGHA」。 PostgreSQL 9.3のマスタースレーブソリューション

以下では、PostgresSQLの独自のリソース(非同期レプリケーション+ pgBouncer + PGHA)を使用して、 1つの投稿インストールガイドからのコメントを含む無料の翻訳形式で、フォールトトレラントなマスタースレーブシステムをセットアップする経験について説明します

pgHA

pgHAはPerlで記述されたプログラムであり、そのコードはツールの基盤であるfailoverd.plファイルに記載されています。 仕事でpgbouncerと独自のPostgresSQLレプリケーションを使用します。 主要なデータベースを監視し、使用できない場合は、記録のために補助データベースを開き、レプリケーションを停止します。 少なくともバージョン9.3以降、PostgresSQLとともにインストールされますここからダウンロードできます。 インストールプロセスは、。/ 9.3 / pgha / doc /にあるREADMEファイルに記述されています。

habrahabrでは、pgpoolが最も人気のある復元ツールのようです。 残念ながら、既存の単一のエクスペリエンスでは、これら2つのツールを比較することはできません。

カスタマイズ

このシステムには、マスターサーバー、スレーブ、およびスケールノードの3つのマシンが必要です。 後者なしでも実行できます。

1.レプリケーションのセットアップ

ネイティブレプリケーションのセットアップについては、すでに非常に多くの記事で説明されています。

2. pgBouncerの構成

pgBouncerは、軽量のプラー、PostgreSQL用の接続マネージャーです。 ここでは、設定ファイルに応じて、要求をメインデータベースまたは補助にリダイレクトする入力アクセスポイントとして使用されます。 PostgresSQL 9.3と共にインストールされます。

  1. サーバー-スケーリングノード、またはマスターサーバーのステータスを監視する他のマシンで、バウンサーユーザーとそのパスワードを作成して、構成を開始する必要があります。

  2. 次に、pgbouncer.ini.origとpgbouncer.ini.failoverの2つのファイルを準備します。 これらはpgbouncer構成ファイルであり、本質的にはデータベースのIPホストのみが異なります。ホストデータベースのIPとポートは.origファイルで指定され、補助ポートは.failoverで指定されます。 例はここにあります
    -空のログファイルを作成し、そのパスを指定する必要があります
    -また、pgbouncerを介して要求が行われるユーザーを含むuserlist.txtファイルを作成する必要があり、そのパス(auth_fileフィールド)を指定することを忘れないでください。例は./9.3/share/doc/pgbouncerまたはここにあります。
    -作成されたユーザーからpgbouncerに関して管理者権限を持つユーザーを選択し、admin_usersフィールドで指定します
    -また、pgbouncer(listen_port)が配置されるポートを指定する必要があります。その後、他の入力済みフィールドを確認し、必要な変更を加えた後、起動後にpgbouncerを通常のデータベースとして参照できます。

  3. pgbouncer.iniファイルを作成し、pgbouncer.ini.origファイルの内容をコピーします。 これは作業ファイルであり、pgbouncer.ini.origまたはpgbouncer.ini.failoverファイルは状況に応じてさらにコピーされます。 空のpgbouncer.ini_oldファイルを作成します。これはpghaによって使用されます。

  4. バウンサーユーザーの代わりにpgbouncerを実行します。
    pgbouncer -d //pgbouncer.ini

3. pgHAの構成

  1. pgHAは、事前インストールが必要ないくつかのPerlモジュールを使用します。 その前に、CPANをインストールする必要があります。
     yum install perl-CPAN perl -MCPAN -e 'install Module::Build::Compat' perl -MCPAN -e 'install Config::IniFiles' perl -MCPAN -e 'install DBI' perl -MCPAN -e 'install DBD::Pg' perl -MCPAN -e 'install Log::Log4perl' perl -MCPAN -e 'install Proc::Daemon' perl -MCPAN -e 'install Net::Ping' perl -MCPAN -e 'install Nagios::Plugin' 

    無害なエラーが発生する可能性があります:yaml 'not installedは永続的な状態を保存しません。 迷惑な場合は、次のことができます。
     cpan install Bundle::CPAN reload cpan exit 

  2. 次に、pgHAの設定ファイルを準備します。その例は./9.3/pgHA/cfg/フォルダーまたはここにあります。example.confおよびscottmVm.confファイル。
    -pidFileはどこにでも配置できます。選択したパスにアクセスできることを確認する必要があります。
    -logConfigは./9.3/pgHA/cfg/log4perl.confにあり、ログ設定が含まれています
    -triggerFileには、recovery.confで指定されたファイルを指定する必要があります
    -[failover]セクションを削除することをお勧めします。彼については少し下に言及します
    -[app01]セクションには、ファイルの最後のコマンドを含むpgbouncer設定が含まれます。このコマンドは、masterデータベースに障害が発生した場合、その接続をすべて削除し、pgbouncerを再起動して新しいメインデータベースを操作します:
     # Which databases should be part of failover fence_lock_dbs=postgres # pgBouncer command to pause / fence the db's fence_lock_command=kill # pgBouncer command to reload the config file fence_move_command=reload # pgBouncer command to unlock the db's fence_unlock_command=resume dbcheck="select 1" 

    -[app01]セクションのpgbouncer_db_userフィールドで、pgbouncer.iniで指定されたadmin_usersの1つが
    -他のパラメーターに慣れる必要があります

  3. 次に、/ opt / pgHA / log /フォルダーに空のログファイルpgHA.logを作成します。 これは、pgHAがデフォルトで使用するパスです。

  4. マスターサーバー上で、ファイル./9.3/pgha/cfg/status_table.sqlに記述されているテーブル、または[master]セクションのdbnameフィールドで指定されたデータベースに作成されたテーブルを作成します。

  5. pgHAを実行するsshユーザーキーを生成し、それをバウンサーユーザーに転送します。
    ssh-keygen -t rsa (空のパスワードを作成)
    -〜/ .ssh / id_rsa.pubの内容をコピーします
    -ユーザーに代わってユーザー用の警備員がいるマシンで、次のコマンドを実行します。
    mkdir ~/.ssh
    chmod 0700 .ssh
    vi authorized_keys (以前にコピーしたid_rsa.pubの内容を貼り付け、保存して閉じます)
    chmod 0600 .ssh/authorized_keys

  6. pgHAを実行します。
    ./failoverd.pl -c //PgHA.conf --auto
    failoverd.plファイルは./9.3/pgHA/binフォルダーにあります。

  7. 手順6でエラーが発生しない場合は、pgHAを停止します
    ./failoverd.pl -c //PgHA.conf --stop
    この状態では、pgHA自動フェイルオーバーは発生しません。 failoverd.plファイルを開いて、 ここに示されているコードに従って、443行目をコメントアウトし、442行目をコメントアウトする必要があります 。 それは判明するはずです:
     # Start the failoverd monitoring process elsif ( $startWorker ) { print "\n\tInitializing... \n"; . . . # Once we have verified that the system is online, we need # to set the failover 'spring'. $logger->info("==Startup==: Arming Failover mechanism"); print "\t === Arming Failover mechanism === \n"; if ( SetSpring(%Config,$logger) != 1 ) # if ( 0 ) { $logger->info("Cannot set failover configuration, exiting..."); print "Cannot set failover configuration, exiting...\n"; exit(1); } . . . 

    これで、マスターデータベースに障害が発生した場合、pgHAはレプリケーションを停止し、記録用に補助データベースを開き、新しいメインデータベースを使用してロボットの設定でpgbouncerを再起動し、作業を完了します。 システムを元の状態に戻すことは手動で必要です。

  8. pgHAを実行します。 テストする。

PS

[failover]セクションは、フェイルオーバー中に実行されるコマンドを示します。 したがって、たとえば、failoverd.plのコードを変更するのではなく、pgbouncer設定ファイルを変更して再ロードするスクリプトを作成し、それを指すことができます。

このソリューションは、データベースを使用するプログラムの速度を低下させることはありません。また、適切な構成を使用すると、pgbouncerは速度を上げることができます。 また、pgHAコードのオープン性をプラスと見なします。たとえば、フェイルオーバー前にホストデータベースをリロードする試み、複製を再開する、ターミナルのフォントを変更するなどを教えるために補足することができます。

postgres 8.4のソリューションは、前述のブログで紹介されています。

Source: https://habr.com/ru/post/J223825/


All Articles