Windows 2012上のHalf-HAクラスターPostgreSQL

感謝の気持ち


Habr、あなたが何をしていて、私があなたに費やした素晴らしい時間をありがとう! 高品質で繊細なユーモアと広い視野の記事をありがとう、勇敢なhabropisis。 あなたとメアリー・イワノフナ(1年生の読み方を教えてくれた)にのみ感謝します。ITで大きな成功を収めました。

エントリー


しばらく前に、私はプロプライエタリな製品に取り組んでいました。 このソフトウェアは、そのデータを外部DBMSに保存しました。 当初は、作業はMS SQLを使用して実行されましたが、後で、特に「nixライクなシステムのみをインストールする」ユーザーのために、 PostgreSQLとの互換性を確保しました。 その後、「データベースが落ちました-トランザクションログからデータベースを復元する必要があります」というクラスの問題を解決するために連れて行ってくれました。

ある晴れた日、チームは別のプロジェクトを実装するために行きました。 施設には、フェイルセーフMS SQLクラスターが展開される2つのWindows 2012サーバーが既にあることが最初に合意されました。 しかし、最後の瞬間に、顧客はインスタンスに十分なお金を持っていなかったので、成長データベースを配置し、何らかの方法でフォールトトレランスの問題を解決するように指示されました。 Windows用のインストーラーをコンパイルしたpostgres開発者のコ​​ミュニティに感謝します。 タスク:

  1. WindowsにPostgreSQL DBMSをインストールします。
  2. データベース間のデータ複製を提供します。
  3. フォールトトレランスの問題を解決します。

1. PostgreSQLのインストール


ここではすべてが簡単です:


注:最後に実行できないスタックビルダー-その要素は必要ありません。

2.データ複製


デフォルトでは、Slony-Iに設定されますが、非同期複製はすでに使用する「ボックス」にあります。 時々、Linuxコマンドラインと設定ファイルへのアクセスを拒否し、psqlを介してDBMSを設定する必要があったため、mad skillzが続行します。 ここおよび将来、すべてのユーティリティはC:\ Program Files \ PostgreSQL \ 9.4 \ bin \フォルダーから取得されます ($ PGDATA変数を指定するのは正しいでしょうが、何らかの理由でインストーラーによってデフォルトで設定されませんでした)。 マスターで:

DBMSコマンドに接続します。

psql.exe -U postgres 

データ複製モードをオンにします。

 alter system set wal_level=hot_standby; 

アーカイブモードを無効にします。

 alter system set archive_mode=off; 

レプリケーションスロットを作成できます。

 alter system set max_replication_slots=1; 

データ複製プロセスの最大数を設定します(2番目のプロセスはpgadminユーティリティの操作を提供します):

 alter system set max_wal_senders=2; 

コマンド「\!」を実行します そして...笑! 私たちは、Windowsコマンドプロンプトにいます。 pg_hba.confファイルを編集します(以下、 C:\ Program Files \ PostgreSQL \ 9.4 \ dataフォルダのファイルを意味します)。 彼は、ホスト\ユーザーのDBMSへのアクセスを担当します。 行を追加します。

 #        host all all <ip-> md5 #           host all all <ip-slave> md5 host replication postgres <ip-> trust #   postgres        host replication postgres <ip-slave> trust</i><br> 

スレーブ上:

1. postgresqlサービスを停止します。

2.フォルダーC:\ Program Files \ PostgreSQL \ 9.4 \ dataの内容を削除します

3. pg_basebackupコマンドを使用して、マスターからバックアップを作成します。 パラメーターとして使用するもの:

 pg_basebackup -h <ip-> -D "C:\Program Files\PostgreSQL\9.4\data" -U postgres 

実行の終わりに、ユーティリティはWALアーカイブが設定されていないことにoutしますが、次の段階のために基本的には必要ありません(ボーナスとして-ディスク容量を節約します)。

4. postgresql.confファイルに移動して、パラメーターを設定します。

 #  " " hot_standby=on #     hot_standby_feedback=on #    WAL- wal_receiver_status_interval=0 

マスターに戻ります。

1.ホストをマスターとして割り当てます。

 alter system set hot_standby=off; 

2.スレーブからの応答待ちを無効にします。

 alter system set hot_standby_feedback=off; 

3. WALログの転送の間隔を無効にします。

 alter system set wal_receiver_status_interval=0; 

4.ウィザードでDBMSサービスを再起動します(psqlから離れることはできません)。

 \! pg_ctl restart -D "C:\Program Files\PostgreSQL\9.4\data" 

5.複製スロットを作成します。

 select pg_create_physical_replication_slot('slot_1'); 

3.フォールトトレランス


Slony-Iはプロジェクト仕様の一部ではなく、そのためのPowerShellスクリプトを発明するのは面倒でした。 顧客は追加のLinuxサーバーのインストールを完全に拒否したため、 pgpool -IIまたはpgbouncerのオプションは使用できなくなりました (Windowsでの動作が明確ではありません)。 そのため、トリガーファイルによる記録モードへの移行がありました。 スレーブを構成して、ウィザードモードに入ります。 これを行うには、recovery.confファイルを作成し、それに行を追加します。

 standby_mode=on #    primary_conninfo='host=<ip_> port=5432 user=postgres' #     primary_slot_name=slot_1 #     trigger_file=startmaster #  ,          

注:スレーブがウィザードモードに入ると、ファイルの名前はrecovery.doneに変更されます。

スレーブでpostgresサービスを開始します。 セットアップが成功した場合は、正しく起動し、ウィザードからデータを取得します。 複製を確認できます:

-コマンドを使用してマスター上で:

 select (active) from pg_replication_slots; 

-スレーブでは、オブジェクトを作成して、読み取り専用のトランザクションエラーを取得しようとすることができます。 クライアントの場合、ウィザードでテストテーブルを作成できます。これは、スレーブで自動的に複製されます。

ウィザードが失敗した場合、潜在的なシステム管理者は次の一連のアクションを実行する必要があります。

a)記録ウィザードが使用できないことを確認してください。
b) DBMSクラスターのIPアドレスが空いていることを確認します。 たとえば、ping ipまたはウィザードのネットワークインターフェイスをノックアウトします。
c) IPスレーブをマスターに変更します。
d)スレーブがマスターとして機能することを示します。 これを行うには、 pg_ctl Promo (オブジェクトでサービス特権の昇格エラーが発生しました)を使用するか、再構成トリガーファイルを構成したため、空のstartmasterファイルを作成できます。

さらに(タスクの範囲外であったもの):第二段階からスレーブ設定項目を完了することにより、倒れたマスターからスレーブを作成できます。

私の上司は冗談を言った:「 あなたはシャープを知っている-書いてください! 」 ひざの上のフィールドで2日間試してみました- 私はそれを取り、洗い流しました 。 OOPとスレッドセーフの基本については、 ここにすべてのコメントを書いてください)。

プログラムはNpgsqlライブラリを使用してDBMSを操作します。 スレーブでアーカイブを解凍し、実行するプログラムを実行します。


次に、入力してください:

-IPスレーブ;
-IPマスター;
-クラスターIP(メインIPは原則としてIPマスターと一致する必要がありますが、何でも起こります)。
-接続先のデータベースの名前( testofclusterテストテーブルが作成されます)

クラスターチェックを実行するには、[テスト]ボタンをクリックする必要があります。 プログラムは、スレーブで実行されていることを確認し、ウィザードを使用してテストテーブルに記録することができ、通常どおり複製が行われます。 ボーナスとして、recovery.conf、postgresql.conf、postgresql.auto.confファイルがスレーブに保存されるため、ウィザードをスレーブモードに移行する手順が簡単になります。

監視を開始します。ソフトウェアはウィザードの可用性を周期的にチェックし、失敗した場合、左側を記録モードにし、左側のIPをクラスターモードに変更します。

仕様:
-dotnet 4.5がインストールされている必要があります
-Windows 7 x64、Windows PostgreSQL 9.4(x64)で互換性テスト済み。
-ウィザードをオフにするための反応時間は20〜35秒です(ウィザードとメインIPの可用性の段階的なチェックが実行されます)。
-マスターへの左側の転送時間は5秒未満です(サービスの再起動は不要です)。
- 注:仮想マシン(VMware Workstation-100%)では、IPアドレスは変更されません。
-WindowsはRussifiedである必要があります。 PostgreSQLでロシア語のロケールを選択する必要があります。

ダウンロード:コンパイルされたプログラムと2つのライブラリを含むアーカイブをここからダウンロードできます。

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


All Articles