Replicar la base de datos PostgreSQLBriefCam
Esta sección detalla cómo optimizar la replicación de la base de datos PostgreSQL.
Requisitos previos, notas y convenciones
Nota
Use Windows PowerShell y no el símbolo del sistema (cmd) mientras pega comandos de los ejemplos de este documento.
Si el espacio del servidor primario es suficiente, realice una copia de seguridad completa de la base de datos (utilizando la herramienta pg_dump) antes de intentar crear la réplica.
Anote la dirección IP del servidor primario. Más adelante en este documento se hará referencia a él como <primaryIP>.
Anote la dirección IP del servidor secundario. Más adelante en este documento se hará referencia a él como <secondaryIP>.
En el servidor PGSQL, los siguientes tres componentes de BriefCaminstalación deben establecerse en el nombre de host o la dirección IP. Asegúrese de que todos utilizan el mismo método (para garantizar la coherencia). Para ello, busque el PostgreSQL
connectionStringen los siguientes archivos o ajustes:Servidor VS:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configServicios web:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik (RESEARCH): entradas ODBC de 64 bits (campo Servidor )

Se recomienda probar la funcionalidad completa de los sistemas antes de crear el servidor secundario. Asegúrese de tomar nota de todos los valores originales de los parámetros que cambie.
En todos los servidores en los que se implementen los componentes de BriefCam Server, establezca el archivo hosts para que apunte al servidor de base de datos PostgreSQL primario; esto anulará el DNS.
En la BriefCam Administrator Console, abra la sección Configuración de entorno y establezca los ajustesDB. LocalStorageAddress y VideoProductsPath para utilizar nombres de host y no direcciones IP.
La velocidad de PostgreSQL base_backup varía significativamente dependiendo de la configuración del entorno (velocidad de SSD/HDD/NIC). Como regla general, en el almacenamiento ISCSI (matriz de discos duros de enlaces de 10 Gbps) y NIC de red de 1 Gbps (vmxnet3) en un entorno virtual, se tarda unos 40 minutos en realizar una copia de seguridad básica de la base de datos PostgreSQL que contiene 90 GB de BriefCamdatos .
Considere la posibilidad de probar la velocidad en el entorno real para poder estimar cuánto tiempo tardará la copia de seguridad básica en poder establecer correctamente el intervalo de tiempo para el proceso de creación de réplicas.
Utilice la ruta real del
PostgreSQL_Datadirectorio . El valor BriefCampredeterminado esC:\PostgreSQL_Data. Sin embargo, esto puede variar en diferentes configuraciones (más adelante en este documento se utilizará la BriefCamruta predeterminada ).Utilice la
pgsql.exeruta de real. El valor BriefCampredeterminado esC:\PostgreSQL\bin\psql.exe(más adelante en este tema, se utilizará la BriefCamruta de acceso predeterminada ).
Pasos en el servidor primario
Conéctese a la consola SQL del servidor PostgreSQL primario y verifique la ubicación de los archivos config y hba ejecutando los siguientes comandos:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres SHOW config_file; SHOW hba_file;Aquí hay un ejemplo de la salida esperada (basada en la ubicación de la
PostgreSQL_Datacarpeta ):C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/pg_hba.confHaga una copia de seguridad de los
hbaarchivos de y originalesconfigejecutando los siguientes comandos en 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"))Verifique que los archivos de copia de seguridad se crearon ejecutando el siguiente comando:
dir C:/PostgreSQL_Data/*.conf.*La salida esperada es:
PS C:\Users\Administrator> dir C:/PostgreSQL_Data/*.conf.*
Directorio: C:\PostgreSQL_Data
Nombre de longitud de LastWriteTime de modo
---- ------------- ------ ----
-a---- 11/10/2021 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 11/10/2021 11:25 AM 23798 postgresql.conf.20211117T100344Z
Añadir parámetros al
postgres.confarchivo de . Para ello, abra el archivo en un editor de texto y añada las siguientes líneas al final del archivo (justo debajo de laCustomized Optionssección ):wal_level = replica hot_standby = on hot_standby_feedback = on full_page_writes = on max_wal_senders = 6 max_replication_slots = 6Cree un cometido/usuario para la replicación y establezca su contraseña (no utilice la contraseña especificada en los comandos de ejemplo).
Conectarse a la consola de SQL del servidor PostgreSQL primario a través de la consola PowerShell mediante el comando:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresEjecute el siguiente comando (en la consola de SQL abierta en el paso anterior):
CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'replQwerty123';
Añadir parámetros al
pg_hba.confarchivo de . Para ello, abra el archivo en un editor de texto y añada las siguientes líneas al archivo (debajo de la#replication privilegelínea ):# replication privilege. host replication repl_user <secondaryIP>/32 md5Reinicie el servicio BriefCamPostgreSQL en el servidor PostgreSQL principal abriendo PowerShell como administrador y ejecutando los siguientes comandos:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"Verifique que los archivos config contengan los cambios que hizo en el
postgres.confarchivo de la siguiente manera:Conectarse a la consola de SQL del servidor PostgreSQL primario a través de la consola PowerShell mediante el comando:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresImprima las configuraciones personalizadas añadidas al archivo conf de PostgreSQL utilizando los siguientes comandos a través de la consola de SQL:
\pset pager off SELECT pg_read_file('postgresql.conf');Verifique que ahora puede ver las líneas añadidas al
postgresql.confarchivo de en la parte inferior de la salida.
Verifique que los archivos config contengan los cambios que hizo en el
pg_hba.confarchivo de la siguiente manera:Conectarse a la consola de SQL del servidor PostgreSQL primario ejecutando los siguientes comandos:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres
\pset buscapersonas desactivado
SELECCIONAR archivo_lectura_pg ('pg_hba.conf');
Verifique que ahora puede ver las líneas añadidas al
pg_hba.confarchivo de en la parte inferior de la salida.
Pasos en el servidor secundario
Instale BriefCamPostgreSQL.
En el servidor PostgreSQL secundario, detenga el servicio BriefCamPostgreSQL ejecutando lo siguiente en PowerShell como administrador:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"Limpie el directorio de datos de la siguiente manera:
Cambie el nombre de la
PostgreSQL_Datacarpeta .Cree una nueva carpeta llamada
PostgreSQL_Datay, en la pestaña Permisos de la carpeta, añada Control total a Todos .
Realice una copia de seguridad de base PostgreSQL desde el servidor primario al secundario de la siguiente manera:
Ejecute el siguiente comando en PowerShell como administrador:
c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1Se recomienda detener todos los BriefCamservicios de en todos los servidores durante la copia de seguridad de la base de datos potencialmente larga. Es posible realizar este paso sin detener todos los servicios, dependiendo del tamaño del conjunto de datos.
En el servidor PostgreSQL secundario, inicie el servicio BriefCamPostgreSQL ejecutando los siguientes comandos en PowerShell como administrador:
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
Verificar la operación de replicación
Conectarse a la consola de SQL del servidor PostgreSQL primario a través de la consola PowerShell mediante el comando:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresCompruebe el valor de retraso ejecutando el siguiente comando en la consola de SQL (el
write_lagvalor de debe comenzar por 00:00:00):SELECT write_lag,client_addr FROM pg_stat_replication ;Este es un ejemplo de la salida esperada:
postgres# SELECT write_lag, client_addr FROM pg_stat_replication ;
write_lag | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1 fila)
Postgres=#
Nota
Esta comprobación debe realizarse al menos una vez al día.
Activar el servidor secundario para que actúe como servidor primario
Esta sección describe el procedimiento de activación del servidor secundario como instancia primaria de la base de datos PostgreSQL, en los casos en los que el servidor primario tiene un fallo y es necesaria la recuperación/migración.
Cambie el archivo de hosts en todos los servidores BC para reflejar el <secondaryIP> en lugar de <primaryIP>.
Compruebe el estado y promueva el servidor secundario PGSQL para que se convierta en el servidor principal ejecutando los siguientes comandos en la consola de PowerShell (asegúrese de ejecutar PowerShell en Administrator y de editar las rutas de acceso al archivo pg_ctl.exe y a la carpeta PostgreSQL_Data en consecuencia):
c:\PostgreSQL\bin\pg_ctl.exe status -D ”C:\PostgreSQL_Data”
Salida de ejemplo:
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”
Salida de ejemplo:
waiting for server to promote.... done server promoted
Crear una copia de seguridad periódica en el servidor secundario
Secuencias PG_DUMP en el Programador de tareas de Windows
Cree el
%APPDATA%\postgresql\pgpass.confarchivo de que contenga las credenciales de la base de datos (es decir:*:5432:*:dbadmin:Qwerty123). Para obtener más detalles, consulte: https://www.postgresql.org/docs/10/libpq-pgpass. html y https://www.postgresql.org/docs/10/libpq-envars. html (enlaces externos).Si lo anterior no funciona, la contraseña de los scripts se puede especificar en la línea de ejecución:
$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")).tarCree una carpeta para los archivos de copia de seguridad, por ejemplo: .
E:\PostgresBackups\Cree una carpeta para los archivos de secuencia de comandos de copia de seguridad, por ejemplo: .
E:\PostgresBackupScripts\Cree la secuencia de comandos de copia de seguridad en:
E:\PostgresBackupScripts\backup.ps1con los tres comandos que se muestran a continuación:c:\PostgreSQL\bin\pg_dump.exe -Ft -U dbadmin -d postgres -f e:\PostgresBackups\db_postgres-$(((get-date).ToUniversalTime()).ToString("aaaaMMddTHHmmssZ").tar
c:\PostgreSQL\bin\pg_dump.exe -Ft -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
* El tercer comando anterior debe ajustarse de acuerdo con el período de retención de copia de seguridad requerido eliminando el signo "#" al comienzo de la línea y modificando el número 15, ya que representa el número de días hacia atrás. Por ejemplo, si desea configurar la secuencia de comandos para eliminar todos los archivos de más de 7 días, tendría que cambiar el número 15 a 7.
Pruebe la creación de la copia de seguridad y la eliminación de los archivos antiguos estableciendo -gt en 0 y ejecute el siguiente comando en Windows cmd:
powershell.exe e:\PostgresBackupScripts\backup.ps1
Esto eliminará todos los archivos creados.
Ajuste el periodo de retención de las copias de seguridad como se menciona en la parte inferior del paso 4 anterior.
Añada la secuencia de comandos de copia de seguridad al programador de tareas de Windows de la siguiente manera:
Establezca el campo Programa/script en la siguiente ruta:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
En el campo Añadir argumentos establezca lo siguiente:
E:\PostgresBackupScripts\backup.ps1
Ajuste los gatillos y la sincronización en consecuencia.

Configure la tarea para que se ejecute independientemente de si el usuario ha iniciado sesión y guarde la contraseña.

En un servidor de prueba, compruebe si los archivos son restaurables. Esta prueba debe ser parte de su rutina diaria.
Aquí hay un ejemplo del comando de restauración:
C:\PostgreSQL\bin\pg_restore.exe -c -v -U dbadmin -d briefcam -F t e:\PostgresBackups\db_briefcam-20211122T122052Z.tar
El de parámetros -crealiza la eliminación y la creación. Para opciones adicionales, consulte:
“C:\PostgreSQL\bin\pg_restore.exe --help”
Volver Al Servidor Primario Una Vez Reparado
Si estaba utilizando un servidor secundario porque había un problema con el servidor primario, esta sección describe cómo volver al servidor primario una vez que se soluciona el problema.
Nota
Los detalles del proceso a continuación pueden variar dependiendo del tipo de fallo que haya sufrido el servidor primario. Para considerar el caso más grave (un bloqueo absoluto del servidor primario), los siguientes pasos incluyen una instalación nueva.
Instale el sistema operativo desde cero.
Realice los pasos de la sección Pasos en el Servidor Primario en el servidor primario actual.
Realice todas las acciones descritas en las siguientes secciones en los servidores, teniendo en cuenta que el servidor que se reinstaló es ahora técnicamente la instancia "secundaria":
Detenga el servicio PostgreSQL en el servidor que se utilizó como servidor primario.
Verifique que el BriefCamsistema de funciona correctamente.
Realice los pasos para crear una réplica en el servidor que se utilizó como servidor primario.