BriefCam PostgreSQLデータベースの複製
このセクションでは、PostgreSQLデータベースの複製を合理化する方法について詳しく説明します。
前提条件、注意事項、および規則
注記
このドキュメントのサンプルのコマンドを貼り付けるときは、コマンド プロンプト (cmd)ではなくWindows PowerShellを使用してください。
プライマリサーバーのスペースが十分である場合は、レプリカの作成を試みる前に(pg_dumpツールを使用して)データベースのフルバックアップを実行します。
プライマリサーバーのIPアドレスをメモします。このドキュメントの後半では、<primaryIP>と表記されます。
セカンダリサーバーのIPアドレスをメモしてください。このドキュメントの後半では、<secondaryIP>と表記されます。
PGSQLサーバーでは、次の3つのBriefCamインストールコンポーネントをすべて、ホスト名またはIPアドレスに設定する必要があります。それらがすべて同じ方法を使用していることを確認してください(一貫性を確保するため)。 これを行うには、次のファイルまたは設定
connectionStringでPostgreSQLを探します。VSサーバー:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configWebサービス:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik(RESEARCH): ODBC 64ビットエントリ(サーバーフィールド)

セカンダリサーバーを作成する前に、システムの全機能をテストすることをお勧めします。変更するパラメータの元の値をすべてメモしてください。
BriefCamサーバーコンポーネントが展開されているすべてのサーバーで、プライマリPostgreSQLデータベースサーバーを指すようにhostsファイルを設定します。これによりDNSが上書きされます。
BriefCam Administrator Consoleで、Environment Settings(環境設定)セクションを開き、IPアドレスではなくホスト名を使用するようにDB.LocalStorageAddressおよびVideoProductsPath設定を設定します。
PostgreSQL base_backupの速度は、環境設定(SSD/HDD/NIC速度)によって大幅に異なります。 原則として、仮想環境のISCSIストレージ(10 GbpsリンクHDDアレイ)と1 GbpsネットワークNIC(vmxnet3)では、90GBのデータを含むPostgreSQLデータベースのベースバックアップを実行するのに約40分かかります。この場合、バックアップは通常、100GBのBriefCamデータを使用します。
レプリカ作成プロセスのタイムスロットを適切に設定するためにベースバックアップにかかる時間を見積もることができるように、実際の環境で速度をテストすることを検討してください。
PostgreSQL_Dataディレクトリの実際のパスを使用します。BriefCamデフォルトではですC:\PostgreSQL_Data。ただし、これは設定によって異なる場合があります(このドキュメントの後半では、デフォルトのBriefCamパスが使用されます)。実際の
pgsql.exeパスを使用します。BriefCamデフォルトは、ですC:\PostgreSQL\bin\psql.exe(このトピックの後半では、デフォルトのBriefCamパスが使用されます)。
プライマリサーバーでの手順
プライマリPostgreSQLサーバーのSQLシェルに接続し、次のコマンドを実行してconfigファイルとhbaファイルの場所を確認します。
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres SHOW config_file; SHOW hba_file;予想される出力の例を次に示します(
PostgreSQL_Dataフォルダーの場所に基づく)。C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/pg_hba.confPowerShellで次のコマンドを実行して、元の
configファイルとhbaファイルをバックアップします。copy C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/postgresql.conf.$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))copy C:/PostgreSQL_Data/pg_hba.conf C:/PostgreSQL_Data/pg_hba.conf.$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))次のコマンドを実行して、バックアップファイルが作成されたことを確認します。
dir C:/PostgreSQL_Data/*.conf.*期待される出力は次のとおりです。
PS C:\Users\Administrator> dir C:/PostgreSQL_Data/*.conf.*
ディレクトリ: C:\PostgreSQL_Data
モード LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/10/2021 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 11/10/2021 11:25 AM 23798 postgresql.conf.20211117T100344Z
postgres.confファイルにパラメータを追加します。これを行うには、テキストエディタでファイルを開き、ファイルの末尾(Customized Optionsセクションのすぐ下)に次の行を追加します。wal_level = replica hot_standby = on hot_standby_feedback = on full_page_writes = on max_wal_senders = 6 max_replication_slots = 6レプリケーション用の役割/ユーザーを作成し、パスワードを設定します(サンプルコマンドで指定されたパスワードは使用しないでください)。
次のコマンドを使用して、PowerShellコンソールを介してプライマリPostgreSQLサーバーのSQLシェルに接続します。
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres(前のステップで開いたSQLシェルで)次のコマンドを実行します。
CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'replQwerty123';
pg_hba.confファイルにパラメータを追加します。これを行うには、テキストエディタでファイルを開き、ファイルに次の行を追加します(#replication privilege行の下に)。# replication privilege. host replication repl_user <secondaryIP>/32 md5管理者としてPowerShellを開き、次のコマンドを実行して、プライマリPostgreSQLサーバーでBriefCamPostgreSQLサービスを再起動します。
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"次の手順で、
postgres.confファイルに加えた変更がconfig files(構成ファイル)に含まれていることを確認します。次のコマンドを使用して、PowerShellコンソールを介してプライマリPostgreSQLサーバーのSQLシェルに接続します。
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresSQLシェルを介して以下のコマンドを使用して、PostgreSQL confファイルに追加されたカスタム構成を出力します。
\pset pager off SELECT pg_read_file('postgresql.conf');postgresql.confファイルに追加された行が出力の下部に表示されていることを確認します。
次の手順で、
pg_hba.confファイルに加えた変更がconfig files(構成ファイル)に含まれていることを確認します。次のコマンドを実行して、プライマリPostgreSQLサーバーのSQLシェルに接続します。
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres
\pset pager off
SELECT pg_read_file('pg_hba.conf');
pg_hba.confファイルに追加された行が出力の下部に表示されていることを確認します。
セカンダリサーバーでの手順
BriefCamPostgreSQLをインストールします。
セカンダリPostgreSQLサーバーで、PowerShellで管理者として以下を実行して、BriefCamPostgreSQLサービスを停止します。
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"次のようにデータディレクトリをクリーンアップします。
PostgreSQL_Dataフォルダーの名前を変更します。PostgreSQL_Dataという名前の新しいフォルダーを作成し、フォルダーのPermissions(アクセス許可)タブに「Full control to Everyone(全員に完全コントロール)」を追加します。
次の手順で、プライマリサーバーからセカンダリサーバーへのPostgreSQLベースバックアップを実行します。
管理者としてPowerShellで次のコマンドを実行します。
c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1データベースのバックアップが長くなる可能性がある間は、すべてのサーバーのすべてのBriefCamサービスを停止することをお勧めします。 データベースのバックアップ中は、すべてのサーバーのすべてのサービスを停止することをお勧めします。データセットのサイズによっては、すべてのサービスを停止せずにこの手順を実行することができます。
セカンダリPostgreSQLサーバーで、管理者としてPowerShellで次のコマンドを実行して、BriefCamPostgreSQLサービスを開始します。
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
複製操作の確認
次のコマンドを使用して、PowerShellコンソールを介してプライマリPostgreSQLサーバーのSQLシェルに接続します。
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresSQLシェルで次のコマンドを実行して、ラグ値を確認します(
write_lag値は00:00:00で始まる必要があります)。SELECT write_lag,client_addr FROM pg_stat_replication ;期待される出力の例を次に示します。
postgres=# SELECT write_lag,client_addr FROM pg_stat_replication ;
write_lag | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1行)
postgres=#
注記
このチェックは、少なくとも1日に1回実行する必要があります。
プライマリサーバーとして機能するようにセカンダリサーバーをアクティベートする
このセクションでは、プライマリに障害があり、復旧/移行が必要な場合に、セカンダリサーバーをPostgreSQLデータベースのプライマリインスタンスとしてアクティベートする手順について説明します。
すべてのBCサーバーのhostsファイルを、<primaryIP>ではなく<secondaryIP>を反映するように変更します。
PowerShellコンソールで次のコマンドを実行して、ステータスを確認し、セカンダリサーバーPGSQLをプライマリサーバーに昇格させます(必ず管理者としてPowerShellを実行し、pg_ctl.exeファイルとPostgreSQL_Dataフォルダーへのパスをそれぞれ編集してください)。
c:\PostgreSQL\bin\pg_ctl.exe status -D ”C:\PostgreSQL_Data”
サンプル出力:
pg_ctl: server is running (PID: 5672) C:\PostgreSQL\bin\postgres.exe "-D" "C:\PostgreSQL_Data"c:\PostgreSQL\bin\pg_ctl.exe promote -D ”C:\PostgreSQL_Data”
サンプル出力:
waiting for server to promote.... done server promoted
セカンダリサーバーで定期的なバックアップを作成する
WindowsタスクスケジューラのPG_DUMPスクリプト
データベースの資格情報を含む
%APPDATA%\postgresql\pgpass.confファイルを作成します(*:5432:*:dbadmin:Qwerty123)。 詳細については、https://www.postgresql.org/docs/10/libpq-pgpass.htmlおよびhttps://www.postgresql.org/docs/10/libpq-envars.html(外部リンク)をご参照ください。上記が機能しない場合は、スクリプトのパスワードを実行ラインで指定できます。
$env:PGPASSWORD='Qwerty123' ;& c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tarバックアップファイル用のフォルダーを作成します。例:
E:\PostgresBackups\。バックアップスクリプトファイル用のフォルダを作成します(例:
E:\PostgresBackupScripts\)。次の3つのコマンドを使用して、
E:\PostgresBackupScripts\backup.ps1にバックアップスクリプトを作成します。c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d postgres -f e:\PostgresBackups\db_postgres-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tar
c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tar
#ls -file E:\PostgresBackups\db*.tar | where {(get-date) - $_.creationtime -gt 15.} | Remove-Item -Verbose
* 上記の3番目のコマンドは、行頭の「#」記号を削除し、遡った日数を表している数字15を変更することで、必要なバックアップ保持期間に応じて調整する必要があります。たとえば、7日より古いすべてのファイルを削除するようにスクリプトを設定する場合は、15を7に変更する必要があります。
バックアップの作成と古いファイルの削除をテストするには、-gtを0に設定し、Windows cmdで次のコマンドを実行します。
powershell.exe e:\PostgresBackupScripts\backup.ps1
これにより、作成されたすべてのファイルが削除されます。
上記の手順4の下部で説明したように、バックアップの保存期間を調整します。
次の手順で、バックアップスクリプトをWindowsタスクスケジューラに追加します。
Program/scriptフィールドを次のパスに設定します。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Add arguments(引数の追加)フィールドで、次の値を設定します:
E:\PostgresBackupScripts\backup.ps1
それに応じてトリガーとタイミングを設定します。

ユーザーがログインしているかどうかに関係なく実行するようにタスクを設定し、パスワードを保存します。

テストサーバーで、ファイルが復元可能かどうかを確認します。このテストは、進行中のルーチンの一部である必要があります。
復元コマンドの例を次に示します。
C:\PostgreSQL\bin\pg_restore.exe -c -v -U dbadmin -d briefcam -F t e:\PostgresBackups\db_briefcam-20211122T122052Z.tar
パラメータはドロップと作成を-c実行します。その他のオプションについては、以下を参照してください。
“C:\PostgreSQL\bin\pg_restore.exe --help”
修正後にプライマリサーバーに戻す
プライマリサーバーに問題があったためにセカンダリサーバーを使用していた場合、このセクションでは、問題が修正された後にプライマリサーバーに戻す方法について説明します。
注記
以下のプロセスの詳細は、プライマリサーバーで発生した障害の種類によって異なる場合があります。最も深刻なケース(プライマリサーバーの完全なクラッシュ)を考慮して、以下の手順には新しいインストールが含まれています。
オペレーティングシステムを最初からインストールします。
現在のプライマリサーバーで「プライマリサーバーでの手順」セクションにある手順を実行します。
再インストールされたサーバーが技術的には「セカンダリ」インスタンスになったことを考慮し、サーバーで以下のセクションで説明されているすべてのアクションを実行します。
プライマリサーバーとして使用されていたサーバーでPostgreSQLサービスを停止します。
BriefCamシステムが正しく動作することを確認します。
プライマリサーバーとして使用されたサーバーでレプリカを作成する手順を実行します。