BriefCam Репликация базы данных PostgreSQL
В этом разделе подробно описывается, как оптимизировать репликацию базы данных PostgreSQL.
Предварительные условия, примечания и соглашения
Примечание
При вставке команд из примеров в этом документе используйте Windows PowerShell, а не командную строку (cmd).
Если места на основном сервере достаточно, выполните полное резервное копирование базы данных (с помощью инструмента pg_dump), прежде чем пытаться создать реплику.
Запишите IP-адрес основного сервера. Далее в этом документе он будет называться <primaryIP>.
Запишите IP-адрес вспомогательного сервера. Далее в этом документе он будет называться <secondaryIP>.
BriefCam В сервере PGSQL для следующих трех компонентов установки необходимо задать имя хоста или IP-адрес. Убедитесь, что все они используют один и тот же метод (чтобы обеспечить согласованность).
connectionStringДля этого найдите PostgreSQL в следующих файлах или параметрах:Сервер VS:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configВеб-службы:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik (RESEARCH): 64-разрядные записи ODBC (поле "Сервер")

Рекомендуется протестировать все функции систем перед созданием дополнительного сервера. Обратите внимание на все исходные значения изменяемых параметров.
На всех серверах, где развернуты компоненты сервера BriefCam, настройте файл hosts так, чтобы он указывал на основной сервер базы данных PostgreSQL — это переопределит DNS.
BriefCam Administrator ConsoleВ откройте раздел "Параметры среды" и настройте параметры DB.LocalStorageAddress и VideoProductsPath так, чтобы они использовали имена хостов, а не IP-адреса.
Скорость PostgreSQL base_backup значительно варьируется в зависимости от настроек среды (скорость SSD/HDD/NIC). BriefCam Как правило, на хранилище ISCSI (10 Гбит/с связывает HDD-массив) и сетевом адаптере 1 Гбит/с (vmxnet3) в виртуальной среде требуется около 40 минут для резервного копирования базы данных PostgreSQL, содержащей 90 ГБ данных.
Проверьте скорость в реальной среде, чтобы оценить, сколько времени потребуется для резервного копирования базы, чтобы правильно задать интервал времени для процесса создания реплики.
PostgreSQL_DataИспользуйте фактический путь к каталогу. BriefCamC:\PostgreSQL_DataЗначение по умолчанию ― . BriefCam Однако это может отличаться в разных настройках (в дальнейшем в этом документе будет использоваться путь по умолчанию).pgsql.exeИспользуйте фактический путь к файлу. BriefCamC:\PostgreSQL\bin\psql.exeBriefCam По умолчанию используется путь (далее в этом разделе будет использоваться путь по умолчанию).
Действия на основном сервере
Подключитесь к основной оболочке SQL сервера PostgreSQL и проверьте местонахождение файлов конфигурации и адаптера главной шины, выполнив следующие команды:
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.confconfighbaСоздайте резервные копии исходных файлов и, выполнив следующие команды в PowerShell: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---- 10/11/2021 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 11/10/2021 11:25 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Создайте роль/пользователя для репликации и задайте для него пароль (не используйте пароль, указанный в примерах команд).
Подключитесь к оболочке SQL основного сервера PostgreSQL через консоль PowerShell с помощью команды:
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Перезапустите службу BriefCamPostgreSQL на основном сервере PostgreSQL, открыв PowerShell от имени администратора и выполнив следующие команды:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"postgres.confУбедитесь, что файлы конфигурации содержат следующие изменения, внесенные в файл конфигурации:Подключитесь к оболочке SQL основного сервера PostgreSQL через консоль PowerShell с помощью команды:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresРаспечатайте пользовательские конфигурации, добавленные в файл конфигурации PostgreSQL, с помощью команд ниже через оболочку SQL:
\pset pager off SELECT pg_read_file('postgresql.conf');postgresql.confУбедитесь, что теперь вы видите строки, добавленные в файл, в нижней части вывода.
pg_hba.confУбедитесь, что файлы конфигурации содержат следующие изменения, внесенные в файл конфигурации:Подключитесь к оболочке SQL основного сервера PostgreSQL, выполнив следующие команды:
C:\PostgreSQL\bin\psql.exe -Адбадмин postgres
\pset pager выкл.
SELECT_pg_read_file('pg_hba.conf');
pg_hba.confУбедитесь, что теперь вы видите строки, добавленные в файл, в нижней части вывода.
Действия на дополнительном сервере
Установите BriefCamPostgreSQL.
На вспомогательном сервере PostgreSQL остановите службу BriefCamPostgreSQL, выполнив следующие действия в PowerShell от имени администратора:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"Очистите каталог данных следующим образом:
PostgreSQL_DataПереименовать папку <ph>.PostgreSQL_DataСоздайте новую папку с именем и на вкладке Разрешения папки добавьте Полное управление в Everyone.
Выполните резервное копирование базы данных PostgreSQL с основного на вспомогательный сервер следующим образом:
Выполните следующую команду в PowerShell от имени администратора:
c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1BriefCam Рекомендуется остановить все службы на всех серверах во время потенциально длительного резервного копирования базы данных. В зависимости от размера набора данных этот шаг можно выполнить без остановки всех служб.
На вспомогательном сервере PostgreSQL запустите службу BriefCamPostgreSQL, выполнив следующие команды в PowerShell от имени администратора:
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
Проверка операции репликации
Подключитесь к оболочке SQL основного сервера PostgreSQL через консоль PowerShell с помощью команды:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgreswrite_lagПроверьте значение задержки, выполнив следующую команду в оболочке SQL (значение должно начинаться с 00:00:00):SELECT write_lag,client_addr FROM pg_stat_replication ;Пример ожидаемого результата:
postgres=# ВЫБЕРИТЕ write_lag, client_addr ИЗ pg_stat_replication;
write_lag | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1 строка)
postgres=#
Примечание
Эту проверку необходимо выполнять не реже одного раза в день.
Активация дополнительного сервера в качестве основного сервера
В этом разделе описана процедура активации вспомогательного сервера в качестве основного экземпляра базы данных PostgreSQL в случаях, когда основной сервер неисправен и требуется восстановление/миграция.
Измените файл hosts на всех серверах BC, чтобы в нем отображался <secondaryIP> вместо <primaryIP>.
Проверьте статус и сделайте вспомогательный сервер PGSQL основным сервером, выполнив следующие команды в консоли PowerShell (обязательно запустите 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
Создать периодическую резервную копию на дополнительном сервере
Сценарии PG_DUMP в планировщике задач Windows
%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")).tarE:\PostgresBackups\Создайте папку для файлов резервной копии, например: .E:\PostgresBackupScripts\Создайте папку для файлов сценариев резервного копирования, например: .E:\PostgresBackupScripts\backup.ps1Создайте сценарий резервного копирования по адресу: с помощью трех команд, как показано ниже:c:\PostgreSQL\bin\pg_dump.exe -Ft -Udbadmin -d postgres -f:\PostgresРезервные копии\db_postgres-$(((get-date).ToUniversalTime()).ToString("ггггМдМдТНммссЗ").tar
c:\PostgreSQL\bin\pg_dump.exe -Ft -Udbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$(((get-date).ToUniversalTime()).ToString("ггггМдТГММССз").tar
#ls -file E:\PostgresBackups\db*.tar | где {(get-date) - $_.creationtime -gt 15.} | Remove-Item –Verbose
*Третью команду выше следует скорректировать в соответствии с требуемым периодом хранения резервной копии, удалив знак "#" в начале строки и изменив число 15, поскольку оно представляет количество дней назад. Например, если вы хотите настроить сценарий на удаление всех файлов старше 7 дней, вам нужно будет изменить номер с 15 на 7.
Проверьте создание резервной копии и удаление старых файлов, установив -gt в 0 и выполните следующую команду в командной строке Windows:
powershell.exe e:\PostgresBackupScripts\backup.ps1
Это действие удалит все созданные файлы.
Отрегулируйте период хранения резервных копий, как указано в конце шага 4 выше.
Добавьте сценарий резервного копирования в планировщик задач Windows следующим образом:
Задайте следующий путь в поле Программа/сценарий:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
В поле Добавить аргументы задайте следующее:
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 Убедитесь в том, что система работает надлежащим образом.
Выполните действия по созданию реплики на сервере, который использовался в качестве основного сервера.