{"id":30301,"date":"2025-09-26T15:14:52","date_gmt":"2025-09-26T12:14:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30301"},"modified":"2025-09-26T15:15:53","modified_gmt":"2025-09-26T12:15:53","slug":"giris-mongodb-replica-set-nedir-ve-neden-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/","title":{"rendered":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?<\/h2>\n<p>Modern uygulamalar i\u00e7in veri tabanlar\u0131, y\u00fcksek eri\u015filebilirlik, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve \u00f6l\u00e7eklenebilirlik gibi kritik gereksinimleri kar\u015f\u0131lamak zorundad\u0131r. MongoDB, esnek belge tabanl\u0131 yap\u0131s\u0131 ve g\u00fc\u00e7l\u00fc yatay \u00f6l\u00e7eklenebilirlik \u00f6zellikleri ile bu ihtiya\u00e7lar\u0131 kar\u015f\u0131layan pop\u00fcler bir NoSQL veri taban\u0131d\u0131r. MongoDB&#8217;nin sundu\u011fu temel \u00f6zelliklerden biri de &#8220;Replica Set&#8221; kavram\u0131d\u0131r.<\/p>\n<p>Bir MongoDB Replica Set, ayn\u0131 verinin birden fazla kopyas\u0131n\u0131 bar\u0131nd\u0131ran bir grup <code>mongod<\/code> i\u015fleminden olu\u015fur. Bu, veri yedeklili\u011fi sa\u011flayarak sistemin bir veya daha fazla d\u00fc\u011f\u00fcm\u00fcn ar\u0131zalanmas\u0131 durumunda bile \u00e7al\u0131\u015fmaya devam etmesini garanti eder. Bir Replica Set&#8217;in temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Primary (Birincil) D\u00fc\u011f\u00fcm:<\/strong> T\u00fcm yazma i\u015flemlerini kabul eden tek d\u00fc\u011f\u00fcmd\u00fcr. Okuma i\u015flemleri hem Primary hem de Secondary d\u00fc\u011f\u00fcmlerden yap\u0131labilir.<br \/>\n*   <strong>Secondary (\u0130kincil) D\u00fc\u011f\u00fcmler:<\/strong> Primary d\u00fc\u011f\u00fcmdeki verilerin bir kopyas\u0131n\u0131 tutar ve Primary&#8217;den gelen t\u00fcm yazma i\u015flemlerini kendi kopyalar\u0131na uygular. Secondary&#8217;ler, Primary&#8217;nin ar\u0131zalanmas\u0131 durumunda yeni Primary olmak i\u00e7in adayd\u0131rlar. Ayr\u0131ca okuma i\u015flemleri i\u00e7in de kullan\u0131labilirler, bu da okuma y\u00fck\u00fcn\u00fc da\u011f\u0131tmaya yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Arbiter (Hakem) D\u00fc\u011f\u00fcm (\u0130ste\u011fe Ba\u011fl\u0131):<\/strong> Veri kopyas\u0131 tutmaz, sadece birincil d\u00fc\u011f\u00fcm se\u00e7imi (election) s\u00fcrecinde oy kullan\u0131r. Replica Set&#8217;te d\u00fc\u011f\u00fcm say\u0131s\u0131 \u00e7ift ise veya kaynak s\u0131n\u0131rl\u0131 bir ortamda ek bir Secondary d\u00fc\u011f\u00fcm yerine hafif bir \u00e7\u00f6z\u00fcm istendi\u011finde kullan\u0131l\u0131r.<\/p>\n<h3>Replica Set Kullanman\u0131n Avantajlar\u0131:<\/h3>\n<p>*   <strong>Y\u00fcksek Eri\u015filebilirlik (High Availability):<\/strong> Primary d\u00fc\u011f\u00fcm\u00fcn \u00e7\u00f6kmesi durumunda, Secondary d\u00fc\u011f\u00fcmlerden biri otomatik olarak yeni Primary olarak se\u00e7ilir. Bu s\u00fcre\u00e7 genellikle saniyeler i\u00e7inde tamamlan\u0131r ve uygulama kesintisiz \u00e7al\u0131\u015fmaya devam eder.<br \/>\n*   <strong>Veri Yedeklili\u011fi (Data Redundancy):<\/strong> Veriler birden fazla d\u00fc\u011f\u00fcmde sakland\u0131\u011f\u0131 i\u00e7in, donan\u0131m ar\u0131zas\u0131 veya ba\u015fka bir felaket durumunda veri kayb\u0131 riski minimize edilir.<br \/>\n*   <strong>Felaket Kurtarma (Disaster Recovery):<\/strong> Co\u011frafi olarak da\u011f\u0131t\u0131lm\u0131\u015f bir Replica Set ile, bir b\u00f6lgedeki felaket durumunda bile veri ba\u015fka bir b\u00f6lgeden kurtar\u0131labilir.<br \/>\n*   <strong>Okuma \u00d6l\u00e7eklendirme (Read Scaling):<\/strong> Uygulama, okuma i\u015flemlerini Secondary d\u00fc\u011f\u00fcmlere y\u00f6nlendirerek Primary d\u00fc\u011f\u00fcm \u00fczerindeki y\u00fck\u00fc azaltabilir ve genel performans\u0131n\u0131 art\u0131rabilir.<br \/>\n*   <strong>Bak\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Sistem kesintisi olmadan tek tek d\u00fc\u011f\u00fcmler \u00fczerinde bak\u0131m (g\u00fcncelleme, y\u00fckseltme vb.) yap\u0131labilir.<\/p>\n<p>Bu makalede, Ubuntu 20.04 i\u015fletim sistemi \u00fczerinde bir MongoDB Replica Set&#8217;i ad\u0131m ad\u0131m nas\u0131l yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 \u00f6\u011frenece\u011fiz. \u00dc\u00e7 d\u00fc\u011f\u00fcml\u00fc bir Replica Set kuracak ve g\u00fcvenlik i\u00e7in anahtar dosyas\u0131 (keyfile) kimlik do\u011frulamas\u0131n\u0131 etkinle\u015ftirece\u011fiz.<\/p>\n<h2>\u00d6n Gereksinimler<\/h2>\n<p>Bir MongoDB Replica Set kurmaya ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n gereksinimleri sa\u011flaman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>En Az \u00dc\u00e7 Adet Ubuntu 20.04 Sunucusu:<\/strong> Bu sunucular fiziksel makineler, sanal makineler (VM&#8217;ler) veya bulut sa\u011flay\u0131c\u0131lar\u0131ndan (AWS EC2, Azure VM, Google Cloud Compute Engine vb.) al\u0131nan \u00f6rnekler olabilir. Her sunucunun kendi IP adresine sahip olmas\u0131 ve birbiriyle a\u011f \u00fczerinden ileti\u015fim kurabilmesi gerekmektedir. \u00d6rnek olarak a\u015fa\u011f\u0131daki IP adreslerini kullanaca\u011f\u0131z:<br \/>\n    *   <code>192.168.1.101<\/code> (mongo1)<br \/>\n    *   <code>192.168.1.102<\/code> (mongo2)<br \/>\n    *   <code>192.168.1.103<\/code> (mongo3)<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> T\u00fcm sunuculara SSH ile eri\u015febiliyor olman\u0131z gerekmektedir.<br \/>\n*   <strong><code>sudo<\/code> Yetkileri:<\/strong> Kurulum ve yap\u0131land\u0131rma i\u015flemleri i\u00e7in <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131n\u0131z olmal\u0131d\u0131r.<br \/>\n*   <strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 kullan\u0131m\u0131 ve dosya d\u00fczenleme konular\u0131nda temel bilgiye sahip olman\u0131z faydal\u0131 olacakt\u0131r.<\/p>\n<h3>Sunucular Aras\u0131 \u0130leti\u015fim \u0130\u00e7in <code>\/etc\/hosts<\/code> Dosyas\u0131n\u0131n Yap\u0131land\u0131r\u0131lmas\u0131 (\u00d6nerilen)<\/h3>\n<p>IP adresleri yerine okunabilir ana bilgisayar adlar\u0131 (hostname) kullanmak, y\u00f6netimi kolayla\u015ft\u0131r\u0131r. Her sunucuda <code>\/etc\/hosts<\/code> dosyas\u0131n\u0131 d\u00fczenleyerek di\u011fer sunucular\u0131n IP adreslerini ve ana bilgisayar adlar\u0131n\u0131 ekleyelim.<\/p>\n<p>Her \u00fc\u00e7 sunucuda da a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak <code>\/etc\/hosts<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/hosts<\/code><\/pre>\n<p>Dosyan\u0131n sonuna a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 ekleyin (kendi IP adreslerinize g\u00f6re d\u00fczenleyin):<\/p>\n<pre><code class=\"language-\">192.168.1.101 mongo1\r\n192.168.1.102 mongo2\r\n192.168.1.103 mongo3<\/code><\/pre>\n<p>Kaydedin ve kapat\u0131n (CTRL+O, Enter, CTRL+X). Bu sayede <code>mongo1<\/code>, <code>mongo2<\/code> ve <code>mongo3<\/code> ana bilgisayar adlar\u0131n\u0131 kullanarak sunuculara eri\u015febileceksiniz.<\/p>\n<h2>Ad\u0131m 1: Her Bir Sunucunun Haz\u0131rlanmas\u0131 (T\u00fcm D\u00fc\u011f\u00fcmler \u0130\u00e7in Tekrar Edilecek)<\/h2>\n<p>Bu ad\u0131mlar, Replica Set&#8217;teki her bir d\u00fc\u011f\u00fcm i\u00e7in ayr\u0131 ayr\u0131 uygulanmal\u0131d\u0131r.<\/p>\n<h3>1.1. Sistem Paketlerini G\u00fcncelleme<\/h3>\n<p>Her sunucuda en g\u00fcncel yaz\u0131l\u0131m paketlerine sahip olmak i\u00e7in sistem paket listesini g\u00fcncelleyin ve y\u00fckl\u00fc paketleri y\u00fckseltin:<\/p>\n<pre><code class=\"language-bash\">sudo apt update && sudo apt upgrade -y<\/code><\/pre>\n<h3>1.2. MongoDB Kurulumu<\/h3>\n<p>MongoDB&#8217;nin resmi deposunu kullanarak en son stabil s\u00fcr\u00fcm\u00fc (bu makale yaz\u0131ld\u0131\u011f\u0131 s\u0131rada MongoDB 6.0) kuraca\u011f\u0131z.<\/p>\n<h4>MongoDB GPG Anahtar\u0131n\u0131 \u0130\u00e7e Aktarma:<\/h4>\n<pre><code class=\"language-bash\">wget -qO - https:\/\/www.mongodb.org\/static\/pgp\/server-6.0.asc | sudo apt-key add -<\/code><\/pre>\n<p>Bu komut, MongoDB paketlerini do\u011frulamak i\u00e7in gerekli GPG anahtar\u0131n\u0131 sisteminize ekler.<\/p>\n<h4>MongoDB Deposunu Ekleme:<\/h4>\n<p>Ubuntu 20.04 (Focal Fossa) i\u00e7in MongoDB deposunu <code>sources.list.d<\/code> dizinine ekleyin:<\/p>\n<pre><code class=\"language-bash\">echo \"deb [ arch=amd64,arm64 ] https:\/\/repo.mongodb.org\/apt\/ubuntu focal\/mongodb-org\/6.0 multiverse\" | sudo tee \/etc\/apt\/sources.list.d\/mongodb-org-6.0.list<\/code><\/pre>\n<h4>Paket Listesini G\u00fcncelleme ve MongoDB Kurulumu:<\/h4>\n<p>Depoyu ekledikten sonra, yeni paket listesini indirmek i\u00e7in tekrar <code>apt update<\/code> \u00e7al\u0131\u015ft\u0131r\u0131n ve ard\u0131ndan MongoDB&#8217;yi kurun:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\r\nsudo apt install -y mongodb-org<\/code><\/pre>\n<p>Kurulum tamamland\u0131ktan sonra, MongoDB servisi otomatik olarak ba\u015flamal\u0131d\u0131r. Durumunu kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status mongod<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>active (running)<\/code> ibaresini g\u00f6rmelisiniz. E\u011fer \u00e7al\u0131\u015fm\u0131yorsa, <code>sudo systemctl start mongod<\/code> komutuyla ba\u015flat\u0131n ve <code>sudo systemctl enable mongod<\/code> komutuyla sistem ba\u015flang\u0131c\u0131nda otomatik ba\u015flamas\u0131n\u0131 sa\u011flay\u0131n.<\/p>\n<h3>1.3. G\u00fcvenlik Duvar\u0131 Yap\u0131land\u0131rmas\u0131 (UFW)<\/h3>\n<p>MongoDB, varsay\u0131lan olarak 27017 numaral\u0131 portu kullan\u0131r. Replica Set d\u00fc\u011f\u00fcmlerinin birbiriyle ileti\u015fim kurabilmesi ve d\u0131\u015far\u0131dan eri\u015filebilmesi i\u00e7in bu portu g\u00fcvenlik duvar\u0131nda a\u00e7mam\u0131z gerekmektedir. Ubuntu&#8217;da varsay\u0131lan g\u00fcvenlik duvar\u0131 olan UFW&#8217;yi kullanaca\u011f\u0131z.<\/p>\n<p>Her sunucuda a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 27017\/tcp\r\nsudo ufw enable\r\nsudo ufw status<\/code><\/pre>\n<p><code>ufw status<\/code> \u00e7\u0131kt\u0131s\u0131nda <code>27017\/tcp ALLOW Anywhere<\/code> sat\u0131r\u0131n\u0131 g\u00f6rmelisiniz. <code>Anywhere<\/code> yerine sadece Replica Set&#8217;teki di\u011fer sunucular\u0131n IP adreslerini de belirtebilirsiniz, bu daha g\u00fcvenli bir yakla\u015f\u0131md\u0131r (\u00f6rne\u011fin: <code>sudo ufw allow from 192.168.1.102 to any port 27017<\/code>).<\/p>\n<h2>Ad\u0131m 2: MongoDB Yap\u0131land\u0131rmas\u0131 (T\u00fcm D\u00fc\u011f\u00fcmler \u0130\u00e7in Tekrar Edilecek)<\/h2>\n<p>Her MongoDB d\u00fc\u011f\u00fcm\u00fcn\u00fcn Replica Set&#8217;in bir par\u00e7as\u0131 olaca\u011f\u0131n\u0131 ve di\u011fer d\u00fc\u011f\u00fcmlerle ileti\u015fim kurabilece\u011fini belirtmek i\u00e7in <code>\/etc\/mongod.conf<\/code> dosyas\u0131n\u0131 d\u00fczenlememiz gerekmektedir.<\/p>\n<p>Her sunucuda a\u015fa\u011f\u0131daki komutla yap\u0131land\u0131rma dosyas\u0131n\u0131 a\u00e7\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/mongod.conf<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki de\u011fi\u015fiklikleri yap\u0131n:<\/p>\n<p>1.  <strong><code>bindIp<\/code> Yap\u0131land\u0131rmas\u0131:<\/strong><br \/>\n    Varsay\u0131lan olarak MongoDB, sadece <code>127.0.0.1<\/code> (localhost) adresinden ba\u011flant\u0131lar\u0131 kabul eder. Replica Set&#8217;in di\u011fer \u00fcyeleriyle ileti\u015fim kurabilmesi i\u00e7in bu ayar\u0131 sunucunun kendi IP adresine veya t\u00fcm a\u011f aray\u00fczlerine (<code>0.0.0.0<\/code>) de\u011fi\u015ftirmemiz gerekir. \u00dcretim ortamlar\u0131nda <code>0.0.0.0<\/code> kullanmak yerine, sadece Replica Set \u00fcyelerinin IP adreslerini virg\u00fclle ay\u0131rarak belirtmek daha g\u00fcvenlidir. Bu \u00f6rnekte basitle\u015ftirmek ad\u0131na <code>0.0.0.0<\/code> kullanaca\u011f\u0131z, ancak g\u00fcvenlik notunu akl\u0131n\u0131zda bulundurun.<\/p>\n<pre><code class=\"language-yaml\"># network interfaces\r\n    net:\r\n      port: 27017\r\n      bindIp: 0.0.0.0 # veya kendi sunucunuzun IP adresi ve di\u011fer replica set \u00fcyelerinin IP adresleri\r\n                      # \u00d6rn: bindIp: 192.168.1.101,192.168.1.102,192.168.1.103<\/code><\/pre>\n<p>2.  <strong><code>replication<\/code> B\u00f6l\u00fcm\u00fcn\u00fc Etkinle\u015ftirme:<\/strong><br \/>\n    Replica Set ad\u0131n\u0131 belirtmek i\u00e7in <code>replication<\/code> b\u00f6l\u00fcm\u00fcn\u00fc etkinle\u015ftirin ve bir <code>replSetName<\/code> de\u011feri atay\u0131n. T\u00fcm d\u00fc\u011f\u00fcmlerde bu ad ayn\u0131 olmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-yaml\">replication:\r\n      replSetName: \"rs0\" # Replica Set'inizin ad\u0131n\u0131 buraya girin<\/code><\/pre>\n<p>3.  <strong><code>security<\/code> B\u00f6l\u00fcm\u00fcn\u00fc Etkinle\u015ftirme (\u015eimdilik Yorum Sat\u0131r\u0131 Olarak Kals\u0131n):<\/strong><br \/>\n    Anahtar dosyas\u0131 kimlik do\u011frulamas\u0131n\u0131 daha sonra etkinle\u015ftirece\u011fiz. \u015eimdilik bu b\u00f6l\u00fcm\u00fc yorum sat\u0131r\u0131 olarak b\u0131rak\u0131n veya eklemeyin. Replica Set&#8217;i ba\u015flatt\u0131ktan sonra g\u00fcvenlik ad\u0131mlar\u0131n\u0131 uygulayaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-yaml\"># security:\r\n    #   authorization: enabled\r\n    #   keyFile: \/etc\/mongo-keyfile<\/code><\/pre>\n<p>Yap\u0131land\u0131rma dosyan\u0131z\u0131n ilgili b\u00f6l\u00fcmleri \u015fu \u015fekilde g\u00f6r\u00fcnmelidir:<\/p>\n<pre><code class=\"language-yaml\"># network interfaces\r\nnet:\r\n  port: 27017\r\n  bindIp: 0.0.0.0 # Veya Replica Set \u00fcyelerinin IP adresleri\r\n\r\n<h2>replication<\/h2>\r\nreplication:\r\n  replSetName: \"rs0\"\r\n\r\n<h2>security<\/h2>\r\n<h2>security:<\/h2>\r\n<h2>authorization: enabled<\/h2>\r\n<h2>keyFile: \/etc\/mongo-keyfile<\/code><\/pre>\n<\/h2>\n<p>De\u011fi\u015fiklikleri kaydedin ve dosyay\u0131 kapat\u0131n. Ard\u0131ndan, MongoDB servisini yeniden ba\u015flat\u0131n ki yeni yap\u0131land\u0131rma uygulans\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart mongod<\/code><\/pre>\n<p>Bu ad\u0131mlar\u0131 <strong>her \u00fc\u00e7 sunucuda da<\/strong> tekrarlad\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h2>Ad\u0131m 3: Replica Set&#8217;in Ba\u015flat\u0131lmas\u0131<\/h2>\n<p>T\u00fcm d\u00fc\u011f\u00fcmlerin yap\u0131land\u0131rmas\u0131 tamamland\u0131ktan sonra, Replica Set&#8217;i ba\u015flatma zaman\u0131 geldi. Bu i\u015flem sadece bir kez, Primary aday olarak belirledi\u011finiz sunucuda yap\u0131lmal\u0131d\u0131r. Biz <code>mongo1<\/code> (192.168.1.101) sunucusunu Primary aday olarak kullanaca\u011f\u0131z.<\/p>\n<p><code>mongo1<\/code> sunucusuna SSH ile ba\u011flan\u0131n ve MongoDB kabu\u011funu a\u00e7\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo<\/code><\/pre>\n<p>MongoDB kabu\u011funda, <code>rs.initiate()<\/code> komutunu kullanarak Replica Set&#8217;i ba\u015flat\u0131n. Bu komuta, Replica Set&#8217;in ad\u0131 ve t\u00fcm \u00fcyelerinin listesi verilir. <code>\/etc\/hosts<\/code> dosyas\u0131n\u0131 yap\u0131land\u0131rd\u0131\u011f\u0131m\u0131z i\u00e7in ana bilgisayar adlar\u0131n\u0131 kullanabiliriz:<\/p>\n<pre><code class=\"language-javascript\">rs.initiate(\r\n  {\r\n    _id: \"rs0\",\r\n    members: [\r\n      { _id: 0, host: \"mongo1:27017\" },\r\n      { _id: 1, host: \"mongo2:27017\" },\r\n      { _id: 2, host: \"mongo3:27017\" }\r\n    ]\r\n  }\r\n)<\/code><\/pre>\n<p>Komut ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131rsa, <code>ok: 1<\/code> i\u00e7eren bir \u00e7\u0131kt\u0131 almal\u0131s\u0131n\u0131z. K\u0131sa bir s\u00fcre sonra, <code>mongo1<\/code> sunucusu Primary olarak se\u00e7ilecek ve di\u011ferleri Secondary olarak kat\u0131lacakt\u0131r.<\/p>\n<p>Replica Set&#8217;in durumunu kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-javascript\">rs.status()<\/code><\/pre>\n<p>Bu komut, Replica Set&#8217;in t\u00fcm \u00fcyelerinin durumunu, rollerini (PRIMARY, SECONDARY) ve di\u011fer \u00f6nemli bilgileri g\u00f6steren ayr\u0131nt\u0131l\u0131 bir \u00e7\u0131kt\u0131 verir. <code>mongo1<\/code>&#8216;in <code>stateStr<\/code> alan\u0131nda <code>PRIMARY<\/code> ve di\u011ferlerinin <code>SECONDARY<\/code> oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h2>Ad\u0131m 4: G\u00fcvenlik: Anahtar Dosyas\u0131 (Keyfile) Kimlik Do\u011frulamas\u0131<\/h2>\n<p>\u00dcretim ortamlar\u0131nda Replica Set&#8217;inizi g\u00fcvence alt\u0131na almak kritik \u00f6neme sahiptir. Anahtar dosyas\u0131 (keyfile) kimlik do\u011frulamas\u0131, Replica Set \u00fcyelerinin birbirleriyle g\u00fcvenli bir \u015fekilde ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Bu, her bir d\u00fc\u011f\u00fcm\u00fcn ayn\u0131 anahtar dosyas\u0131na sahip olmas\u0131n\u0131 ve bu dosya arac\u0131l\u0131\u011f\u0131yla kimliklerini do\u011frulamalar\u0131n\u0131 gerektirir.<\/p>\n<p>Bu ad\u0131mlar <strong>her \u00fc\u00e7 sunucuda da<\/strong> tekrarlanmal\u0131d\u0131r.<\/p>\n<h3>4.1. Anahtar Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Anahtar dosyas\u0131, sadece Replica Set \u00fcyeleri taraf\u0131ndan okunabilen rasgele karakterlerden olu\u015fan bir metin dosyas\u0131d\u0131r. Minimum 6, maksimum 1024 karakter uzunlu\u011funda olmal\u0131d\u0131r. G\u00fc\u00e7l\u00fc bir anahtar olu\u015fturmak i\u00e7in <code>openssl<\/code> kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo openssl rand -base64 756 > \/etc\/mongo-keyfile<\/code><\/pre>\n<p>Bu komut, 756 baytl\u0131k rastgele veri olu\u015fturur ve <code>\/etc\/mongo-keyfile<\/code> dosyas\u0131na kaydeder.<\/p>\n<h3>4.2. Anahtar Dosyas\u0131n\u0131n \u0130zinlerini Ayarlama<\/h3>\n<p>Anahtar dosyas\u0131n\u0131n sadece MongoDB kullan\u0131c\u0131s\u0131 taraf\u0131ndan okunabilir olmas\u0131 \u00f6nemlidir. Di\u011fer kullan\u0131c\u0131lar\u0131n bu dosyaya eri\u015fimini engellemek i\u00e7in izinleri <code>400<\/code> olarak ayarlay\u0131n ve dosyan\u0131n sahibini <code>mongodb<\/code> kullan\u0131c\u0131s\u0131 ve grubu olarak de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo chmod 400 \/etc\/mongo-keyfile\r\nsudo chown mongodb:mongodb \/etc\/mongo-keyfile<\/code><\/pre>\n<h3>4.3. Anahtar Dosyas\u0131n\u0131 Di\u011fer D\u00fc\u011f\u00fcmlere Kopyalama<\/h3>\n<p><strong>\u00d6NEML\u0130:<\/strong> Olu\u015fturdu\u011funuz anahtar dosyas\u0131, Replica Set&#8217;teki <strong>t\u00fcm d\u00fc\u011f\u00fcmlerde ayn\u0131 olmal\u0131d\u0131r<\/strong>. Bu nedenle, <code>mongo1<\/code> \u00fczerinde olu\u015fturdu\u011funuz <code>\/etc\/mongo-keyfile<\/code> dosyas\u0131n\u0131 <code>mongo2<\/code> ve <code>mongo3<\/code> sunucular\u0131na kopyalaman\u0131z gerekmektedir. <code>scp<\/code> komutunu kullanabilirsiniz:<\/p>\n<p><code>mongo1<\/code> sunucusundan:<\/p>\n<pre><code class=\"language-bash\">scp \/etc\/mongo-keyfile mongo2:\/etc\/mongo-keyfile\r\nscp \/etc\/mongo-keyfile mongo3:\/etc\/mongo-keyfile<\/code><\/pre>\n<p>Her kopyalama i\u015fleminden sonra, <code>mongo2<\/code> ve <code>mongo3<\/code> sunucular\u0131nda SSH ile ba\u011flanarak kopyalanan dosyan\u0131n izinlerini ve sahipli\u011fini do\u011fru \u015fekilde ayarlad\u0131\u011f\u0131n\u0131zdan emin olun:<\/p>\n<p><code>mongo2<\/code> ve <code>mongo3<\/code> sunucular\u0131nda:<\/p>\n<pre><code class=\"language-bash\">sudo chmod 400 \/etc\/mongo-keyfile\r\nsudo chown mongodb:mongodb \/etc\/mongo-keyfile<\/code><\/pre>\n<h3>4.4. MongoDB Yap\u0131land\u0131rmas\u0131n\u0131 G\u00fcncelleme<\/h3>\n<p>\u015eimdi her \u00fc\u00e7 sunucuda da <code>\/etc\/mongod.conf<\/code> dosyas\u0131n\u0131 tekrar d\u00fczenleyerek <code>security<\/code> b\u00f6l\u00fcm\u00fcn\u00fc etkinle\u015ftirece\u011fiz:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/mongod.conf<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki sat\u0131rlar\u0131 ekleyin veya yorum sat\u0131r\u0131ndan \u00e7\u0131kar\u0131n:<\/p>\n<pre><code class=\"language-yaml\">security:\r\n  authorization: enabled\r\n  keyFile: \/etc\/mongo-keyfile<\/code><\/pre>\n<p>Yap\u0131land\u0131rma dosyan\u0131z\u0131n son hali \u015fu \u015fekilde g\u00f6r\u00fcnmelidir:<\/p>\n<pre><code class=\"language-yaml\"># network interfaces\r\nnet:\r\n  port: 27017\r\n  bindIp: 0.0.0.0 # Veya Replica Set \u00fcyelerinin IP adresleri\r\n\r\n<h2>replication<\/h2>\r\nreplication:\r\n  replSetName: \"rs0\"\r\n\r\n<h2>security<\/h2>\r\nsecurity:\r\n  authorization: enabled\r\n  keyFile: \/etc\/mongo-keyfile<\/code><\/pre>\n<p>De\u011fi\u015fiklikleri kaydedin ve dosyay\u0131 kapat\u0131n. Ard\u0131ndan, <strong>her \u00fc\u00e7 sunucuda da<\/strong> MongoDB servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart mongod<\/code><\/pre>\n<h3>4.5. Y\u00f6netici Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/h3>\n<p><code>authorization: enabled<\/code> ayar\u0131 etkinle\u015ftirildi\u011finde, art\u0131k MongoDB&#8217;ye kimlik do\u011frulamas\u0131 olmadan eri\u015filemez. Bu nedenle, Replica Set&#8217;i y\u00f6netmek i\u00e7in bir y\u00f6netici kullan\u0131c\u0131s\u0131 olu\u015fturmam\u0131z gerekmektedir.<\/p>\n<p><code>mongo1<\/code> (Primary) sunucusuna ba\u011flan\u0131n ve kimlik do\u011frulamas\u0131 ile MongoDB kabu\u011funa eri\u015fin. \u0130lk ba\u011flant\u0131da hen\u00fcz bir kullan\u0131c\u0131 olmad\u0131\u011f\u0131 i\u00e7in, <code>localhost<\/code> ba\u011flant\u0131s\u0131 \u00fczerinden ge\u00e7ici olarak kimlik do\u011frulamas\u0131 olmadan ba\u011flan\u0131p kullan\u0131c\u0131 olu\u015fturabiliriz. Ancak <code>bindIp<\/code> <code>0.0.0.0<\/code> olarak ayarl\u0131ysa, bu y\u00f6ntem \u00e7al\u0131\u015fmayabilir. En g\u00fcvenli yol, <code>mongod.conf<\/code> dosyas\u0131nda <code>authorization<\/code>&#8216;\u0131 ge\u00e7ici olarak kapat\u0131p kullan\u0131c\u0131 olu\u015fturduktan sonra tekrar a\u00e7makt\u0131r.<\/p>\n<p>Alternatif olarak, MongoDB&#8217;nin ilk ba\u011flant\u0131da kimlik do\u011frulamas\u0131 yapmadan yerel ba\u011flant\u0131lara izin verme \u00f6zelli\u011finden yararlanabiliriz:<\/p>\n<p><code>mongo1<\/code> sunucusuna SSH ile ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --host 127.0.0.1 --port 27017<\/code><\/pre>\n<p>Bu komut, <code>localhost<\/code> \u00fczerinden ba\u011flanman\u0131z\u0131 sa\u011flar. Ard\u0131ndan, <code>admin<\/code> veritaban\u0131nda bir y\u00f6netici kullan\u0131c\u0131s\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-javascript\">use admin\r\ndb.createUser(\r\n  {\r\n    user: \"mongoAdmin\",\r\n    pwd: \"your_strong_password\", \/\/ G\u00fc\u00e7l\u00fc bir \u015fifre belirleyin\r\n    roles: [ { role: \"root\", db: \"admin\" } ]\r\n  }\r\n)<\/code><\/pre>\n<p><code>your_strong_password<\/code> k\u0131sm\u0131n\u0131 kendi g\u00fcvenli \u015fifrenizle de\u011fi\u015ftirin. <code>root<\/code> rol\u00fc, veritaban\u0131 \u00fczerinde tam yetki sa\u011flar.<\/p>\n<p>Kullan\u0131c\u0131 olu\u015fturulduktan sonra <code>exit<\/code> komutuyla kabuktan \u00e7\u0131k\u0131n.<\/p>\n<p>Art\u0131k Replica Set&#8217;e ba\u011flan\u0131rken bu y\u00f6netici kullan\u0131c\u0131s\u0131n\u0131 kullanman\u0131z gerekecek:<\/p>\n<pre><code class=\"language-bash\">mongo --host mongo1 --port 27017 -u mongoAdmin -p --authenticationDatabase admin<\/code><\/pre>\n<p>\u015eifreniz istendi\u011finde, belirledi\u011finiz \u015fifreyi girin. Ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011fland\u0131ktan sonra, <code>rs.status()<\/code> komutunu tekrar \u00e7al\u0131\u015ft\u0131rarak Replica Set&#8217;in durumunu kontrol edebilirsiniz. Her \u015feyin yolunda oldu\u011funu ve t\u00fcm d\u00fc\u011f\u00fcmlerin do\u011fru rollerde oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h2>Ad\u0131m 5: Arbiter D\u00fc\u011f\u00fcm\u00fc Ekleme (\u0130ste\u011fe Ba\u011fl\u0131)<\/h2>\n<p>Replica Set&#8217;inizde \u00e7ift say\u0131da oy veren d\u00fc\u011f\u00fcm varsa (\u00f6rne\u011fin 2 Primary\/Secondary), bir d\u00fc\u011f\u00fcm ar\u0131zaland\u0131\u011f\u0131nda oybirli\u011fi sa\u011flamakta zorlanabilirsiniz. Bu durumda, bir Arbiter d\u00fc\u011f\u00fcm\u00fc eklemek se\u00e7im s\u00fcrecini kolayla\u015ft\u0131r\u0131r. Arbiter, veri tutmaz ve bu nedenle daha az kaynak t\u00fcketir.<\/p>\n<p>E\u011fer 4. bir sunucunuz varsa (\u00f6rne\u011fin <code>mongo4<\/code>), bu ad\u0131m\u0131 uygulayabilirsiniz. Varsay\u0131lan Replica Set&#8217;imiz 3 d\u00fc\u011f\u00fcml\u00fc oldu\u011fu i\u00e7in zaten tek say\u0131da oya sahiptir, ancak Arbiter ekleme s\u00fcrecini g\u00f6stermek i\u00e7in bu ad\u0131m\u0131 dahil ediyoruz.<\/p>\n<h3>5.1. Arbiter Sunucusunu Haz\u0131rlama<\/h3>\n<p>Yeni bir sunucuya (\u00f6rne\u011fin <code>mongo4<\/code> &#8211; <code>192.168.1.104<\/code>) Ad\u0131m 1&#8217;deki gibi MongoDB&#8217;yi kurun ve g\u00fcvenlik duvar\u0131n\u0131 yap\u0131land\u0131r\u0131n. <code>\/etc\/hosts<\/code> dosyas\u0131n\u0131 da g\u00fcncellemeyi unutmay\u0131n.<\/p>\n<h3>5.2. Arbiter Yap\u0131land\u0131rmas\u0131<\/h3>\n<p><code>mongo4<\/code> sunucusunda <code>\/etc\/mongod.conf<\/code> dosyas\u0131n\u0131 d\u00fczenleyin:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/mongod.conf<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki de\u011fi\u015fiklikleri yap\u0131n:<\/p>\n<pre><code class=\"language-yaml\"># network interfaces\r\nnet:\r\n  port: 27017\r\n  bindIp: 0.0.0.0 # Veya sadece Replica Set \u00fcyelerinin IP adresleri\r\n\r\n<h2>replication<\/h2>\r\nreplication:\r\n  replSetName: \"rs0\"\r\n\r\n<h2>security<\/h2>\r\nsecurity:\r\n  authorization: enabled\r\n  keyFile: \/etc\/mongo-keyfile # mongo1'den kopyalad\u0131\u011f\u0131n\u0131z anahtar dosyas\u0131<\/code><\/pre>\n<p>Anahtar dosyas\u0131n\u0131 <code>mongo1<\/code>&#8216;den <code>mongo4<\/code>&#8216;e kopyalad\u0131\u011f\u0131n\u0131zdan ve izinlerini do\u011fru ayarlad\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<p>MongoDB servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart mongod<\/code><\/pre>\n<h3>5.3. Replica Set&#8217;e Arbiter Ekleme<\/h3>\n<p>Primary d\u00fc\u011f\u00fcme (\u015fu an <code>mongo1<\/code>) y\u00f6netici kullan\u0131c\u0131n\u0131zla ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --host mongo1 --port 27017 -u mongoAdmin -p --authenticationDatabase admin<\/code><\/pre>\n<p>Arbiter d\u00fc\u011f\u00fcm\u00fcn\u00fc Replica Set&#8217;e eklemek i\u00e7in <code>rs.addArb()<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-javascript\">rs.addArb(\"mongo4:27017\")<\/code><\/pre>\n<p><code>rs.status()<\/code> komutuyla durumu kontrol edin. <code>mongo4<\/code>&#8216;\u00fcn <code>stateStr<\/code> alan\u0131nda <code>ARBITER<\/code> olarak g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc teyit edin.<\/p>\n<h2>Ad\u0131m 6: Replica Set&#8217;in \u00c7al\u0131\u015fmas\u0131n\u0131 Test Etme<\/h2>\n<p>Replica Set&#8217;in y\u00fcksek eri\u015filebilirlik ve veri yedeklili\u011fi \u00f6zelliklerini test edelim.<\/p>\n<h3>6.1. Veri Ekleme<\/h3>\n<p>Primary d\u00fc\u011f\u00fcme (\u015fu an <code>mongo1<\/code>) y\u00f6netici kullan\u0131c\u0131n\u0131zla ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --host mongo1 --port 27017 -u mongoAdmin -p --authenticationDatabase admin<\/code><\/pre>\n<p>Bir veritaban\u0131 se\u00e7in ve baz\u0131 veriler ekleyin:<\/p>\n<pre><code class=\"language-javascript\">use mydatabase\r\ndb.testcollection.insertOne({ item: \"laptop\", qty: 10, tags: [\"electronics\", \"office\"] })\r\ndb.testcollection.insertOne({ item: \"keyboard\", qty: 25, tags: [\"electronics\", \"accessories\"] })<\/code><\/pre>\n<p>Ekledi\u011finiz verileri kontrol edin:<\/p>\n<pre><code class=\"language-javascript\">db.testcollection.find().pretty()<\/code><\/pre>\n<h3>6.2. Primary D\u00fc\u011f\u00fcm\u00fcn Kapat\u0131lmas\u0131 (Failover Testi)<\/h3>\n<p>\u015eimdi mevcut Primary d\u00fc\u011f\u00fcm\u00fc (<code>mongo1<\/code>) kas\u0131tl\u0131 olarak kapatal\u0131m ve Replica Set&#8217;in yeni bir Primary se\u00e7mesini izleyelim.<\/p>\n<p><code>mongo1<\/code> sunucusunda yeni bir SSH oturumu a\u00e7\u0131n (veya mevcut MongoDB kabu\u011fundan \u00e7\u0131k\u0131p yeni bir komut \u00e7al\u0131\u015ft\u0131r\u0131n):<\/p>\n<pre><code class=\"language-bash\">sudo systemctl stop mongod<\/code><\/pre>\n<p>Bu, <code>mongo1<\/code> \u00fczerindeki MongoDB servisini durduracakt\u0131r.<\/p>\n<p>Hemen ard\u0131ndan, <code>mongo2<\/code> veya <code>mongo3<\/code> sunucusuna ba\u011flan\u0131n (y\u00f6netici kullan\u0131c\u0131n\u0131zla) ve <code>rs.status()<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --host mongo2 --port 27017 -u mongoAdmin -p --authenticationDatabase admin\r\nrs.status()<\/code><\/pre>\n<p>Birka\u00e7 saniye i\u00e7inde, <code>mongo2<\/code> veya <code>mongo3<\/code>&#8216;ten birinin <code>PRIMARY<\/code> rol\u00fcn\u00fc \u00fcstlendi\u011fini g\u00f6rmelisiniz. <code>mongo1<\/code> ise <code>RECOVERING<\/code> veya <code>DOWN<\/code> olarak g\u00f6r\u00fcnecektir. Bu, Replica Set&#8217;in ba\u015far\u0131l\u0131 bir \u015fekilde failover ger\u00e7ekle\u015ftirdi\u011fini g\u00f6sterir.<\/p>\n<h3>6.3. Yeni Primary&#8217;den Veri Okuma<\/h3>\n<p>Yeni Primary olan d\u00fc\u011f\u00fcme ba\u011flan\u0131n (\u00f6rne\u011fin <code>mongo2<\/code> ise):<\/p>\n<pre><code class=\"language-bash\">mongo --host mongo2 --port 27017 -u mongoAdmin -p --authenticationDatabase admin<\/code><\/pre>\n<p>Daha \u00f6nce ekledi\u011finiz verileri okumay\u0131 deneyin:<\/p>\n<pre><code class=\"language-javascript\">use mydatabase\r\ndb.testcollection.find().pretty()<\/code><\/pre>\n<p>Verilerin hala eri\u015filebilir oldu\u011funu ve \u00f6nceki Primary&#8217;den kopyaland\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz. Bu, veri yedeklili\u011finin ve tutarl\u0131l\u0131\u011f\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kan\u0131tlar.<\/p>\n<h3>6.4. Eski Primary&#8217;yi Tekrar Ba\u015flatma<\/h3>\n<p>\u015eimdi <code>mongo1<\/code> sunucusunu tekrar ba\u015flatal\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start mongod<\/code><\/pre>\n<p>Tekrar bir Secondary d\u00fc\u011f\u00fcme ba\u011flan\u0131p <code>rs.status()<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n. <code>mongo1<\/code>&#8216;in <code>SECONDARY<\/code> rol\u00fcn\u00fc \u00fcstlendi\u011fini g\u00f6rmelisiniz. Replica Set, Primary&#8217;nin geri gelmesini otomatik olarak alg\u0131lar ve onu Secondary olarak entegre eder.<\/p>\n<h2>Ad\u0131m 7: Replica Set Y\u00f6netimi ve \u0130zleme<\/h2>\n<p>Replica Set&#8217;inizi etkin bir \u015fekilde y\u00f6netmek ve izlemek i\u00e7in kullanabilece\u011finiz baz\u0131 \u00f6nemli komutlar ve ipu\u00e7lar\u0131:<\/p>\n<p>*   <strong><code>rs.status()<\/code>:<\/strong> Replica Set&#8217;in genel durumunu, \u00fcyelerin rollerini, durumlar\u0131n\u0131, replikasyon gecikmelerini ve di\u011fer kritik bilgileri g\u00f6sterir. En s\u0131k kullan\u0131lan y\u00f6netim komutlar\u0131ndan biridir.<br \/>\n*   <strong><code>rs.printReplicationInfo()<\/code>:<\/strong> Replikasyonun durumu hakk\u0131nda daha \u00f6zet bilgiler sunar, \u00f6zellikle son opLog zaman damgalar\u0131n\u0131 ve gecikme s\u00fcrelerini g\u00f6rmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <strong><code>db.hello()<\/code> (eski ad\u0131yla <code>db.isMaster()<\/code>):<\/strong> Ba\u011fland\u0131\u011f\u0131n\u0131z d\u00fc\u011f\u00fcm\u00fcn Primary olup olmad\u0131\u011f\u0131n\u0131 ve Replica Set hakk\u0131nda temel bilgileri g\u00f6sterir.<br \/>\n*   <strong><code>rs.conf()<\/code>:<\/strong> Replica Set&#8217;in mevcut yap\u0131land\u0131rma belgesini d\u00f6nd\u00fcr\u00fcr. Bu belge, \u00fcyelerin listesini, oylar\u0131n\u0131 ve di\u011fer yap\u0131land\u0131rma parametrelerini i\u00e7erir.<br \/>\n*   <strong><code>rs.reconfig()<\/code>:<\/strong> Replica Set&#8217;in yap\u0131land\u0131rmas\u0131n\u0131 de\u011fi\u015ftirmek i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin, \u00fcye ekleme\/\u00e7\u0131karma, oy say\u0131s\u0131n\u0131 de\u011fi\u015ftirme). Bu komut dikkatli kullan\u0131lmal\u0131 ve genellikle <code>rs.add()<\/code> veya <code>rs.remove()<\/code> gibi yard\u0131mc\u0131 komutlar tercih edilmelidir.<br \/>\n*   <strong>Log Dosyalar\u0131:<\/strong> MongoDB&#8217;nin log dosyalar\u0131 (<code>\/var\/log\/mongodb\/mongod.log<\/code>), Replica Set&#8217;in davran\u0131\u015f\u0131n\u0131, se\u00e7im s\u00fcre\u00e7lerini, replikasyon hatalar\u0131n\u0131 ve di\u011fer \u00f6nemli olaylar\u0131 anlamak i\u00e7in hayati \u00f6neme sahiptir. Herhangi bir sorun ya\u015fand\u0131\u011f\u0131nda ilk kontrol etmeniz gereken yerdir.<\/p>\n<h3>\u00dcretim Ortam\u0131 \u0130\u00e7in Ek Hususlar:<\/h3>\n<p>*   <strong>Yedekleme Stratejileri:<\/strong> Replica Set, y\u00fcksek eri\u015filebilirlik sa\u011flasa da, yanl\u0131\u015fl\u0131kla silinen verileri veya bozuk verileri geri getirmek i\u00e7in d\u00fczenli yedeklemeler hala gereklidir.<br \/>\n*   <strong>\u0130zleme ve Uyar\u0131lar:<\/strong> Prometheus, Grafana, MongoDB Cloud Manager veya di\u011fer izleme ara\u00e7lar\u0131n\u0131 kullanarak Replica Set&#8217;in performans\u0131n\u0131, disk kullan\u0131m\u0131n\u0131, CPU y\u00fck\u00fcn\u00fc ve replikasyon gecikmesini s\u00fcrekli izleyin ve anormal durumlar i\u00e7in uyar\u0131lar kurun.<br \/>\n*   <strong>A\u011f G\u00fcvenli\u011fi:<\/strong> Replica Set \u00fcyeleri aras\u0131ndaki ileti\u015fimin \u015fifreli oldu\u011fundan (\u00f6rne\u011fin TLS\/SSL) ve sadece yetkili IP adreslerinin MongoDB portuna eri\u015febildi\u011finden emin olun.<br \/>\n*   <strong>Dedicated Kullan\u0131c\u0131lar:<\/strong> Her uygulama veya servis i\u00e7in ayr\u0131 MongoDB kullan\u0131c\u0131lar\u0131 olu\u015fturun ve sadece ihtiya\u00e7 duyduklar\u0131 minimum yetkileri verin (Principle of Least Privilege).<br \/>\n*   <strong>Versiyon Y\u00fckseltmeleri:<\/strong> MongoDB versiyonlar\u0131n\u0131 y\u00fckseltirken, resmi dok\u00fcmantasyonu takip ederek kademeli bir y\u00fckseltme stratejisi uygulay\u0131n (\u00f6rne\u011fin, Secondary&#8217;leri y\u00fckseltin, sonra Primary&#8217;yi y\u00fckseltin).<\/p>\n<h2>Sorun Giderme<\/h2>\n<p>Replica Set yap\u0131land\u0131rmas\u0131 s\u0131ras\u0131nda veya sonras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Replica Set Ba\u015flat\u0131lam\u0131yor veya \u00dcyeler Kat\u0131lam\u0131yor:<\/strong><br \/>\n    *   <strong>G\u00fcvenlik Duvar\u0131:<\/strong> T\u00fcm d\u00fc\u011f\u00fcmlerde 27017 portunun a\u00e7\u0131k oldu\u011fundan emin olun (<code>sudo ufw status<\/code>).<br \/>\n    *   <strong><code>bindIp<\/code> Ayar\u0131:<\/strong> <code>\/etc\/mongod.conf<\/code> dosyas\u0131ndaki <code>net.bindIp<\/code> ayar\u0131n\u0131n, di\u011fer Replica Set \u00fcyelerinin IP adreslerini veya <code>0.0.0.0<\/code> i\u00e7erdi\u011finden emin olun.<br \/>\n    *   <strong>Anahtar Dosyas\u0131 (Keyfile):<\/strong> T\u00fcm d\u00fc\u011f\u00fcmlerde ayn\u0131 anahtar dosyas\u0131n\u0131n bulundu\u011fundan ve dosya izinlerinin (<code>chmod 400<\/code>) ve sahipli\u011finin (<code>chown mongodb:mongodb<\/code>) do\u011fru oldu\u011fundan emin olun.<br \/>\n    *   <strong><code>replSetName<\/code>:<\/strong> T\u00fcm d\u00fc\u011f\u00fcmlerde <code>\/etc\/mongod.conf<\/code> i\u00e7indeki <code>replication.replSetName<\/code> de\u011ferinin ayn\u0131 oldu\u011fundan emin olun.<br \/>\n    *   <strong>Log Dosyalar\u0131:<\/strong> <code>\/var\/log\/mongodb\/mongod.log<\/code> dosyas\u0131n\u0131 kontrol ederek hata mesajlar\u0131n\u0131 aray\u0131n.<\/p>\n<p>*   <strong><code>rs.status()<\/code> \u00c7\u0131kt\u0131s\u0131nda \u00dcyeler <code>(not reachable\/healthy)<\/code> veya <code>STARTUP2<\/code> Durumunda G\u00f6r\u00fcn\u00fcyor:<\/strong><br \/>\n    *   Bu genellikle a\u011f ba\u011flant\u0131s\u0131 sorunlar\u0131, g\u00fcvenlik duvar\u0131 k\u0131s\u0131tlamalar\u0131 veya yanl\u0131\u015f <code>bindIp<\/code> yap\u0131land\u0131rmas\u0131ndan kaynaklan\u0131r.<br \/>\n    *   D\u00fc\u011f\u00fcmler aras\u0131nda <code>ping<\/code> komutuyla ba\u011flant\u0131y\u0131 test edin.<br \/>\n    *   \u0130lgili d\u00fc\u011f\u00fcm\u00fcn MongoDB servisini yeniden ba\u015flatmay\u0131 deneyin.<\/p>\n<p>*   <strong>Kimlik Do\u011frulama Hatalar\u0131:<\/strong><br \/>\n    *   <code>authorization: enabled<\/code> ayar\u0131 aktifken, <code>mongo<\/code> kabu\u011funa ba\u011flan\u0131rken <code>-u<\/code>, <code>-p<\/code> ve <code>--authenticationDatabase<\/code> parametrelerini do\u011fru kulland\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n    *   Kullan\u0131c\u0131 ad\u0131n\u0131n ve \u015fifrenin do\u011fru oldu\u011fundan emin olun.<br \/>\n    *   Y\u00f6netici kullan\u0131c\u0131s\u0131n\u0131n do\u011fru rol ve yetkilere sahip oldu\u011fundan emin olun.<\/p>\n<p>*   <strong>Primary Se\u00e7imi Ger\u00e7ekle\u015fmiyor veya S\u0131k S\u0131k De\u011fi\u015fiyor:<\/strong><br \/>\n    *   Replica Set&#8217;teki oy veren d\u00fc\u011f\u00fcm say\u0131s\u0131n\u0131n tek oldu\u011fundan emin olun (genellikle 3 veya 5). \u00c7ift say\u0131da d\u00fc\u011f\u00fcm varsa, bir Arbiter eklemeyi d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n    *   A\u011f gecikmeleri veya kesintileri de se\u00e7im sorunlar\u0131na neden olabilir.<br \/>\n    *   <code>rs.status()<\/code> \u00e7\u0131kt\u0131s\u0131ndaki <code>health<\/code> de\u011ferlerini kontrol edin.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu makalede, Ubuntu 20.04 \u00fczerinde bir MongoDB Replica Set&#8217;i kurmak ve yap\u0131land\u0131rmak i\u00e7in ad\u0131m ad\u0131m bir rehber sunduk. Replica Set&#8217;in ne oldu\u011funu, neden \u00f6nemli oldu\u011funu ve y\u00fcksek eri\u015filebilirlik, veri yedeklili\u011fi ve okuma \u00f6l\u00e7eklendirme gibi avantajlar\u0131n\u0131 ele ald\u0131k.<\/p>\n<p>Kurulum s\u00fcrecinde, her bir d\u00fc\u011f\u00fcm\u00fcn haz\u0131rlanmas\u0131, MongoDB&#8217;nin y\u00fcklenmesi, g\u00fcvenlik duvar\u0131n\u0131n yap\u0131land\u0131r\u0131lmas\u0131 ve <code>mongod.conf<\/code> dosyas\u0131n\u0131n d\u00fczenlenmesi gibi temel ad\u0131mlar\u0131 uygulad\u0131k. Replica Set&#8217;i ba\u015flatt\u0131k ve g\u00fcvenli\u011fi sa\u011flamak i\u00e7in anahtar dosyas\u0131 kimlik do\u011frulamas\u0131n\u0131 etkinle\u015ftirdik. Ayr\u0131ca, bir Arbiter d\u00fc\u011f\u00fcm\u00fcn\u00fcn nas\u0131l eklenece\u011fini ve Replica Set&#8217;in failover yetene\u011fini nas\u0131l test edece\u011fimizi g\u00f6sterdik.<\/p>\n<p>Art\u0131k, uygulaman\u0131z i\u00e7in y\u00fcksek oranda eri\u015filebilir ve dayan\u0131kl\u0131 bir MongoDB veri taban\u0131 ortam\u0131na sahipsiniz. Unutmay\u0131n ki \u00fcretim ortamlar\u0131nda daha fazla g\u00fcvenlik \u00f6nlemi (TLS\/SSL \u015fifrelemesi, a\u011f segmentasyonu, detayl\u0131 eri\u015fim kontrol\u00fc) ve s\u00fcrekli izleme kritik \u00f6neme sahiptir. Bu temel yap\u0131land\u0131rma, daha karma\u015f\u0131k ve \u00f6l\u00e7eklenebilir MongoDB da\u011f\u0131t\u0131mlar\u0131 i\u00e7in sa\u011flam bir temel olu\u015fturmaktad\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?\nModern uygulamalar i\u00e7in veri tabanlar\u0131, y\u00fcksek eri\u015filebilirlik, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve","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-30301","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>Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r? - 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\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?  Modern uygulamalar i\u00e7in veri tabanlar\u0131, y\u00fcksek eri\u015filebilirlik, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-26T12:14:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-26T12:15:53+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?\",\"datePublished\":\"2025-09-26T12:14:52+00:00\",\"dateModified\":\"2025-09-26T12:15:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\"},\"wordCount\":3299,\"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\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\",\"name\":\"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-26T12:14:52+00:00\",\"dateModified\":\"2025-09-26T12:15:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?\"}]},{\"@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":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r? - 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\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?","og_description":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?  Modern uygulamalar i\u00e7in veri tabanlar\u0131, y\u00fcksek eri\u015filebilirlik, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-26T12:14:52+00:00","article_modified_time":"2025-09-26T12:15:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?","datePublished":"2025-09-26T12:14:52+00:00","dateModified":"2025-09-26T12:15:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/"},"wordCount":3299,"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\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/","name":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-26T12:14:52+00:00","dateModified":"2025-09-26T12:15:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-mongodb-replica-set-nedir-ve-neden-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: MongoDB Replica Set Nedir ve Neden Kullan\u0131l\u0131r?"}]},{"@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\/30301","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=30301"}],"version-history":[{"count":2,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30301\/revisions"}],"predecessor-version":[{"id":30303,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30301\/revisions\/30303"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}