{"id":35165,"date":"2025-11-26T12:41:01","date_gmt":"2025-11-26T09:41:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35165"},"modified":"2025-11-26T12:41:01","modified_gmt":"2025-11-26T09:41:01","slug":"postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/","title":{"rendered":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<h2>PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu<\/h2>\n<h2>Replikasyon Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>Veritaban\u0131 sistemlerinde replikasyon (\u00e7o\u011faltma), verinin bir veritaban\u0131 sunucusundan (primary\/ana sunucu) bir veya daha fazla ba\u015fka sunucuya (standby\/bekleme sunucusu) kopyalanmas\u0131 ve senkronize edilmesidir. Bu s\u00fcre\u00e7, modern veritaban\u0131 mimarilerinin temel ta\u015flar\u0131ndan biridir ve kritik i\u015f uygulamalar\u0131 i\u00e7in vazge\u00e7ilmezdir. PostgreSQL gibi kurumsal d\u00fczeyde bir veritaban\u0131 y\u00f6netim sistemi, \u00e7e\u015fitli replikasyon y\u00f6ntemleri sunarak veri g\u00fcvenli\u011fi, y\u00fcksek eri\u015filebilirlik (High Availability &#8211; HA) ve y\u00fck dengeleme (Load Balancing) gibi ihtiya\u00e7lar\u0131 kar\u015f\u0131lar.<\/p>\n<p>Replikasyonun ba\u015fl\u0131ca faydalar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Veri G\u00fcvenli\u011fi ve Felaket Kurtarma (Disaster Recovery):<\/strong> Ana sunucunun donan\u0131msal ar\u0131za, yaz\u0131l\u0131m hatas\u0131 veya do\u011fal afet gibi nedenlerle eri\u015filemez hale gelmesi durumunda, replike edilmi\u015f bir yedek sunucu sayesinde veri kayb\u0131 en aza indirilir ve hizmet kesintisi s\u00fcresi k\u0131salt\u0131l\u0131r.<br \/>\n*   <strong>Y\u00fcksek Eri\u015filebilirlik:<\/strong> Birincil sunucu \u00e7evrimd\u0131\u015f\u0131 kald\u0131\u011f\u0131nda, bekleme sunucusu h\u0131zl\u0131 bir \u015fekilde birincil sunucu rol\u00fcn\u00fc \u00fcstlenerek uygulaman\u0131n \u00e7al\u0131\u015fmaya devam etmesini sa\u011flar. Bu, hizmetin s\u00fcrekli olarak eri\u015filebilir olmas\u0131n\u0131 garanti eder.<br \/>\n*   <strong>Y\u00fck Dengeleme:<\/strong> Salt okunur sorgular (read-only queries), bekleme sunucular\u0131na y\u00f6nlendirilerek birincil sunucunun y\u00fck\u00fc azalt\u0131labilir. Bu sayede birincil sunucu, yazma i\u015flemlerine daha fazla odaklanabilir ve genel sistem performans\u0131 art\u0131r\u0131labilir.<br \/>\n*   <strong>Raporlama ve Analiz:<\/strong> Yo\u011fun raporlama veya analiz i\u015flemleri, \u00fcretim veritaban\u0131n\u0131 etkilemeden bekleme sunucular\u0131 \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n<p>PostgreSQL, temel olarak iki t\u00fcr replikasyon sunar:<br \/>\n*   <strong>Mant\u0131ksal Replikasyon (Logical Replication):<\/strong> Belirli tablolar\u0131 veya veritabanlar\u0131n\u0131 replike etmek i\u00e7in kullan\u0131l\u0131r. Farkl\u0131 PostgreSQL s\u00fcr\u00fcmleri veya hatta farkl\u0131 veritaban\u0131 sistemleri aras\u0131nda replikasyon yap\u0131lmas\u0131na olanak tan\u0131r. Veri de\u011fi\u015fimleri, SQL d\u00fczeyinde mant\u0131ksal bir formatta g\u00f6nderilir.<br \/>\n*   <strong>Fiziksel Replikasyon (Physical Replication):<\/strong> Veritaban\u0131 k\u00fcmesinin tamam\u0131n\u0131, blok seviyesinde kopyalar. Bu, birincil sunucunun birebir kopyas\u0131n\u0131 olu\u015fturur. Bu makalede odaklanaca\u011f\u0131m\u0131z &#8220;Streaming Replication&#8221; (Ak\u0131\u015f Replikasyonu) fiziksel replikasyonun bir t\u00fcr\u00fcd\u00fcr.<\/p>\n<p>Fiziksel ak\u0131\u015f replikasyonu, PostgreSQL&#8217;in Write-Ahead Log (WAL) dosyalar\u0131n\u0131 kullanarak \u00e7al\u0131\u015f\u0131r. Birincil sunucuda yap\u0131lan her de\u011fi\u015fiklik (ekleme, g\u00fcncelleme, silme), WAL dosyalar\u0131na yaz\u0131l\u0131r. Bekleme sunucusu, bu WAL kay\u0131tlar\u0131n\u0131 s\u00fcrekli olarak birincil sunucudan al\u0131r ve kendi veri dizinine uygular. Bu sayede, bekleme sunucusu her zaman birincil sunucunun g\u00fcncel bir kopyas\u0131 olarak kal\u0131r. Fiziksel replikasyonun avantajlar\u0131 aras\u0131nda y\u00fcksek performans, kolay kurulum (\u00f6zellikle <code>pg_basebackup<\/code> ile) ve birincil sunucuyla tam uyumluluk bulunur.<\/p>\n<h2>\u00d6n Gereksinimler<\/h2>\n<p>Bu makaledeki kurulum ad\u0131mlar\u0131n\u0131 takip etmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>\u0130ki Adet Ubuntu 20.04 Sunucusu:<\/strong><br \/>\n    *   Birincil (Primary) Sunucu: PostgreSQL 12 kurulu ve \u00e7al\u0131\u015f\u0131r durumda. \u00d6rnek IP: <code>192.168.1.10<\/code><br \/>\n    *   Bekleme (Standby) Sunucu: PostgreSQL 12 kurulu, ancak replikasyon kurulumu s\u0131ras\u0131nda veritaban\u0131 durdurulacak ve temizlenecektir. \u00d6rnek IP: <code>192.168.1.11<\/code><br \/>\n*   <strong>A\u011f Ba\u011flant\u0131s\u0131:<\/strong> Her iki sunucu aras\u0131nda a\u011f ba\u011flant\u0131s\u0131 olmal\u0131 ve 5432 numaral\u0131 PostgreSQL portu \u00fczerinden ileti\u015fim kurulabilmelidir.<br \/>\n*   <strong>G\u00fcvenlik Duvar\u0131 Ayarlar\u0131:<\/strong> Gerekirse, her iki sunucunun g\u00fcvenlik duvar\u0131nda 5432 portunun a\u00e7\u0131ld\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> Her iki sunucuya da <code>root<\/code> veya <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 ile SSH \u00fczerinden eri\u015fiminiz olmal\u0131.<br \/>\n*   <strong>PostgreSQL 12 Kurulumu:<\/strong> Her iki sunucuya da PostgreSQL 12&#8217;nin kurulu oldu\u011fundan emin olun. Kurulum talimatlar\u0131 bu makalenin kapsam\u0131 d\u0131\u015f\u0131nda tutulsa da, genel olarak <code>sudo apt update && sudo apt install postgresql-12<\/code> komutu ile kurulabilir.<br \/>\n*   <strong>Yeterli Disk Alan\u0131:<\/strong> Her iki sunucuda da veritaban\u0131 boyutunu kald\u0131rabilecek yeterli disk alan\u0131 bulunmal\u0131d\u0131r.<\/p>\n<h2>Terminoloji ve Kavramlar<\/h2>\n<p>Replikasyon kurulumuna ba\u015flamadan \u00f6nce baz\u0131 temel terimleri anlamak faydal\u0131 olacakt\u0131r:<\/p>\n<p>*   <strong>Primary (Ana) Sunucu:<\/strong> Veritaban\u0131na yazma i\u015flemlerinin yap\u0131ld\u0131\u011f\u0131 ve t\u00fcm de\u011fi\u015fikliklerin ba\u015flad\u0131\u011f\u0131 sunucudur. Ayn\u0131 zamanda bekleme sunucular\u0131na WAL kay\u0131tlar\u0131n\u0131 g\u00f6nderir.<br \/>\n*   <strong>Standby (Bekleme) Sunucu:<\/strong> Birincil sunucudan WAL kay\u0131tlar\u0131n\u0131 alarak kendini g\u00fcncel tutan sunucudur. Fiziksel replikasyonda, bekleme sunucusu birincil sunucunun tam bir kopyas\u0131d\u0131r. Hot Standby modunda okuma sorgular\u0131na izin verebilir.<br \/>\n*   <strong>WAL (Write-Ahead Log):<\/strong> PostgreSQL&#8217;in veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak ve felaket kurtarma yeteneklerini desteklemek i\u00e7in kulland\u0131\u011f\u0131 i\u015flem g\u00fcnl\u00fc\u011f\u00fc dosyalar\u0131d\u0131r. Her veritaban\u0131 de\u011fi\u015fikli\u011fi \u00f6nce WAL&#8217;a yaz\u0131l\u0131r, ard\u0131ndan veri dosyalar\u0131na uygulan\u0131r. Replikasyon, bu WAL dosyalar\u0131n\u0131n bekleme sunucusuna aktar\u0131lmas\u0131yla ger\u00e7ekle\u015ftirilir.<br \/>\n*   <strong>Timeline (Zaman \u00c7izelgesi):<\/strong> Bir PostgreSQL veritaban\u0131 k\u00fcmesinin ya\u015fam d\u00f6ng\u00fcs\u00fcndeki bir noktay\u0131 temsil eder. Birincil sunucu bir hata durumunda kurtar\u0131ld\u0131\u011f\u0131nda veya bir bekleme sunucusu birincil sunucuya terfi ettirildi\u011finde yeni bir zaman \u00e7izelgesi (timeline) olu\u015fturulur. Bu, ge\u00e7mi\u015f WAL dosyalar\u0131n\u0131n kar\u0131\u015fmas\u0131n\u0131 \u00f6nler.<br \/>\n*   <strong>Replication Slot (Ak\u0131\u015f Replikasyonu Yuvas\u0131):<\/strong> Birincil sunucuda tan\u0131mlanan kal\u0131c\u0131 bir mekanizmad\u0131r. Bekleme sunucusunun WAL kay\u0131tlar\u0131n\u0131 almay\u0131 b\u0131rakmas\u0131 durumunda, birincil sunucunun bu WAL kay\u0131tlar\u0131n\u0131 silmesini engeller. Bu, bekleme sunucusunun tekrar \u00e7evrimi\u00e7i oldu\u011funda eksik WAL dosyalar\u0131 nedeniyle replikasyonun bozulmas\u0131n\u0131 \u00f6nler. Replikasyon slotlar\u0131, \u00f6zellikle a\u011f kesintileri veya bekleme sunucusu bak\u0131mlar\u0131 s\u0131ras\u0131nda veri kayb\u0131 riskini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<br \/>\n*   <strong><code>standby.signal<\/code>:<\/strong> PostgreSQL 12 ve sonraki s\u00fcr\u00fcmlerde, <code>recovery.conf<\/code> dosyas\u0131n\u0131n yerini alan sinyal dosyas\u0131d\u0131r. Veri dizininde bu dosyan\u0131n varl\u0131\u011f\u0131, PostgreSQL sunucusunun bekleme modunda ba\u015flamas\u0131 gerekti\u011fini belirtir. Replikasyon ayarlar\u0131 ise <code>postgresql.conf<\/code> dosyas\u0131na ta\u015f\u0131nm\u0131\u015ft\u0131r.<br \/>\n*   <strong>PITR (Point-in-Time Recovery):<\/strong> Belirli bir zamana geri d\u00f6nerek veritaban\u0131n\u0131 kurtarma yetene\u011fidir. Fiziksel ak\u0131\u015f replikasyonu, PITR i\u00e7in de temel olu\u015fturur \u00e7\u00fcnk\u00fc WAL dosyalar\u0131 bu kurtarma i\u015flemi i\u00e7in gereklidir.<\/p>\n<h2>Kurulum Ad\u0131mlar\u0131<\/h2>\n<p>\u015eimdi ad\u0131m ad\u0131m fiziksel ak\u0131\u015f replikasyonunu kurmaya ba\u015flayal\u0131m.<\/p>\n<h3>1. PostgreSQL Kurulumu<\/h3>\n<p>Her iki sunucuda da PostgreSQL 12&#8217;nin kurulu oldu\u011fundan emin olun. E\u011fer kurulu de\u011filse a\u015fa\u011f\u0131daki komutlar\u0131 kullanarak kurabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install postgresql-12<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra PostgreSQL servisi otomatik olarak ba\u015flayacakt\u0131r.<\/p>\n<h3>2. A\u011f Yap\u0131land\u0131rmas\u0131 ve G\u00fcvenlik Duvar\u0131<\/h3>\n<p>\u0130ki sunucu aras\u0131ndaki ileti\u015fimin sorunsuz oldu\u011fundan emin olmal\u0131y\u0131z. \u00d6rnek IP adreslerimiz:<br \/>\n*   Primary Sunucu: <code>192.168.1.10<\/code><br \/>\n*   Standby Sunucu: <code>192.168.1.11<\/code><\/p>\n<p>Her iki sunucuda da UFW (Uncomplicated Firewall) kullan\u0131yorsan\u0131z, PostgreSQL&#8217;in varsay\u0131lan portu olan 5432&#8217;ye eri\u015fime izin vermelisiniz:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 5432\/tcp\nsudo ufw enable\nsudo ufw status<\/code><\/pre>\n<p><code>ufw status<\/code> \u00e7\u0131kt\u0131s\u0131nda 5432 portunun izinli oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h3>3. Primary Sunucu Ayarlar\u0131 (<code>192.168.1.10<\/code>)<\/h3>\n<p>Primary sunucuda PostgreSQL&#8217;in replikasyona izin verecek \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131 gerekmektedir.<\/p>\n<h4>3.1. <code>postgresql.conf<\/code> D\u00fczenlemeleri<\/h4>\n<p>PostgreSQL yap\u0131land\u0131rma dosyas\u0131 genellikle <code>\/etc\/postgresql\/12\/main\/postgresql.conf<\/code> yolundad\u0131r. Bu dosyay\u0131 bir metin d\u00fczenleyici ile a\u00e7\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/postgresql\/12\/main\/postgresql.conf<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki parametreleri bulun ve de\u011ferlerini ayarlay\u0131n (e\u011fer yorum sat\u0131r\u0131 halindeyse <code>#<\/code> i\u015faretini kald\u0131r\u0131n):<\/p>\n<p><em>   <strong><code>listen_addresses = '<\/em>'<\/code><\/strong>: PostgreSQL&#8217;in t\u00fcm a\u011f aray\u00fczlerinden gelen ba\u011flant\u0131lar\u0131 dinlemesini sa\u011flar. Yaln\u0131zca belirli bir IP adresinden ba\u011flant\u0131lar\u0131 kabul etmek isterseniz, o IP adresini de belirtebilirsiniz (\u00f6rn: <code>'localhost,192.168.1.10'<\/code>).<br \/>\n*   <strong><code>wal_level = replica<\/code><\/strong>: Replikasyon i\u00e7in gerekli minimum WAL bilgilerinin g\u00fcnl\u00fc\u011fe kaydedilmesini sa\u011flar. PostgreSQL 9.6&#8217;dan itibaren <code>hot_standby<\/code> yerine <code>replica<\/code> kullan\u0131lmas\u0131 \u00f6nerilir.<br \/>\n*   <strong><code>max_wal_senders = 10<\/code><\/strong>: Ayn\u0131 anda ka\u00e7 adet bekleme sunucusunun veya <code>pg_basebackup<\/code> i\u015fleminin birincil sunucudan WAL ak\u0131\u015f\u0131 alabilece\u011fini belirler. En az bekleme sunucusu say\u0131s\u0131 kadar olmal\u0131, yedekli olmas\u0131 i\u00e7in biraz daha y\u00fcksek ayarlanmas\u0131 tavsiye edilir.<br \/>\n*   <strong><code>wal_keep_segments = 64<\/code><\/strong>: Birincil sunucunun diskte ka\u00e7 adet WAL segmentini saklayaca\u011f\u0131n\u0131 belirler. Bekleme sunucusunun birincil sunucudan geride kalmas\u0131 durumunda, bu segmentler sayesinde replikasyonun devam etmesi sa\u011flan\u0131r. \u00c7ok d\u00fc\u015f\u00fck bir de\u011fer, bekleme sunucusunun WAL dosyalar\u0131n\u0131 ka\u00e7\u0131rmas\u0131na ve replikasyonun bozulmas\u0131na neden olabilir. Genellikle 32-128 aras\u0131nda bir de\u011fer yeterlidir, ancak i\u015f y\u00fck\u00fcn\u00fcze ve a\u011f gecikmelerine g\u00f6re ayarlanmal\u0131d\u0131r. Replikasyon slotlar\u0131 kullan\u0131ld\u0131\u011f\u0131nda bu parametrenin \u00f6nemi azal\u0131r, ancak yine de bir miktar tampon g\u00f6revi g\u00f6r\u00fcr.<br \/>\n*   <strong><code>hot_standby = on<\/code><\/strong>: Bu parametre asl\u0131nda bekleme sunucusu i\u00e7in ge\u00e7erlidir, ancak <code>pg_basebackup -R<\/code> komutu primary&#8217;de de bu ayar\u0131 bulup kopyalayaca\u011f\u0131 i\u00e7in burada da belirtmekte fayda var.<\/p>\n<p>Kaydedip dosyay\u0131 kapat\u0131n.<\/p>\n<h4>3.2. <code>pg_hba.conf<\/code> D\u00fczenlemeleri<\/h4>\n<p>Bu dosya, PostgreSQL&#8217;e kimlerin ve nereden ba\u011flanabilece\u011fini kontrol eder. <code>pg_hba.conf<\/code> dosyas\u0131 genellikle <code>\/etc\/postgresql\/12\/main\/pg_hba.conf<\/code> yolundad\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/postgresql\/12\/main\/pg_hba.conf<\/code><\/pre>\n<p>Dosyan\u0131n sonuna a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code class=\"language-\"># TYPE  DATABASE        USER            ADDRESS                 METHOD\nhost    replication     replicator      192.168.1.11\/32         md5<\/code><\/pre>\n<p>*   <strong><code>host<\/code><\/strong>: TCP\/IP ba\u011flant\u0131lar\u0131 i\u00e7in.<br \/>\n*   <strong><code>replication<\/code><\/strong>: Replikasyon ba\u011flant\u0131lar\u0131 i\u00e7in \u00f6zel bir veritaban\u0131 ad\u0131.<br \/>\n*   <strong><code>replicator<\/code><\/strong>: Replikasyon i\u00e7in kullanaca\u011f\u0131m\u0131z kullan\u0131c\u0131 ad\u0131.<br \/>\n*   <strong><code>192.168.1.11\/32<\/code><\/strong>: Bekleme sunucusunun IP adresi. <code>\/32<\/code> maskesi sadece bu IP&#8217;den gelen ba\u011flant\u0131lara izin verir. Birden fazla bekleme sunucunuz varsa, her biri i\u00e7in ayr\u0131 bir sat\u0131r ekleyebilir veya bir IP aral\u0131\u011f\u0131 belirtebilirsiniz (\u00f6rn: <code>192.168.1.0\/24<\/code>).<br \/>\n*   <strong><code>md5<\/code><\/strong>: Ba\u011flant\u0131 i\u00e7in parola tabanl\u0131 kimlik do\u011frulama kullan\u0131r. Daha g\u00fcvenli bir y\u00f6ntemdir. Test ama\u00e7l\u0131 <code>trust<\/code> kullanmaktan ka\u00e7\u0131n\u0131n.<\/p>\n<p>Kaydedip dosyay\u0131 kapat\u0131n.<\/p>\n<h4>3.3. Replikasyon Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/h4>\n<p>Primary sunucuda, bekleme sunucusunun ba\u011flanmak i\u00e7in kullanaca\u011f\u0131 \u00f6zel bir replikasyon kullan\u0131c\u0131s\u0131 olu\u015fturmal\u0131y\u0131z. <code>postgres<\/code> kullan\u0131c\u0131s\u0131na ge\u00e7i\u015f yap\u0131n ve <code>psql<\/code> konsolunu a\u00e7\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<p><code>psql<\/code> konsolunda a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-sql\">CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT -1 ENCRYPTED PASSWORD 'your_secure_password';<\/code><\/pre>\n<p>*   <strong><code>replicator<\/code><\/strong>: Kullan\u0131c\u0131 ad\u0131.<br \/>\n*   <strong><code>REPLICATION<\/code><\/strong>: Bu kullan\u0131c\u0131n\u0131n replikasyon ba\u011flant\u0131lar\u0131 kurabilece\u011fini belirtir.<br \/>\n*   <strong><code>LOGIN<\/code><\/strong>: Bu kullan\u0131c\u0131n\u0131n giri\u015f yapabilece\u011fini belirtir.<br \/>\n*   <strong><code>CONNECTION LIMIT -1<\/code><\/strong>: Ba\u011flant\u0131 say\u0131s\u0131 \u00fczerinde bir limit olmad\u0131\u011f\u0131n\u0131 belirtir.<br \/>\n*   <strong><code>ENCRYPTED PASSWORD 'your_secure_password'<\/code><\/strong>: G\u00fcvenli bir parola belirleyin. <code>'your_secure_password'<\/code> k\u0131sm\u0131n\u0131 kendi parolan\u0131zla de\u011fi\u015ftirin.<\/p>\n<p><code>\\q<\/code> yazarak <code>psql<\/code> konsolundan \u00e7\u0131k\u0131n ve <code>exit<\/code> yazarak <code>postgres<\/code> kullan\u0131c\u0131s\u0131ndan \u00e7\u0131k\u0131n.<\/p>\n<h4>3.4. PostgreSQL Servisini Yeniden Ba\u015flatma<\/h4>\n<p>Yapt\u0131\u011f\u0131n\u0131z yap\u0131land\u0131rma de\u011fi\u015fikliklerinin etkili olmas\u0131 i\u00e7in PostgreSQL servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart postgresql@12-main<\/code><\/pre>\n<p>Servisin sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status postgresql@12-main<\/code><\/pre>\n<h4>3.5. Replikasyon Slotu Olu\u015fturma (\u00d6nerilir)<\/h4>\n<p>Replikasyon slotlar\u0131, bekleme sunucusu \u00e7evrimd\u0131\u015f\u0131 olsa bile birincil sunucunun gerekli WAL segmentlerini saklamas\u0131n\u0131 garanti eder. Bu, bekleme sunucusu tekrar \u00e7evrimi\u00e7i oldu\u011funda replikasyonun kald\u0131\u011f\u0131 yerden devam etmesini sa\u011flar ve WAL dosyalar\u0131n\u0131n eksikli\u011fi nedeniyle replikasyonun bozulmas\u0131n\u0131 \u00f6nler.<\/p>\n<p><code>postgres<\/code> kullan\u0131c\u0131s\u0131 olarak <code>psql<\/code> konsoluna girin ve slotu olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql -c \"SELECT * FROM pg_create_physical_replication_slot('standby_slot');\"<\/code><\/pre>\n<p>Burada <code>'standby_slot'<\/code> replikasyon slotunun ad\u0131d\u0131r. Bu ad\u0131 bekleme sunucusu yap\u0131land\u0131rmas\u0131nda kullanaca\u011f\u0131z.<br \/>\nSlotun ba\u015far\u0131yla olu\u015fturuldu\u011funu do\u011frulamak i\u00e7in:<\/p>\n<pre><code class=\"language-sql\">SELECT slot_name, slot_type, active, restart_lsn, wal_status FROM pg_replication_slots;<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>standby_slot<\/code> ad\u0131nda, <code>physical<\/code> tipinde ve <code>active: f<\/code> (\u015fu anda aktif de\u011fil, \u00e7\u00fcnk\u00fc standby ba\u011fl\u0131 de\u011fil) bir slot g\u00f6rmelisiniz.<\/p>\n<h3>4. Standby Sunucu Ayarlar\u0131 (<code>192.168.1.11<\/code>)<\/h3>\n<p>\u015eimdi bekleme sunucusunu primary sunucunun bir kopyas\u0131 olacak \u015fekilde yap\u0131land\u0131raca\u011f\u0131z.<\/p>\n<h4>4.1. Mevcut Veritaban\u0131n\u0131 Durdurma ve Temizleme<\/h4>\n<p>Bekleme sunucusundaki PostgreSQL servisini durdurun ve mevcut veri dizinini temizleyin. <strong>Bu i\u015flem, bekleme sunucusundaki t\u00fcm mevcut veriyi silecektir. \u00dcretim ortam\u0131nda bu ad\u0131m\u0131 atmadan \u00f6nce \u00e7ok dikkatli olun ve yedek ald\u0131\u011f\u0131n\u0131zdan emin olun.<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo systemctl stop postgresql@12-main<\/code><\/pre>\n<p>Veri dizinini temizleyin:<\/p>\n<pre><code class=\"language-bash\">sudo rm -rf \/var\/lib\/postgresql\/12\/main\/*<\/code><\/pre>\n<p>Bu komut, <code>\/var\/lib\/postgresql\/12\/main<\/code> dizini alt\u0131ndaki t\u00fcm dosya ve dizinleri siler.<\/p>\n<h4>4.2. Veritaban\u0131 Kopyalama (Base Backup)<\/h4>\n<p><code>pg_basebackup<\/code> arac\u0131, birincil sunucudan bekleme sunucusuna veritaban\u0131n\u0131n ba\u015flang\u0131\u00e7 kopyas\u0131n\u0131 (base backup) almak i\u00e7in kullan\u0131l\u0131r. Bu, replikasyonun ba\u015flang\u0131\u00e7 noktas\u0131n\u0131 olu\u015fturur.<\/p>\n<p>Bekleme sunucusunda, <code>postgres<\/code> kullan\u0131c\u0131s\u0131 olarak a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npg_basebackup -h 192.168.1.10 -D \/var\/lib\/postgresql\/12\/main -U replicator -P -v -R -X stream -S standby_slot<\/code><\/pre>\n<p>Bu komutun parametreleri \u015funlard\u0131r:<br \/>\n*   <strong><code>-h 192.168.1.10<\/code><\/strong>: Birincil sunucunun IP adresi.<br \/>\n*   <strong><code>-D \/var\/lib\/postgresql\/12\/main<\/code><\/strong>: Bekleme sunucusunda veritaban\u0131 dosyalar\u0131n\u0131n kopyalanaca\u011f\u0131 dizin. Bu, PostgreSQL&#8217;in varsay\u0131lan veri dizinidir.<br \/>\n*   <strong><code>-U replicator<\/code><\/strong>: Birincil sunucuda olu\u015fturdu\u011fumuz replikasyon kullan\u0131c\u0131s\u0131.<br \/>\n*   <strong><code>-P<\/code><\/strong>: \u0130lerleme g\u00f6stergesini etkinle\u015ftirir.<br \/>\n*   <strong><code>-v<\/code><\/strong>: Ayr\u0131nt\u0131l\u0131 (verbose) \u00e7\u0131kt\u0131 sa\u011flar.<br \/>\n*   <strong><code>-R<\/code><\/strong>: Bu \u00e7ok \u00f6nemli bir parametredir. PostgreSQL 12 ve sonraki s\u00fcr\u00fcmler i\u00e7in, bekleme sunucusunun veri dizininde <code>standby.signal<\/code> dosyas\u0131n\u0131 olu\u015fturur ve <code>postgresql.conf<\/code> i\u00e7ine <code>primary_conninfo<\/code> ayar\u0131n\u0131 ekler. Bu ayarlar, bekleme sunucusunun birincil sunucuya nas\u0131l ba\u011flanaca\u011f\u0131n\u0131 ve replikasyonu nas\u0131l ba\u015flataca\u011f\u0131n\u0131 belirtir.<br \/>\n*   <strong><code>-X stream<\/code><\/strong>: WAL (Write-Ahead Log) dosyalar\u0131n\u0131 temel yedekleme ile birlikte ak\u0131\u015f olarak al\u0131r. Bu, yedekleme tamamland\u0131ktan sonra hemen replikasyonun ba\u015flamas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong><code>-S standby_slot<\/code><\/strong>: Birincil sunucuda olu\u015fturdu\u011fumuz replikasyon slotunun ad\u0131n\u0131 belirtir. Bu, WAL dosyalar\u0131n\u0131n kaybolmamas\u0131n\u0131 garanti eder.<\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, <code>replicator<\/code> kullan\u0131c\u0131s\u0131n\u0131n parolas\u0131n\u0131 girmeniz istenecektir.<\/p>\n<h4>4.3. <code>standby.signal<\/code> ve <code>postgresql.conf<\/code> Kontrol\u00fc\/D\u00fczenlemesi<\/h4>\n<p><code>pg_basebackup -R<\/code> komutu, gerekli ayarlar\u0131 otomatik olarak yapar. Ancak yine de kontrol etmek ve gerekirse d\u00fczenlemek \u00f6nemlidir.<\/p>\n<p>*   <strong><code>standby.signal<\/code> dosyas\u0131:<\/strong> <code>\/var\/lib\/postgresql\/12\/main\/<\/code> dizininde <code>standby.signal<\/code> ad\u0131nda bo\u015f bir dosya bulunmal\u0131d\u0131r. Bu dosyan\u0131n varl\u0131\u011f\u0131, PostgreSQL&#8217;in bekleme modunda ba\u015flamas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong><code>postgresql.conf<\/code> i\u00e7indeki <code>primary_conninfo<\/code>:<\/strong> <code>pg_basebackup<\/code> komutu, <code>\/var\/lib\/postgresql\/12\/main\/postgresql.conf<\/code> dosyas\u0131n\u0131n sonuna <code>primary_conninfo<\/code> ayar\u0131n\u0131 eklemi\u015f olmal\u0131d\u0131r. Bu ayar\u0131 kontrol edin ve gerekirse d\u00fczenleyin:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/var\/lib\/postgresql\/12\/main\/postgresql.conf<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki sat\u0131r\u0131 g\u00f6rmelisiniz (veya benzerini):<\/p>\n<pre><code class=\"language-\">primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=your_secure_password application_name=standby1'<\/code><\/pre>\n<p>*   <strong><code>host<\/code><\/strong>: Birincil sunucunun IP adresi.<br \/>\n*   <strong><code>port<\/code><\/strong>: Birincil sunucunun PostgreSQL portu.<br \/>\n*   <strong><code>user<\/code><\/strong>: Replikasyon kullan\u0131c\u0131s\u0131.<br \/>\n*   <strong><code>password<\/code><\/strong>: Replikasyon kullan\u0131c\u0131s\u0131n\u0131n parolas\u0131. <strong>Bu parolan\u0131n buraya yaz\u0131lmas\u0131 g\u00fcvenlik a\u00e7\u0131s\u0131ndan ideal de\u011fildir. Daha g\u00fcvenli bir y\u00f6ntem i\u00e7in <code>.pgpass<\/code> dosyas\u0131n\u0131 kullanmak veya <code>sslmode<\/code> gibi ayarlar\u0131 yap\u0131land\u0131rmak \u00f6nerilir.<\/strong> Ancak basit bir kurulum i\u00e7in bu y\u00f6ntem kullan\u0131labilir.<br \/>\n*   <strong><code>application_name<\/code><\/strong>: Bu, birincil sunucudaki <code>pg_stat_replication<\/code> g\u00f6r\u00fcn\u00fcm\u00fcnde bekleme sunucusunu tan\u0131mlamak i\u00e7in kullan\u0131lan bir isimdir.<\/p>\n<p>Ayr\u0131ca, bekleme sunucusunun okuma sorgular\u0131na izin vermesi i\u00e7in <code>hot_standby = on<\/code> ayar\u0131n\u0131 da kontrol edin ve etkinle\u015ftirin (e\u011fer otomatik olarak eklenmediyse):<\/p>\n<pre><code class=\"language-\">hot_standby = on<\/code><\/pre>\n<p>Kaydedip dosyay\u0131 kapat\u0131n.<\/p>\n<h4>4.4. Veri Dizini \u0130zinlerini Ayarlama<\/h4>\n<p><code>pg_basebackup<\/code> komutu genellikle do\u011fru izinlerle dosyalar\u0131 kopyalar, ancak yine de emin olmak i\u00e7in veri dizininin sahibi ve izinlerini kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo chown -R postgres:postgres \/var\/lib\/postgresql\/12\/main\nsudo chmod -R 0700 \/var\/lib\/postgresql\/12\/main<\/code><\/pre>\n<p>Bu komutlar, veri dizininin sahibini <code>postgres<\/code> kullan\u0131c\u0131s\u0131 ve grubuna ayarlar ve yaln\u0131zca sahibin okuma, yazma ve \u00e7al\u0131\u015ft\u0131rma izinlerine sahip olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>4.5. PostgreSQL Servisini Ba\u015flatma<\/h4>\n<p>Art\u0131k bekleme sunucusundaki PostgreSQL servisini ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start postgresql@12-main<\/code><\/pre>\n<p>Servisin sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status postgresql@12-main<\/code><\/pre>\n<p>Servis <code>in recovery<\/code> durumunda ba\u015flamal\u0131 ve birincil sunucuya ba\u011flanarak WAL kay\u0131tlar\u0131n\u0131 almaya ba\u015flamal\u0131d\u0131r.<\/p>\n<h3>5. Replikasyon Durumunu Kontrol Etme<\/h3>\n<p>Replikasyonun do\u011fru \u015fekilde \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in her iki sunucuda da baz\u0131 kontroller yapmal\u0131y\u0131z.<\/p>\n<h4>5.1. Primary Sunucuda Kontrol<\/h4>\n<p>Primary sunucuda <code>postgres<\/code> kullan\u0131c\u0131s\u0131 olarak <code>psql<\/code> konsoluna girin:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<p>Replikasyon durumunu kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki sorguyu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-sql\">SELECT client_addr, state, sync_state, sync_priority, application_name FROM pg_stat_replication;<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da bekleme sunucusunun IP adresi (<code>client_addr<\/code>), ba\u011flant\u0131 durumu (<code>state<\/code> &#8211; <code>streaming<\/code> olmal\u0131), senkronizasyon durumu (<code>sync_state<\/code> &#8211; <code>async<\/code> veya <code>sync<\/code> olabilir, varsay\u0131lan olarak <code>async<\/code>), senkronizasyon \u00f6nceli\u011fi ve <code>application_name<\/code> (standby1 olarak ayarlam\u0131\u015ft\u0131k) g\u00f6r\u00fcnmelidir. <code>state<\/code> s\u00fctunu <code>streaming<\/code> ise, replikasyon ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131yor demektir.<\/p>\n<p>Replikasyon slotunun durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-sql\">SELECT slot_name, slot_type, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;<\/code><\/pre>\n<p>Bu sorgunun \u00e7\u0131kt\u0131s\u0131nda <code>standby_slot<\/code>&#8216;un <code>active: t<\/code> (true) oldu\u011funu g\u00f6rmelisiniz. <code>restart_lsn<\/code> ve <code>confirmed_flush_lsn<\/code> de\u011ferleri de art\u0131yor olmal\u0131d\u0131r.<\/p>\n<h4>5.2. Standby Sunucuda Kontrol<\/h4>\n<p>Standby sunucuda <code>postgres<\/code> kullan\u0131c\u0131s\u0131 olarak <code>psql<\/code> konsoluna girin:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<p>Sunucunun kurtarma modunda olup olmad\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-sql\">SELECT pg_is_in_recovery();<\/code><\/pre>\n<p>Bu sorgu <code>t<\/code> (true) d\u00f6nd\u00fcrmelidir, bu da sunucunun bekleme modunda \u00e7al\u0131\u015ft\u0131\u011f\u0131 anlam\u0131na gelir.<\/p>\n<p>WAL kay\u0131tlar\u0131n\u0131n al\u0131nd\u0131\u011f\u0131 ve uyguland\u0131\u011f\u0131 son konumlar\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-sql\">SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();<\/code><\/pre>\n<p>Bu iki LSN (Log Sequence Number) de\u011feri yak\u0131n olmal\u0131 veya ayn\u0131 olmal\u0131d\u0131r. <code>pg_last_wal_receive_lsn()<\/code> al\u0131nan son WAL konumunu, <code>pg_last_wal_replay_lsn()<\/code> ise uygulanan son WAL konumunu g\u00f6sterir. E\u011fer <code>pg_last_wal_receive_lsn()<\/code> s\u00fcrekli olarak <code>pg_last_wal_replay_lsn()<\/code>&#8216;den y\u00fcksekse, bu replikasyon gecikmesi (lag) oldu\u011funu g\u00f6sterir.<\/p>\n<h4>5.3. Veri Ekleme ve Sorgulama Testi<\/h4>\n<p>Replikasyonun ger\u00e7ekten \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in primary sunucuda bir veri ekleyin ve ard\u0131ndan hemen standby sunucuda bu veriyi sorgulay\u0131n.<\/p>\n<p><strong>Primary Sunucuda:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<pre><code class=\"language-sql\">CREATE DATABASE test_db;\n\\c test_db;\nCREATE TABLE my_table (id SERIAL PRIMARY KEY, name VARCHAR(100), created_at TIMESTAMP DEFAULT NOW());\nINSERT INTO my_table (name) VALUES ('Test Verisi 1');\nINSERT INTO my_table (name) VALUES ('Test Verisi 2');\nSELECT * FROM my_table;<\/code><\/pre>\n<p><code>\\q<\/code> ile \u00e7\u0131k\u0131n.<\/p>\n<p><strong>Standby Sunucuda:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<pre><code class=\"language-sql\">\\c test_db;\nSELECT * FROM my_table;<\/code><\/pre>\n<p>Standby sunucuda <code>my_table<\/code> i\u00e7indeki verileri g\u00f6rmelisiniz. E\u011fer g\u00f6r\u00fcyorsan\u0131z, fiziksel ak\u0131\u015f replikasyonu ba\u015far\u0131yla kurulmu\u015f demektir! <code>\\q<\/code> ile \u00e7\u0131k\u0131n.<\/p>\n<h2>Y\u00fcksek Eri\u015filebilirlik ve Failover<\/h2>\n<p>Fiziksel ak\u0131\u015f replikasyonu, y\u00fcksek eri\u015filebilirli\u011fin temelini olu\u015fturur. Ancak, birincil sunucunun \u00e7\u00f6kmesi durumunda bekleme sunucusunun otomatik olarak birincil sunucuya terfi etmesi (failover) i\u00e7in ek ara\u00e7lara ihtiya\u00e7 vard\u0131r.<\/p>\n<h3>Manuel Failover S\u00fcreci<\/h3>\n<p>Birincil sunucu tamamen eri\u015filemez hale geldi\u011finde, bekleme sunucusunu manuel olarak birincil sunucuya terfi ettirebilirsiniz. Bu, dikkatli bir s\u00fcre\u00e7 gerektirir:<\/p>\n<p>1.  <strong>Birincil Sunucunun Eri\u015filemez Oldu\u011funu Do\u011frulay\u0131n:<\/strong> \u00d6ncelikle primary sunucunun ger\u00e7ekten \u00e7\u00f6kt\u00fc\u011f\u00fcnden ve geri gelemeyece\u011finden emin olun. Yanl\u0131\u015f bir terfi, &#8220;split-brain&#8221; senaryosuna yol a\u00e7abilir (iki primary sunucu ayn\u0131 anda \u00e7al\u0131\u015f\u0131r ve veri tutars\u0131zl\u0131\u011f\u0131na neden olur).<br \/>\n2.  <strong>Bekleme Sunucusunu Terfi Ettirin:<\/strong> Bekleme sunucusunda <code>postgres<\/code> kullan\u0131c\u0131s\u0131 olarak a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\n    pg_ctlcluster 12 main promote<\/code><\/pre>\n<p>    Alternatif olarak, veri dizininde <code>promote<\/code> sinyal dosyas\u0131 olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">touch \/var\/lib\/postgresql\/12\/main\/promote<\/code><\/pre>\n<p>    Bu komut veya dosya, bekleme sunucusunun kurtarma modundan \u00e7\u0131k\u0131p birincil sunucu rol\u00fcn\u00fc \u00fcstlenmesini sa\u011flar.<br \/>\n3.  <strong>Uygulamalar\u0131 Yeni Primary&#8217;ye Y\u00f6nlendirin:<\/strong> Uygulamalar\u0131n\u0131z\u0131n veritaban\u0131 ba\u011flant\u0131 dizelerini (connection strings) yeni primary sunucunun IP adresine veya ana bilgisayar ad\u0131na g\u00fcncelleyin.<br \/>\n4.  <strong>Eski Primary&#8217;yi Kapat\u0131n (Gerekirse):<\/strong> E\u011fer eski primary sunucu hala \u00e7al\u0131\u015f\u0131yorsa veya tekrar \u00e7evrimi\u00e7i olursa, split-brain&#8217;i \u00f6nlemek i\u00e7in onu kapatmal\u0131s\u0131n\u0131z.<br \/>\n5.  <strong>Yeni Standby Kurulumu:<\/strong> E\u011fer eski primary sunucuyu onar\u0131p tekrar kullanmak isterseniz, onu yeni primary sunucunun bir beklemesi olarak yeniden yap\u0131land\u0131rman\u0131z gerekecektir. Bu, yukar\u0131da anlat\u0131lan <code>pg_basebackup<\/code> ve di\u011fer ad\u0131mlar\u0131n tekrar uygulanmas\u0131n\u0131 gerektirir.<\/p>\n<p>Manuel failover, h\u0131zl\u0131 bir m\u00fcdahale gerektiren ve insan hatas\u0131na a\u00e7\u0131k bir s\u00fcre\u00e7tir.<\/p>\n<h3>Otomatik Failover Ara\u00e7lar\u0131<\/h3>\n<p>\u00dcretim ortamlar\u0131nda, otomatik failover ve y\u00f6netim i\u00e7in \u00f6zel ara\u00e7lar kullan\u0131lmas\u0131 \u015fiddetle tavsiye edilir. Bu ara\u00e7lar, birincil sunucunun durumunu izler, ar\u0131za durumunda bekleme sunucusunu otomatik olarak terfi ettirir ve yeni bir topoloji olu\u015fturur. Pop\u00fcler ara\u00e7lardan baz\u0131lar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Patroni:<\/strong> Geli\u015fmi\u015f bir HA \u00e7\u00f6z\u00fcm\u00fc olup, da\u011f\u0131t\u0131lm\u0131\u015f yap\u0131land\u0131rma depolama (etcd, Consul, ZooKeeper) kullanarak otomatik failover, anahtarlama (switchover) ve k\u00fcme y\u00f6netimi sa\u011flar.<br \/>\n*   <strong>pg_auto_failover:<\/strong> Microsoft taraf\u0131ndan geli\u015ftirilen ve PostgreSQL&#8217;e entegre edilmi\u015f, kullan\u0131m\u0131 kolay bir otomatik failover \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.<br \/>\n*   <strong>repmgr:<\/strong> Replikasyon y\u00f6netimi ve failover i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<p>Bu ara\u00e7lar\u0131n kurulumu ve yap\u0131land\u0131rmas\u0131 bu makalenin kapsam\u0131 d\u0131\u015f\u0131ndad\u0131r, ancak y\u00fcksek eri\u015filebilir bir sistem kurarken g\u00f6z \u00f6n\u00fcnde bulundurulmalar\u0131 \u00f6nemlidir.<\/p>\n<h2>Performans ve Optimizasyon \u0130pu\u00e7lar\u0131<\/h2>\n<p>Replikasyonun verimli \u00e7al\u0131\u015fmas\u0131 i\u00e7in baz\u0131 optimizasyonlar ve dikkat edilmesi gereken noktalar vard\u0131r:<\/p>\n<p>*   <strong><code>wal_level<\/code>:<\/strong> <code>replica<\/code> seviyesi, replikasyon i\u00e7in gereken t\u00fcm bilgileri sa\u011flar. Daha y\u00fcksek seviyeler (\u00f6rn: <code>logical<\/code>) daha fazla disk alan\u0131 ve I\/O kullanabilir.<br \/>\n*   <strong><code>max_wal_senders<\/code>:<\/strong> Yeterli say\u0131da WAL g\u00f6nderici s\u00fcrecinin oldu\u011fundan emin olun. Bekleme sunucusu say\u0131n\u0131zdan fazla olmal\u0131, b\u00f6ylece <code>pg_basebackup<\/code> gibi di\u011fer i\u015flemler de WAL ak\u0131\u015f\u0131 alabilir.<br \/>\n*   <strong><code>wal_keep_segments<\/code>:<\/strong> Replikasyon slotlar\u0131 kullan\u0131l\u0131yorsa bu parametrenin \u00f6nemi azal\u0131r, ancak bir tampon olarak hala de\u011ferlidir. A\u011f gecikmeleri veya bekleme sunucusu kesintileri s\u0131ras\u0131nda WAL dosyalar\u0131n\u0131n silinmesini \u00f6nlemeye yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Replikasyon Slotlar\u0131:<\/strong> Kesinlikle kullan\u0131n! WAL dosyalar\u0131n\u0131n kaybolmas\u0131n\u0131 ve replikasyonun bozulmas\u0131n\u0131 engellerler.<br \/>\n*   <strong>A\u011f Bant Geni\u015fli\u011fi:<\/strong> Primary ve standby sunucular\u0131 aras\u0131ndaki a\u011f ba\u011flant\u0131s\u0131n\u0131n yeterli bant geni\u015fli\u011fine sahip oldu\u011fundan emin olun. Yo\u011fun yazma i\u015f y\u00fckleri, y\u00fcksek WAL \u00fcretimi anlam\u0131na gelir ve bu da daha fazla a\u011f trafi\u011fi demektir.<br \/>\n*   <strong>Disk I\/O Performans\u0131:<\/strong> Hem primary hem de standby sunuculardaki disklerin y\u00fcksek I\/O performans\u0131na sahip olmas\u0131 \u00f6nemlidir. \u00d6zellikle standby sunucuda WAL&#8217;lar\u0131n h\u0131zl\u0131 bir \u015fekilde uygulanmas\u0131 gerekir. SSD&#8217;ler veya NVMe s\u00fcr\u00fcc\u00fcler tercih edilmelidir.<br \/>\n*   <strong>Senkron Replikasyon:<\/strong> Varsay\u0131lan olarak replikasyon asenkrondur (async). Bu, primary sunucunun bir i\u015flemi tamamlamadan \u00f6nce WAL kay\u0131tlar\u0131n\u0131n standby&#8217;a ula\u015fmas\u0131n\u0131 beklemedi\u011fi anlam\u0131na gelir. Daha y\u00fcksek veri g\u00fcvenli\u011fi i\u00e7in senkron replikasyon (<code>synchronous_commit = on<\/code> ve <code>synchronous_standby_names<\/code>) yap\u0131land\u0131r\u0131labilir, ancak bu primary sunucunun yazma performans\u0131n\u0131 olumsuz etkileyebilir.<\/p>\n<h2>Yayg\u0131n Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h2>\n<p>Replikasyon kurulumu s\u0131ras\u0131nda veya sonras\u0131nda kar\u015f\u0131la\u015f\u0131labilecek baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Ba\u011flant\u0131 Sorunlar\u0131:<\/strong><br \/>\n    *   <strong>Belirti:<\/strong> <code>pg_basebackup<\/code> ba\u015far\u0131s\u0131z oluyor veya standby sunucusu primary&#8217;ye ba\u011flanam\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   <code>pg_hba.conf<\/code> dosyas\u0131n\u0131 primary sunucuda do\u011fru yap\u0131land\u0131rd\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n        *   G\u00fcvenlik duvar\u0131nda (UFW, iptables) 5432 portunun a\u00e7\u0131k oldu\u011fundan emin olun.<br \/>\n        *   <code>listen_addresses<\/code> ayar\u0131n\u0131 primary sunucuda kontrol edin.<br \/>\n        *   <code>replicator<\/code> kullan\u0131c\u0131s\u0131n\u0131n parolas\u0131n\u0131n do\u011fru oldu\u011fundan emin olun.<br \/>\n        *   <code>netcat<\/code> veya <code>telnet<\/code> gibi ara\u00e7larla iki sunucu aras\u0131nda 5432 portuna eri\u015fimin olup olmad\u0131\u011f\u0131n\u0131 test edin.<br \/>\n*   <strong>WAL Dosyas\u0131 Eksikli\u011fi \/ Replikasyon Bozulmas\u0131:<\/strong><br \/>\n    *   <strong>Belirti:<\/strong> Standby sunucusu birincil sunucudan WAL dosyalar\u0131n\u0131 alam\u0131yor, hata mesajlar\u0131 <code>WAL segment has been removed<\/code> veya <code>WAL file not found<\/code>.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Replikasyon slotlar\u0131 kullan\u0131l\u0131yorsa, slotun aktif oldu\u011fundan ve primary&#8217;de silinmedi\u011finden emin olun.<br \/>\n        *   <code>wal_keep_segments<\/code> de\u011ferini primary sunucuda art\u0131r\u0131n (e\u011fer replikasyon slotu kullanm\u0131yorsan\u0131z veya ge\u00e7ici bir sorun varsa).<br \/>\n        *   E\u011fer sorun devam ediyorsa, standby sunucusunun veri dizinini temizleyip <code>pg_basebackup<\/code> ile yeniden bir temel yedekleme alman\u0131z gerekebilir.<br \/>\n*   <strong>\u0130zin Sorunlar\u0131:<\/strong><br \/>\n    *   <strong>Belirti:<\/strong> PostgreSQL servisi ba\u015flam\u0131yor, loglarda <code>permission denied<\/code> hatalar\u0131 var.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Bekleme sunucusundaki veri dizininin (<code>\/var\/lib\/postgresql\/12\/main<\/code>) sahibi <code>postgres<\/code> kullan\u0131c\u0131s\u0131 ve grubuna ait oldu\u011fundan ve 0700 izinlerine sahip oldu\u011fundan emin olun.<\/p>\n<pre><code class=\"language-bash\">sudo chown -R postgres:postgres \/var\/lib\/postgresql\/12\/main\n        sudo chmod -R 0700 \/var\/lib\/postgresql\/12\/main<\/code><\/pre>\n<p>*   <strong>Replikasyon Gecikmesi (Replication Lag):<\/strong><br \/>\n    *   <strong>Belirti:<\/strong> <code>pg_last_wal_receive_lsn()<\/code> ve <code>pg_last_wal_replay_lsn()<\/code> aras\u0131ndaki fark s\u00fcrekli art\u0131yor veya <code>pg_stat_replication<\/code> \u00e7\u0131kt\u0131s\u0131nda <code>write_lag<\/code>, <code>flush_lag<\/code>, <code>replay_lag<\/code> de\u011ferleri y\u00fcksek.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   A\u011f ba\u011flant\u0131s\u0131n\u0131 kontrol edin, bant geni\u015fli\u011fi yetersiz olabilir.<br \/>\n        *   Standby sunucusunun disk I\/O performans\u0131n\u0131 kontrol edin, WAL kay\u0131tlar\u0131n\u0131 uygulamakta zorlan\u0131yor olabilir.<br \/>\n        *   Standby sunucusunun donan\u0131m kaynaklar\u0131n\u0131 (CPU, RAM) kontrol edin.<br \/>\n        *   Primary sunucudaki WAL \u00fcretimi \u00e7ok yo\u011fun olabilir, i\u015f y\u00fck\u00fcn\u00fc optimize etmeyi d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n*   <strong><code>standby.signal<\/code> veya <code>primary_conninfo<\/code> Hatas\u0131:<\/strong><br \/>\n    *   <strong>Belirti:<\/strong> Standby sunucusu ba\u015flam\u0131yor veya recovery moduna ge\u00e7miyor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>\/var\/lib\/postgresql\/12\/main\/<\/code> dizininde <code>standby.signal<\/code> dosyas\u0131n\u0131n var oldu\u011fundan ve <code>postgresql.conf<\/code> i\u00e7indeki <code>primary_conninfo<\/code> sat\u0131r\u0131n\u0131n do\u011fru ve eksiksiz oldu\u011fundan emin olun. \u00d6zellikle <code>password<\/code> k\u0131sm\u0131n\u0131 do\u011fru yazd\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>PostgreSQL 12 ile Ubuntu 20.04 \u00fczerinde fiziksel ak\u0131\u015f replikasyonu kurmak, veritaban\u0131 altyap\u0131n\u0131z i\u00e7in y\u00fcksek eri\u015filebilirlik ve veri g\u00fcvenli\u011fi sa\u011flaman\u0131n temel ad\u0131mlar\u0131ndan biridir. Bu makalede, iki sunucu aras\u0131nda WAL tabanl\u0131 replikasyonu ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, gerekli yap\u0131land\u0131rma dosyalar\u0131n\u0131 nas\u0131l d\u00fczenleyece\u011finizi, replikasyon kullan\u0131c\u0131s\u0131n\u0131 nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ve <code>pg_basebackup<\/code> ile ba\u015flang\u0131\u00e7 yedeklemesini nas\u0131l alaca\u011f\u0131n\u0131z\u0131 ayr\u0131nt\u0131l\u0131 olarak ele ald\u0131k.<\/p>\n<p>Replikasyonun ba\u015far\u0131l\u0131 bir \u015fekilde kurulmas\u0131, sisteminizin felaketlere kar\u015f\u0131 direncini art\u0131r\u0131r ve hizmet kesintisi riskini azalt\u0131r. Ayr\u0131ca, bekleme sunucular\u0131n\u0131 okuma ama\u00e7l\u0131 sorgular i\u00e7in kullanarak birincil sunucunun y\u00fck\u00fcn\u00fc hafifletebilir ve genel performans\u0131 art\u0131rabilirsiniz.<\/p>\n<p>Unutmay\u0131n ki manuel failover, insan m\u00fcdahalesi gerektiren ve potansiyel riskler ta\u015f\u0131yan bir y\u00f6ntemdir. \u00dcretim ortamlar\u0131nda, Patroni, pg_auto_failover veya repmgr gibi otomatik failover ara\u00e7lar\u0131n\u0131 kullanarak daha sa\u011flam ve hataya dayan\u0131kl\u0131 bir \u00e7\u00f6z\u00fcm olu\u015fturman\u0131z \u015fiddetle tavsiye edilir. Replikasyonun s\u00fcrekli izlenmesi ve performans optimizasyonlar\u0131, sisteminizin sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir. Bu kurulum rehberi, PostgreSQL replikasyon d\u00fcnyas\u0131na ilk ad\u0131m\u0131n\u0131z\u0131 atman\u0131z i\u00e7in sa\u011flam bir temel sunmaktad\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu\nReplikasyon Nedir ve Neden \u00d6nemlidir?\nVeritab","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-35165","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu Replikasyon Nedir ve Neden \u00d6nemlidir? Veritab\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-26T09:41:01+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu\",\"datePublished\":\"2025-11-26T09:41:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\"},\"wordCount\":3701,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\",\"name\":\"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-26T09:41:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu","og_description":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu Replikasyon Nedir ve Neden \u00d6nemlidir? Veritab","og_url":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-26T09:41:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu","datePublished":"2025-11-26T09:41:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/"},"wordCount":3701,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/","name":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-26T09:41:01+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-12-ile-ubuntu-20-04-uzerinde-fiziksel-akis-replikasyonu-streaming-replication-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 12 ile Ubuntu 20.04 \u00dczerinde Fiziksel Ak\u0131\u015f Replikasyonu (Streaming Replication) Kurulumu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35165"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35165\/revisions"}],"predecessor-version":[{"id":35166,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35165\/revisions\/35166"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}