Репликация базы данных PostgreSQLBriefCam
В этом разделе подробно описывается, как оптимизировать репликацию базы данных PostgreSQL.
Предварительные условия, примечания и соглашения
Примечание
При вставке команд из примеров в этом документе используйте Windows PowerShell, а не командную строку (cmd).
Если места на основном сервере достаточно, выполните полное резервное копирование базы данных (с помощью инструмента pg_dump), прежде чем пытаться создать реплику.
Запишите IP-адрес основного сервера. Далее в этом документе он будет называться <primaryIP>.
Запишите IP-адрес вспомогательного сервера. Далее в этом документе он будет называться <secondaryIP>.
В сервере PGSQL для следующих трех компонентов BriefCamустановки необходимо задать имя хоста или IP-адрес. Убедитесь, что все они используют один и тот же метод (чтобы обеспечить согласованность). Для этого найдите PostgreSQL
connectionStringв следующих файлах или параметрах:Сервер 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.
В откройте раздел " Параметры среды" и настройте параметрыDB. LocalStorageAddress и VideoProductsPath такBriefCam Administrator Console, чтобы они использовали имена хостов, а не IP-адреса.
Скорость PostgreSQL base_backup значительно варьируется в зависимости от настроек среды (скорость SSD/HDD/NIC). Как правило, на хранилище ISCSI (10 Гбит/с связывает HDD-массив) и сетевом адаптере 1 Гбит/с (vmxnet3) в виртуальной среде требуется около 40 минут для резервного копирования базы данных PostgreSQL, содержащей 90 ГБ BriefCamданных.
Проверьте скорость в реальной среде, чтобы оценить, сколько времени потребуется для резервного копирования базы, чтобы правильно задать интервал времени для процесса создания реплики.
Используйте фактический путь к
PostgreSQL_Dataкаталогу. Значение по BriefCamумолчанию ―C:\PostgreSQL_Data. Однако это может отличаться в разных настройках (в дальнейшем в этом документе будет использоваться BriefCamпуть по умолчанию).Используйте фактический
pgsql.exeпуть к файлу. По BriefCamумолчанию используется путьC:\PostgreSQL\bin\psql.exe(далее в этом разделе будет использоваться BriefCamпуть по умолчанию).
Действия на основном сервере
Подключитесь к основной оболочке 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.confСоздайте резервные копии исходных
hbaфайловconfigи, выполнив следующие команды в 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=standby1Рекомендуется остановить все BriefCamслужбы на всех серверах во время потенциально длительного резервного копирования базы данных. В зависимости от размера набора данных этот шаг можно выполнить без остановки всех служб.
На вспомогательном сервере PostgreSQL запустите службу BriefCamPostgreSQL, выполнив следующие команды в PowerShell от имени администратора:
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
Проверка операции репликации
Подключитесь к оболочке SQL основного сервера PostgreSQL через консоль PowerShell с помощью команды:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresПроверьте значение задержки, выполнив следующую команду в оболочке SQL (
write_lagзначение должно начинаться с 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")).tarСоздайте папку для файлов резервной копии, например: .
E:\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система работает надлежащим образом.
Выполните действия по созданию реплики на сервере, который использовался в качестве основного сервера.