PostgreSQL BriefCam Veritabanını Çoğaltma
Bu bölüm, PostgreSQL veritabanının replikasyonunun nasıl kolaylaştırılacağını detaylandırır.
Ön Koşullar, Notlar ve Sözleşmeler
Not
Bu belgedeki örneklerden komutları yapıştırırken Komut İstemi (cmd) değil, Windows PowerShell kullanın.
Birincil sunucu alanı yeterliyse, yineleme oluşturmaya çalışmadan önce (pg_dump aracını kullanarak) veritabanının tam yedeğini alın.
Birincil sunucunun IP adresini not edin. Bu belgenin ilerleyen bölümlerinde <primaryIP> olarak anılacaktır.
İkincil sunucunun IP adresini not edin. Bu belgenin ilerleyen kısımlarında <secondaryIP> olarak anılacaktır.
PGSQL sunucusunda, aşağıdaki üç BriefCam kurulum bileşeninin tümünün ana bilgisayar adına veya IP adresine ayarlanması gerekir. Hepsinin aynı yöntemi kullandığından emin olun (tutarlılığı sağlamak için). Bunu yapmak için,
connectionStringaşağıdaki dosyalarda veya ayarlarda PostgreSQL'i ararsınız:VS Sunucusu:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configWeb Hizmetleri:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik (RESEARCH): ODBC 64-bit girişleri (Sunucu alanı)

İkincil sunucuyu oluşturmadan önce sistemlerin tam işlevselliğini test etmeniz önerilir. Değiştirdiğiniz parametrelerin tüm orijinal değerlerini not aldığınızdan emin olun.
BriefCam Server bileşenlerinin dağıtıldığı tüm sunucularda, ana bilgisayar dosyasını birincil PostgreSQL veritabanı sunucusunu işaret edecek şekilde ayarlayın - bu, DNS'yi geçersiz kılacaktır.
IP adreslerini değil ana bilgisayar adlarını kullanmak için Ortam Ayarları bölümünü açın BriefCam Administrator Consoleve DB.LocalStorageAddress ve VideoProductsPath ayarlarını ayarlayın.
PostgreSQL base_backup'ın hızı, ortamın ayarına (SSD/HDD/NIC hızı) bağlı olarak önemli ölçüde farklılık gösterir. Genel bir kural olarak, bir sanal ortamda İSCSI depolamasında (10 Gb/sn HDD dizisine bağlanır) ve 1 Gb/sn ağ NIC'inde (vmxnet3), 90 GB BriefCam veri içeren PostgreSQL veritabanının temel yedeğini gerçekleştirmek yaklaşık 40 dakika sürer.
Temel yedeklemenin yineleme oluşturma işlemi için zaman aralığını düzgün bir şekilde ayarlayabilmesi için ne kadar zaman alacağını tahmin edebilmek amacıyla gerçek ortamda hızı test etmeyi düşünün.
Dizinin asıl yolunu
PostgreSQL_Datakullanın. Varsayılan BriefCam değerC:\PostgreSQL_Data. Ancak, bu farklı ayarlarda değişiklik gösterebilir (bu belgenin ilerleyen saatlerinde varsayılan BriefCam yol kullanılacaktır).Gerçek
pgsql.exeyolu kullanın. Varsayılan BriefCam yolC:\PostgreSQL\bin\psql.exe(bu konunun ilerleyen kısımlarında, varsayılan BriefCam yol kullanılacaktır).
Ana Sunucudaki Adımlar
Birincil PostgreSQL sunucusu sql shell'ine bağlanın ve aşağıdaki komutları yürüterek yapılandırma ve hba dosyalarının konumunu doğrulayın:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres SHOW config_file; SHOW hba_file;Burada beklenen çıktının bir örneği verilmiştir (
PostgreSQL_Dataklasörün konumuna bağlı olarak):C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/pg_hba.confPowerShell'de aşağıdaki komutları yürüterek orijinal
configvehbadosyaları yedekleyin: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"))Yedek dosyalarının aşağıdaki komut yürütülerek oluşturulduğunu doğrulayın:
dir C:/PostgreSQL_Data/*.conf.*Beklenen çıkış:
PS C:\Users\Administrator> dizini: C/PostgreSQL_Data/*.conf.*
Dizin: C:\PostgreSQL_Data
Mod LastWriteTime Uzunluk Adı
---- ------------- ------ ----
-a---- 11/10/2021 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 11/10/2021 11:25 AM 23798 postgresql.conf.20211117T100344Z
Dosyaya parametreleri
postgres.confekleyin. Bunu, dosyayı bir metin düzenleyicisinde açarak ve dosyanın sonuna aşağıdaki satırları ekleyerek (Customized Optionsbölümün hemen altında) yaparsınız:wal_level = replica hot_standby = on hot_standby_feedback = on full_page_writes = on max_wal_senders = 6 max_replication_slots = 6Çoğaltma için bir rol/kullanıcı oluşturun ve parolasını ayarlayın (örnek komutlarda belirtilen parolayı kullanmayın).
Birincil PostgreSQL sunucusunun SQL kabuğuna PowerShell konsolundan şu komutu kullanarak bağlanın:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresAşağıdaki komutu yürütün (önceki adımda açılan SQL kabuğunda):
CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'replQwerty123';
Dosyaya parametreleri
pg_hba.confekleyin. Bunu, dosyayı bir metin düzenleyicisinde açarak ve dosyaya aşağıdaki satırları ekleyerek (#replication privilegesatırın altında) yaparsınız:# replication privilege. host replication repl_user <secondaryIP>/32 md5PowerShell'i yönetici olarak açıp aşağıdaki komutları çalıştırarak birincil PostgreSQL sunucusunda BriefCamPostgreSQL hizmetini yeniden başlatın:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"Yapılandırma dosyalarının
postgres.confdosyada yaptığınız değişiklikleri aşağıdaki gibi içerdiğini doğrulayın:Birincil PostgreSQL sunucusunun SQL kabuğuna PowerShell konsolundan şu komutu kullanarak bağlanın:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresAşağıdaki komutları kullanarak PostgreSQL conf dosyasına eklenen özel yapılandırmaları SQL kabuk yoluyla yazdırın:
\pset pager off SELECT pg_read_file('postgresql.conf');Çıktının altında artık
postgresql.confdosyaya eklenen satırları görebildiğinizi doğrulayın.
Yapılandırma dosyalarının
pg_hba.confdosyada yaptığınız değişiklikleri aşağıdaki gibi içerdiğini doğrulayın:Aşağıdaki komutları yürüterek birincil PostgreSQL sunucusunun SQL Shell'ine bağlanın:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres
\pset sayfalayıcı kapalı
pg_read_file('pg_hba.conf') öğesini seçin;
Çıktının altında artık
pg_hba.confdosyaya eklenen satırları görebildiğinizi doğrulayın.
İkinci Sunucudaki Adımlar
BriefCamPostgreSQL uygulamasını yükleyin.
İkincil PostgreSQL sunucusunda, PowerShell'de yönetici olarak aşağıdakileri çalıştırarak BriefCamPostgreSQL hizmetini durdurun:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"Veri dizinini aşağıdaki şekilde temizleyin:
Klasörü
PostgreSQL_Datayeniden adlandırın.Adında yeni bir klasör oluşturun
PostgreSQL_Datave klasörün İzinler sekmesinde, Herkes'e Tam kontrolü ekleyin .
Birincil sunucudan ikincil sunucuya bir PostgreSQL temel yedeğini aşağıdaki şekilde gerçekleştirin:
PowerShell'de yönetici olarak aşağıdaki komutu gerçekleştirin:
c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1Potansiyel olarak uzun veritabanı yedeklemesi sırasında tüm sunuculardaki tüm BriefCam hizmetlerin durdurulması önerilir. Veri kümesi boyutuna bağlı olarak bu adımı tüm hizmetleri durdurmadan gerçekleştirmek mümkündür.
İkincil PostgreSQL sunucusunda, bir yönetici olarak PowerShell'de aşağıdaki komutları yürüterek BriefCamPostgreSQL hizmetini başlatın:
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
Çoğaltma İşlemini Doğrula
Birincil PostgreSQL sunucusunun SQL kabuğuna PowerShell konsolundan şu komutu kullanarak bağlanın:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresKabukta aşağıdaki komutu çalıştırarak gecikme SQL kontrol edin (
write_lagdeğer 00:00:00 ile başlamalıdır):SELECT write_lag,client_addr FROM pg_stat_replication ;Bu, beklenen çıktının bir örneğidir:
postgres=# SEÇ write_lag,client_addr FROM pg_stat_replication ;
write_lag | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1 satır)
postgres=#
Not
Bu kontrol günde en az bir kez yapılmalıdır.
Birincil Sunucu olarak hareket etmek için İkincil Sunucuyu etkinleştirin
Bu bölüm, birincil hatanın olduğu ve kurtarma/geçiş işleminin gerekli olduğu durumlarda ikincil sunucuyu etkinleştirme prosedürünü PostgreSQL veritabanının birincil örneği olarak açıklar.
Tüm BC sunucularındaki ana bilgisayar dosyasını <birincilIP> yerine <ikincilIP>'yi yansıtacak şekilde değiştirin.
Durumu kontrol edin ve PowerShell konsolunda aşağıdaki komutları çalıştırarak birincil sunucu PGSQL olmak için ikincil sunucu PGSQL'i yükseltin (PowerShell'i yönetici içinde çalıştırdığınızdan ve pg_ctl.exe dosyasının ve PostgreSQL_Data klasörünün yollarını buna göre düzenlediğinizden emin olun):
c:\PostgreSQL\bin\pg_ctl.exe status -D ”C:\PostgreSQL_Data”
Örnek çıkış:
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”
Örnek çıkış:
waiting for server to promote.... done server promoted
İkincil Sunucuda Periyodik Yedekleme Oluşturun
Windows Görev Zamanlayıcısında PG_DUMP Betikleri
Veritabanı kimlik bilgilerini içeren
%APPDATA%\postgresql\pgpass.confdosyayı oluşturun (yani:*:5432:*:dbadmin:Qwerty123). Ayrıntılar için bkz. https://www.postgresql.org/docs/10/libpq-pgpass.html ve https://www.postgresql.org/docs/10/libpq-envars.html (harici bağlantılar).Yukarıdakiler çalışmazsa, betiklerin parolası yürütme hattında belirtilebilir:
$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")).tarYedekleme dosyaları için bir klasör oluşturun, örneğin:
E:\PostgresBackups\.Yedekleme betik dosyaları için bir klasör oluşturun, örneğin:
E:\PostgresBackupScripts\.Aşağıda gösterilen üç komutla şu konumda yedekleme
E:\PostgresBackupScripts\backup.ps1komut dosyası oluşturun:c:\PostgreSQL\bin\pg_dump.exe -Ft -U dbadmin -d postgres -f e:\PostgresBackups\db_postgres-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).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
*Yukarıdaki 3. komut satırın başındaki "#" işareti kaldırılarak ve geriye doğru gün sayısını gösterdiği için 15 sayısını değiştirerek gerekli yedek tutma dönemine göre ayarlanmalıdır. Örneğin, betiği 7 günden eski tüm dosyaları silecek şekilde yapılandırmak isterseniz, 15 ila 7 sayısını değiştirmeniz gerekir.
-gt'yi 0'a ayarlayarak yedek oluşturmayı ve eski dosyaların kaldırılmasını test edin ve Windows cmd'de aşağıdaki komutu çalıştırın:
powershell.exe e:\PostgresBackupScripts\backup.ps1
Bu, oluşturulan tüm dosyaları kaldıracaktır.
Yukarıdaki 4. adımın altında belirtildiği gibi yedeklemelerin tutma dönemini ayarlayın.
Windows görev zamanlayıcısına aşağıdaki gibi yedekleme betiğini ekleyin:
Program/komut dosyası alanını aşağıdaki yola ayarlayın:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Argüman ekle alanında aşağıdakileri ayarlayın:
E:\PostgresBackupScripts\backup.ps1
Tetikleyicileri ve zamanlamayı buna göre ayarlayın.

Kullanıcının oturum açmış olmasına bakılmaksızın görevin çalışmasını ayarlayın ve parolayı kaydedin.

Bir test sunucusunda, dosyaların geri yüklenebilir olup olmadığını kontrol edin. Bu test devam eden rutininizin bir parçası olmalıdır.
İşte geri yükleme komutunun bir örneği:
C:\PostgreSQL\bin\pg_restore.exe -c -v -U dbadmin -d briefcam -F t e:\PostgresBackups\db_briefcam-20211122T122052Z.tar
Parametre, bırakma ve oluşturma işlemini -c gerçekleştirir. Ek seçenekler için bkz.
“C:\PostgreSQL\bin\pg_restore.exe --help”
Düzeltildikten Sonra Birincil Sunucuya Geri Dönün
Birincil sunucuyla ilgili bir sorun olduğundan ikincil bir sunucu kullanıyorsanız, bu bölüm, sorun düzeltildikten sonra birincil sunucuya nasıl geri döneceğinizi açıklar.
Not
Aşağıdaki işlemin ayrıntıları, birincil sunucunun ne tür bir arıza yaşadığına bağlı olarak değişebilir. En ciddi vakayı (birincil sunucunun mutlak bir çökmesi) göz önünde bulundurmak için, aşağıdaki adımlar yeni bir kurulumu içerir.
İşletim sistemini sıfırdan kurun.
Geçerli birincil sunucudaki Birincil Sunucu bölümündeki Adımlar 'daki adımları gerçekleştirin.
Yeniden kurulan sunucunun şimdi teknik olarak "ikincil" örnek olduğunu göz önünde bulundurarak, sunucular üzerinde aşağıdaki bölümlerde açıklanan tüm eylemleri gerçekleştirin:
Birincil sunucu olarak kullanılan sunucudaki PostgreSQL hizmetini durdurun.
Sistemin BriefCam düzgün çalıştığını doğrulayın.
Sunucuda birincil sunucu olarak kullanılan bir çoğaltma oluşturma adımlarını gerçekleştirin.