Skip to main content

BriefCamインストールガイド

PostgreSQLデータベースBriefCamの複製

Last Updated: 16 minute read
バージョン2025r1
言語日本語

このセクションでは、PostgreSQLデータベースの複製を合理化する方法について詳しく説明します。

前提条件、注意事項、および規則

注記

このドキュメントのサンプルのコマンドを貼り付けるときは、コマンド プロンプト (cmd)ではなくWindows PowerShellを使用してください。

  1. プライマリサーバーのスペースが十分である場合は、レプリカの作成を試みる前に(pg_dumpツールを使用して)データベースのフルバックアップを実行します。

  2. プライマリサーバーのIPアドレスをメモします。このドキュメントの後半では、<primaryIP>と表記されます。

  3. セカンダリサーバーのIPアドレスをメモしてください。このドキュメントの後半では、<secondaryIP>と表記されます。

  4. PGSQLサーバーでは、次の3つのインストールコンポーネントをすべてBriefCam、ホスト名またはIPアドレスに設定する必要があります。それらがすべて同じ方法を使用していることを確認してください(一貫性を確保するため)。これを行うには、次のファイルまたは設定でPostgreSQLconnectionStringを探します。

    • VSサーバー: C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.config

    • Webサービス: C:\Program Files\BriefCam\WebServices\ProWebApi\Web.config

    • Qlik(RESEARCH): ODBC 64ビットエントリ(サーバーフィールド)

      ODBC Driver Setup.png
  5. セカンダリサーバーを作成する前に、システムの全機能をテストすることをお勧めします。変更するパラメータの元の値をすべてメモしてください。

  6. BriefCamサーバーコンポーネントが展開されているすべてのサーバーで、プライマリPostgreSQLデータベースサーバーを指すようにhostsファイルを設定します。これによりDNSが上書きされます。

  7. で、Environment Settings(環境設定)セクションBriefCam Administrator Consoleを開き、DB.LocalStorageAddressおよびVideoProductsPathの設定をIPアドレスではなくホスト名を使用するように設定します。

  8. PostgreSQL base_backupの速度は、環境設定(SSD/HDD/NIC速度)によって大幅に異なります。原則として、仮想環境のISCSIストレージ(10 GbpsリンクHDDアレイ)と1 GbpsネットワークNIC(vmxnet3)では、90GBのデータを含むPostgreSQLデータベースのベースバックアップを実行するのに約40分かかります。この場合、バックアップは通常、100GBのBriefCamデータを使用します。

    レプリカ作成プロセスのタイムスロットを適切に設定するためにベースバックアップにかかる時間を見積もることができるように、実際の環境で速度をテストすることを検討してください。

  9. ディレクトリの実際のパスを使用しPostgreSQL_Dataます。デフォルトBriefCamではC:\PostgreSQL_Dataです。ただし、これは設定によって異なる場合があります(このドキュメントの後半ではデフォルトBriefCam パスが使用されます)。

  10. 実際のpgsql.exeパスを使用します。デフォルトはBriefCam、C:\PostgreSQL\bin\psql.exeです(このトピックの後半では、デフォルトのBriefCamパスが使用されます)。

プライマリサーバーでの手順

  1. プライマリ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.conf

  2. PowerShellで次のコマンドを実行して、元の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"))

  3. 次のコマンドを実行して、バックアップファイルが作成されたことを確認します。

    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

  4. ファイルにパラメータを追加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

  5. レプリケーション用の役割/ユーザーを作成し、パスワードを設定します(サンプルコマンドで指定されたパスワードは使用しないでください)。

    1. 次のコマンドを使用して、PowerShellコンソールを介してプライマリPostgreSQLサーバーのSQLシェルに接続します。

      C:\PostgreSQL\bin\psql.exe -U dbadmin postgres

    2. (前のステップで開いたSQLシェルで)次のコマンドを実行します。

      CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'replQwerty123';

  6. ファイルにパラメータを追加pg_hba.confします。これを行うには、テキストエディタでファイルを開き、ファイルに次の行を追加します(行の下に#replication privilege)。

    # replication privilege. host replication repl_user <secondaryIP>/32 md5

  7. 管理者としてPowerShellを開き、次のコマンドを実行して、プライマリPostgreSQLサーバーでBriefCamPostgreSQLサービスを再起動します。

    net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"

  8. 次の手順で、設定ファイルに加えた変更が含まれていることを確認しpostgres.confます。

    1. 次のコマンドを使用して、PowerShellコンソールを介してプライマリPostgreSQLサーバーのSQLシェルに接続します。

      C:\PostgreSQL\bin\psql.exe -U dbadmin postgres

    2. SQLシェルを介して以下のコマンドを使用して、PostgreSQL confファイルに追加されたカスタム構成を出力します。

      \pset pager off SELECT pg_read_file('postgresql.conf');

    3. ファイルに追加された行が出力の下部に表示されていることをpostgresql.conf確認します。

      Replicating postgresql conf.png
  9. 次の手順で、設定ファイルに加えた変更が含まれていることを確認しpg_hba.confます。

    1. 次のコマンドを実行して、プライマリPostgreSQLサーバーのSQLシェルに接続します。

      C:\PostgreSQL\bin\psql.exe -U dbadmin postgres

      \pset pager off

      SELECT pg_read_file('pg_hba.conf');

    2. ファイルに追加された行が出力の下部に表示されていることをpg_hba.conf確認します。

      Replicating pg_hba conf.png

セカンダリサーバーでの手順

  1. BriefCamPostgreSQLをインストールします。

  2. セカンダリPostgreSQLサーバーで、管理者としてPowerShellで次を実行して、BriefCamPostgreSQLサービスを停止します。

    net stop "BriefCamPostgreSQL - PostgreSQL Server 10"

  3. 次のようにデータディレクトリをクリーンアップします。

    1. フォPostgreSQL_Dataルダーの名前を変更します。

    2. という名前の新しいフォルダーを作成し、フォルダーの権限タブPostgreSQL_DataでEveryoneに完全コントロールを追加します。

      Replicating PostgreSQL properties.png
  4. 次の手順で、プライマリサーバーからセカンダリサーバーへのPostgreSQLベースバックアップを実行します。

    1. 管理者としてPowerShellで次のコマンドを実行します。

      c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1

    2. データベースのバックアップが長くなる可能性がある間は、すべてのサーバーのすべてのサービスを停止することをお勧めします。BriefCam データベースのバックアップ中は、すべてのサーバーのすべてのサービスを停止することをお勧めします。データセットのサイズによっては、すべてのサービスを停止せずにこの手順を実行することができます。

  5. セカンダリPostgreSQLサーバーで、管理者としてPowerShellで次のコマンドを実行して、BriefCamPostgreSQLサービスを開始します。

    net start "BriefCamPostgreSQL - PostgreSQL Server 10"

複製操作の確認

  1. 次のコマンドを使用して、PowerShellコンソールを介してプライマリPostgreSQLサーバーのSQLシェルに接続します。

    C:\PostgreSQL\bin\psql.exe -U dbadmin postgres

  2. SQLシェルで次のコマンドを実行して、ラグ値を確認します(値はwrite_lag00: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データベースのプライマリインスタンスとしてアクティベートする手順について説明します。

  1. すべてのBCサーバーのhostsファイルを、<primaryIP>ではなく<secondaryIP>を反映するように変更します。

  2. 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スクリプト
  1. データベースの資格情報を含むファイルを作成します%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

  2. バックアップファイル用のフォルダーを作成します。例: E:\PostgresBackups\。

  3. バックアップスクリプトファイル用のフォルダーを作成します。例: E:\PostgresBackupScripts\ 。

  4. 次の場所にバックアップスクリプトを作成しますE:\PostgresBackupScripts\backup.ps1。次の3つのコマンドを使用します。

    • 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に変更する必要があります。

  5. バックアップの作成と古いファイルの削除をテストするには、-gtを0に設定し、Windows cmdで次のコマンドを実行します。

    powershell.exe e:\PostgresBackupScripts\backup.ps1

    Replicating PostgresBackupScripts.png

    これにより、作成されたすべてのファイルが削除されます。

  6. 上記の手順4の下部で説明したように、バックアップの保存期間を調整します。

  7. 次の手順で、バックアップスクリプトをWindowsタスクスケジューラに追加します。

    1. Program/scriptフィールドを次のパスに設定します。

      C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

    2. Add arguments(引数の追加)フィールドで、次の値を設定します。 E:\PostgresBackupScripts\backup.ps1

      Replicating add arguments.png
  8. それに応じてトリガーとタイミングを設定します。

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

    Replicating task scheduler.png
  10. テストサーバーで、ファイルが復元可能かどうかを確認します。このテストは、進行中のルーチンの一部である必要があります。

復元コマンドの例を次に示します。

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” 

修正後にプライマリサーバーに戻す

プライマリサーバーに問題があったためにセカンダリサーバーを使用していた場合、このセクションでは、問題が修正された後にプライマリサーバーに戻す方法について説明します。

注記

以下のプロセスの詳細は、プライマリサーバーで発生した障害の種類によって異なる場合があります。最も深刻なケース(プライマリサーバーの完全なクラッシュ)を考慮して、以下の手順には新しいインストールが含まれています。

  1. オペレーティングシステムを最初からインストールします。

  2. 現在のプライマリサーバーのプライマリサーバーセクションの手順を実行します。

  3. 再インストールされたサーバーが技術的には「セカンダリ」インスタンスになったことを考慮し、サーバーで以下のセクションで説明されているすべてのアクションを実行します。

  4. プライマリサーバーとして使用されていたサーバーでPostgreSQLサービスを停止します。

  5. システムが正しく動作することを確認しBriefCamます。

  6. プライマリサーバーとして使用されたサーバーでレプリカを作成する手順を実行します。