PostgreSQL 데이터베이스 BriefCam 복제
이 섹션에서는 PostgreSQL 데이터베이스의 복제를 간소화하는 방법에 대해 자세히 설명합니다.
전제 조건, 노트 및 규약
참고
이 문서의 샘플에서 명령을 붙여 넣는 동안 명령 프롬프트(cmd)가 아닌 Windows PowerShell을 사용하십시오.
주 서버 공간이 충분한 경우, 복제본을 생성하기 전에 pg_dump 도구를 사용하여 데이터베이스의 전체 백업을 수행하십시오.
주 서버의 IP 주소를 기록해 둡니다. 이 문서의 뒷부분에 나오는 내용은 <primaryIP>라고 합니다.
보조 서버의 IP 주소를 기록해 둡니다. 이 문서의 뒷부분에서는 <secondaryIP>라고 합니다.
PGSQL 서버에서 다음 세 BriefCam 가지 설치 구성 요소를 모두 호스트 이름 또는 IP 주소로 설정해야 합니다. 일관성을 보장하기 위해 모두 동일한 방법을 사용하고 있는지 확인하십시오. 이렇게 하려면 다음 파일 또는 설정
connectionString에서 PostgreSQL을 찾아야 합니다.VS 서버:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.config웹 서비스는 다음과 같습니다.
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik(RESEARCH): ODBC 64비트 항목(서버 필드)

보조 서버를 생성하기 전에 시스템의 전체 기능을 테스트하는 것이 좋습니다. 변경하는 매개변수의 원래 값을 모두 기록해 두어야 합니다.
BriefCam 서버 구성 요소가 배포된 모든 서버에서 호스트 파일이 기본 PostgreSQL 데이터베이스 서버를 가리키도록 설정합니다. 이렇게 하면 DNS가 재정의됩니다.
에서BriefCam Administrator Console환경 설정 섹션을 열고 IP 주소가 아닌 호스트 이름을 사용하도록 DB.LocalStorageAddress 및 VideoProductsPath 설정을 설정합니다.
PostgreSQL base_backup의 속도는 환경 설정(SSD/HDD/NIC 속도)에 따라 크게 다릅니다. 경험에 따르면 가상 환경의 ISCSI 스토리지(10Gbps 링크 HDD 어레이) 및 1Gbps 네트워크 NIC(vmxnet3)에서 90GB의 데이터를 포함하는 PostgreSQL 데이터베이스의 기본 백업을 수행하는 데 약 40분이 BriefCam 소요됩니다.
실제 환경에서의 속도를 테스트하여 기본 백업이 복제본 생성 프로세스에 대한 시간 슬롯을 올바르게 설정하는 데 걸리는 시간을 추정해 보십시오.
디렉토리의 실제 경로를
PostgreSQL_Data사용합니다. 기본값은 BriefCam 다음과C:\PostgreSQL_Data같습니다. 그러나 이러한 설정은 다를 수 있습니다(이 문서의 뒷부분에 있는 기본 BriefCam 경로가 사용됨).실제 경로를
pgsql.exe사용합니다. 기본값은 BriefCam 입니다C:\PostgreSQL\bin\psql.exe(이 항목의 뒷부분에서 기본 BriefCam 경로가 사용됩니다).
주 서버에 대한 단계
다음 명령을 실행하여 기본 PostgreSQL 서버 sql 셸에 연결하고 구성 및 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.confPowerShell에서 다음 명령
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 Length 이름
---- ------------- ------ ----
-a---- 2021/11/10 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 2021/11/10 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 서버의 SQL 셸에 연결합니다.
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관리자로서 PowerShell을 열고 다음 명령을 실행하여 기본 PostgreSQL 서버에서 BriefCamPostgreSQL 서비스를 재시작합니다.
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"다음과 같이 파일에 변경한 내용이 구성 파일에
postgres.conf포함되어 있는지 확인합니다.다음 명령을 사용하여 PowerShell 콘솔을 통해 기본 PostgreSQL 서버의 SQL 셸에 연결합니다.
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresSQL 셸을 통해 아래 명령을 사용하여 PostgreSQL 구성 요소 파일에 추가된 사용자 정의 구성을 출력합니다.
\pset pager off SELECT pg_read_file('postgresql.conf');이제 출력 하단에서 파일에 추가된 라인을
postgresql.conf볼 수 있는지 확인합니다.
다음과 같이 파일에 변경한 내용이 구성 파일에
pg_hba.conf포함되어 있는지 확인합니다.다음 명령을 실행하여 기본 PostgreSQL 서버의 SQL 셸에 연결합니다.
C:\PostgreSQL\bin\psql.exe -U dbadmin 게시물
\페이저를 끄십시오.
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 서버의 SQL 셸에 연결합니다.
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresSQL 셸에서 다음 명령을 실행하여 지연 값을 확인합니다. 값은 00:00:00으로
write_lag시작해야 합니다.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=#
참고
이 확인은 하루에 한 번 이상 수행해야 합니다.
보조 서버를 활성화하여 주 서버로 동작합니다.
이 섹션에서는 기본 서버에 장애가 발생하여 복구/마이그레이션이 필요한 경우 PostgreSQL 데이터베이스의 기본 인스턴스로 보조 서버를 활성화하는 절차에 대해 설명합니다.
모든 BC 서버의 호스트 파일을 <primaryIP> 대신 <secondaryIP>를 반영하도록 변경합니다.
상태를 확인하고 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("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
*위의 세 번째 명령은 필요한 백업 보존 기간에 따라 선의 시작에서 "#" 기호를 제거하고 뒤로 일 수를 나타내는 숫자 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 제대로 작동하는지 확인합니다.
주 서버로 사용된 서버에서 복제본을 생성하기 위한 단계를 수행합니다.