复制BriefCamPostgreSQL数据库
本节详细介绍了如何简化PostgreSQL数据库的复制。
必要条件、备注和惯例
注意
从本文档的示例中粘贴命令时,请使用Windows PowerShell,而不是命令提示符(cmd)。
如果主服务器空间足够,请在尝试创建复制副本之前执行数据库的完全备份(使用pg_dump工具)。
记下主服务器的IP地址。在本文档的稍后部分,它将称为<主要IP>。
记下辅助服务器的IP地址。在本文档的稍后部分,它将称为<次要IP>。
在PGSQL服务器中,以下三个安BriefCam装组件都需要设置为主机名或IP地址。确保它们都使用相同的方法(以确保一致性)。可以通过在下面的文件或设置中查找PostgreSQL来完成此操作
connectionString:VS伺服器:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configWeb服务:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik(RESEARCH):ODBC 64位条目(服务器字段)

建议在建立次要伺服器之前,测试系统的完整功能。务必记下您更改的参数的所有原始值。
在部署BriefCam服务器组件的所有服务器上,将hosts文件设置为指向主PostgreSQL数据库服务器–这将覆盖DNS。
在中,BriefCam Administrator Console打开“环境设置”部分,并将DB.LocalStorageAddress和VideoProductsPath设置设置为使用主机名而不是IP地址。
PostgreSQL基本备份的速度因环境设置(SSD / HDD / NIC速度)而异。根据经验,在虚拟环境中的ISCSI存储(10 Gbps链路HDD阵列)和1 Gbps网络NIC (vmxnet3)上,执行包含90 GBBriefCam数据的PostgreSQL数据库的基本备份大约需要40分钟。
考虑在实际环境中测试速度,以便能够估计基本备份需要多长时间才能正确设置副本创建过程的时隙。
使用目
PostgreSQL_Data录的实际路径。预设BriefCam值为。C:\PostgreSQL_Data.但是,这可能会因不同的设置而异(在本文档稍后部分将使用默认BriefCam路径)。使用实际路
pgsql.exe径。预设BriefCam值为(C:\PostgreSQL\bin\psql.exe本主题稍后会使用预设路BriefCam径)。
主伺服器上的步骤
连接到主PostgreSQL服务器sql shell,并通过执行以下命令验证配置文件和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通过在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"))通过执行以下命令验证是否创建了备份文件:
dir C:/PostgreSQL_Data/*.conf.*预期输出为:
PS C:\Users\Administrator> dir C:/PostgreSQL_Data/*.conf.*
目录:C:\PostgreSQL_Data
模式LastWriteTime长度名称
---- ------------- ------ ----
-a---- 2021/10/11 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服务器的SQLshell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres执行下列命令(在上一步中打开的SQLshell中):
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文件所做的更改,如下所示:通过PowerShell控制台使用以下命令连接到主PostgreSQL服务器的SQLshell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres通过SQLshell使用以下命令打印出添加到PostgreSQL会议文件中的自定义配置:
\pset pager off SELECT pg_read_file('postgresql.conf');验证您现在可以在输出底部看到新增到
postgresql.conf档案的行。
验证配置文件是否包含您对该
pg_hba.conf文件所做的更改,如下所示:通过执行以下命令连接到主PostgreSQL服务器的SQLShell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres
\pset pager off
选择pg_read_file('pg_hba.conf');
验证您现在可以在输出底部看到新增到
pg_hba.conf档案的行。
在次要伺服器上的步骤
安装BriefCamPostgreSQL。
在次要PostgreSQL伺服器上,以管理员身分在PowerShell中执行下列项目,以停止BriefCamPostgreSQL服务:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"清理数据目录,如下所示:
重新命名资料
PostgreSQL_Data夹。创建一个名为“
PostgreSQL_Data”的新文件夹,并在文件夹的“权限”选项卡中将“完全控制”添加到“所有人”。
按如下所示从主服务器执行到辅助服务器的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服务器的SQLshell:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres通过在SQLshell中运行以下命令检查延迟值(
write_lag值必须以00:00:00开始):SELECT write_lag,client_addr FROM pg_stat_replication ;以下为预期输出范例:
postgres=#从pg_stat_replication中选择write_lag,client_addr ;
写入延迟 | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1列)
postgres=#
注意
此检查每天至少需要执行一次。
启动次要伺服器以作为主要伺服器
本节介绍在主服务器出现故障且需要恢复/迁移的情况下,作为PostgreSQL数据库的主实例激活辅助服务器的过程。
将所有BC服务器中的hosts文件更改为反映<次要IP>而不是<主要IP>。
通过在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脚本
创建包含db凭据的
%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\。在以下位置创建备份脚本:
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("yyymdthmmssz")。tar
c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$((get-date)。ToUniversalTime()。ToString("yyymdthmmssz")。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任务计划程序,如下所示:
将程序/脚本字段设置为以下路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
在“新增引数”栏位中,设定下列项目:
E:\PostgresBackupScripts\backup.ps1
相应地设置触发和计时。

无论使用者是否已登入并储存密码,设定工作执行即可。

在测试伺服器上,检查档案是否可还原。这个测试应该成为你日常工作的一部分。
以下是restore命令的示例:
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统是否正常工作。
执行步骤,在用作主服务器的服务器上创建复制副本。