2

現在、Windows 2012 サーバーでアプリケーションを制御できるように ac# アプリをセットアップしています。

建築:

マスター サーバー - Windows サービスから読み取り/書き込みデータベースとして実行される Postgres x64 9.3。ホット スタンバイ モードとレプリケーション スロットを備えています。

スレーブ サーバー - レプリケーション スロットを介して読み取り専用のホットスタンバイ サーバーとして Windows サービスから実行される Postgres x64 9.3。

次のコードを使用してサービスを停止する予定です。

service = new ServiceController("postgresql-x64-9.4");
                        try
                        {
                            TimeSpan timeout = TimeSpan.FromMilliseconds(5000);

                            service.Stop();
                            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
                            log.writeLog(data, "success", "Postgres Stopped");
                        }
                        catch (Exception e)
                        {
                            log.writeLog(data, "ERROR", e.Message + " - " + e.InnerException);
                            msg = Encoding.ASCII.GetBytes("ERROR");
                            break;
                        }

ただし、両方のデータベースの整合性に関してこれが安全かどうか疑問に思っていました。

pg_ctlにはシャットダウンモードがあり、「スマート」モードはアクティブなプロセスを待機し、データベースを停止する前に接続などを閉じます。Windowsサービスを停止しても同じですか?はい、明らかにこれを達成するために pg_ctl を使用できますが、他の何よりも興味を持っています。

アクティブなレプリケーションに関して軽減する必要があるリスクはありますか? または、サーバーが同期されるまでサービスは存続しますか? 「停止」のタイミングは、データベースの書き込み負荷が高くない時点で行われるため、基本的に同期している必要があります。「停止」コードを開始する前に、これをテストすることもできます。

これは、マスター サーバーが停止している間、レプリケートされたスレーブを「ライブ」のままにし、読み取り専用スレーブ モードのままにすることを目的としています。

前もって感謝します

4

0 に答える 0