{"id":37648,"date":"2026-01-11T14:41:00","date_gmt":"2026-01-11T11:41:00","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37648"},"modified":"2026-01-11T14:41:00","modified_gmt":"2026-01-11T11:41:00","slug":"ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/","title":{"rendered":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, uygulamalar\u0131n s\u00fcrekli b\u00fcy\u00fcyen veri hacimlerini ve y\u00fcksek e\u015fzamanl\u0131 istekleri sorunsuz bir \u015fekilde i\u015flemesi kritik \u00f6neme sahiptir. Geleneksel veritaban\u0131 mimarileri, belirli bir noktadan sonra performans ve \u00f6l\u00e7eklenebilirlik sorunlar\u0131yla kar\u015f\u0131la\u015fabilir. MongoDB, esnek belge tabanl\u0131 yap\u0131s\u0131 ve yatay \u00f6l\u00e7eklenebilirlik yetenekleri sayesinde bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar. \u00d6zellikle sharding, MongoDB&#8217;nin b\u00fcy\u00fck veri k\u00fcmelerini ve y\u00fcksek y\u00fckleri y\u00f6netmek i\u00e7in tasarlanm\u0131\u015f temel \u00f6zelliklerinden biridir.<\/p>\n<p>Bu kapsaml\u0131 teknik makale, Ubuntu 12.04 i\u015fletim sistemine sahip Sanal \u00d6zel Sunucular (VPS) \u00fczerinde bir MongoDB shard k\u00fcmesinin ad\u0131m ad\u0131m nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 detayland\u0131rmaktad\u0131r. Ubuntu 12.04&#8217;\u00fcn eski bir s\u00fcr\u00fcm olmas\u0131 nedeniyle, bu rehber belirli s\u00fcr\u00fcm uyumluluklar\u0131na ve olas\u0131 k\u0131s\u0131tlamalara dikkat \u00e7ekerek, bu ortamda shard k\u00fcmesi kurmak isteyenlere yol g\u00f6sterecektir. Sharding&#8217;in temel prensiplerinden ba\u015flayarak, her bir k\u00fcme bile\u015feninin kurulumuna, yap\u0131land\u0131rmas\u0131na ve test edilmesine kadar t\u00fcm s\u00fcre\u00e7 ayr\u0131nt\u0131l\u0131 bir \u015fekilde ele al\u0131nacakt\u0131r. Ama\u00e7, okuyuculara sa\u011flam, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir MongoDB altyap\u0131s\u0131 kurmalar\u0131 i\u00e7in gerekli bilgi ve becerileri kazand\u0131rmakt\u0131r.<\/p>\n<h2>Sharding Nedir ve Neden Kullan\u0131l\u0131r?<\/h2>\n<p>Sharding, b\u00fcy\u00fck veri k\u00fcmelerinin birden \u00e7ok sunucuya (shard) yatay olarak da\u011f\u0131t\u0131lmas\u0131 i\u015flemidir. Her bir shard, veri k\u00fcmesinin bir alt k\u00fcmesini bar\u0131nd\u0131r\u0131r ve kendi ba\u015f\u0131na bir veritaban\u0131 sistemi gibi \u00e7al\u0131\u015f\u0131r. Bu yakla\u015f\u0131m, tek bir sunucunun depolama kapasitesi, i\u015flem g\u00fcc\u00fc veya I\/O performans limitlerine tak\u0131lmadan veritaban\u0131 sistemlerinin \u00f6l\u00e7eklenmesini sa\u011flar.<\/p>\n<h3>Neden Sharding Kullanmal\u0131y\u0131z?<\/h3>\n<p>*   <strong>Yatay \u00d6l\u00e7eklenebilirlik:<\/strong> Geleneksel dikey \u00f6l\u00e7eklendirme (daha g\u00fc\u00e7l\u00fc bir sunucuya ge\u00e7i\u015f), belirli bir noktada fiziksel s\u0131n\u0131rlarla kar\u015f\u0131la\u015f\u0131r ve maliyetli hale gelir. Sharding, daha fazla sunucu ekleyerek kapasiteyi art\u0131rma olana\u011f\u0131 sunar.<br \/>\n*   <strong>Daha Y\u00fcksek Performans:<\/strong> Veri birden \u00e7ok sunucuya da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda, sorgular paralel olarak i\u015flenebilir. Bu, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde karma\u015f\u0131k sorgular \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken \u00f6nemli performans art\u0131\u015flar\u0131 sa\u011flar. Her shard, kendi verisinin bir alt k\u00fcmesini i\u015fledi\u011fi i\u00e7in, her bir sunucunun \u00fczerindeki y\u00fck azal\u0131r.<br \/>\n*   <strong>Daha Fazla Depolama Kapasitesi:<\/strong> Tek bir sunucunun disk alan\u0131 s\u0131n\u0131rlamalar\u0131n\u0131 a\u015farak, terabaytlarca hatta petabaytlarca veriyi depolama imkan\u0131 sunar.<br \/>\n*   <strong>Y\u00fcksek Eri\u015filebilirlik:<\/strong> Sharding genellikle replica set&#8217;lerle birle\u015ftirilir. Bir shard&#8217;\u0131n birincil sunucusu (primary) ba\u015far\u0131s\u0131z oldu\u011funda, replica set i\u00e7indeki ikincil sunuculardan (secondary) biri otomatik olarak birincil hale gelir, bu da hizmet kesintilerini minimize eder.<br \/>\n*   <strong>Daha Az A\u011f Gecikmesi:<\/strong> Veriler co\u011frafi olarak da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda, kullan\u0131c\u0131lar kendilerine en yak\u0131n shard&#8217;dan veri alabilir, bu da a\u011f gecikmelerini azalt\u0131r.<\/p>\n<h3>MongoDB Shard K\u00fcmesinin Temel Bile\u015fenleri<\/h3>\n<p>Bir MongoDB shard k\u00fcmesi \u00fc\u00e7 ana bile\u015fenden olu\u015fur:<\/p>\n<p>1.  <strong>Shardlar (Shards):<\/strong> Verilerin tutuldu\u011fu ve i\u015flendi\u011fi sunuculard\u0131r. Her bir shard, y\u00fcksek eri\u015filebilirlik ve veri dayan\u0131kl\u0131l\u0131\u011f\u0131 sa\u011flamak i\u00e7in genellikle bir replica set olarak yap\u0131land\u0131r\u0131l\u0131r. Bir shard k\u00fcmesi birden \u00e7ok shard i\u00e7erebilir.<br \/>\n2.  <strong>Config Serverlar (Config Servers):<\/strong> K\u00fcmenin meta verilerini (hangi verinin hangi shard&#8217;da oldu\u011fu, shard key aral\u0131klar\u0131, chunk&#8217;lar vb.) depolayan \u00f6zel <code>mongod<\/code> \u00f6rnekleridir. Config serverlar da y\u00fcksek eri\u015filebilirlik i\u00e7in bir replica set olarak yap\u0131land\u0131r\u0131l\u0131r. MongoDB 3.2 ve sonraki s\u00fcr\u00fcmlerde config server&#8217;lar zorunlu olarak replica set olarak \u00e7al\u0131\u015f\u0131r. Ubuntu 12.04 i\u00e7in kullanaca\u011f\u0131m\u0131z MongoDB 2.x veya erken 3.x s\u00fcr\u00fcmlerinde de bu yakla\u015f\u0131m \u00f6nerilir.<br \/>\n3.  <strong>mongos Routerlar (Query Routers):<\/strong> \u0130stemci uygulamalar\u0131 ile shard k\u00fcmesi aras\u0131ndaki aray\u00fcz\u00fc sa\u011flayan y\u00f6nlendiricilerdir. Uygulamalar <code>mongos<\/code>&#8216;a ba\u011flan\u0131r ve <code>mongos<\/code>, sorgular\u0131 do\u011fru shard&#8217;lara y\u00f6nlendirir, sonu\u00e7lar\u0131 toplar ve istemciye geri g\u00f6nderir. <code>mongos<\/code>&#8216;lar durum bilgisi tutmaz (stateless) ve kolayca yatay olarak \u00f6l\u00e7eklenebilir.<\/p>\n<h3>Shard Key Se\u00e7imi<\/h3>\n<p>Sharding&#8217;in en kritik kararlar\u0131ndan biri, shard key se\u00e7imidir. Shard key, MongoDB&#8217;nin verileri shard&#8217;lar aras\u0131nda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131 belirleyen bir veya daha fazla alan\u0131n birle\u015fimidir. \u0130yi bir shard key:<br \/>\n*   Veriyi shard&#8217;lar aras\u0131nda e\u015fit olarak da\u011f\u0131t\u0131r (homojen da\u011f\u0131l\u0131m).<br \/>\n*   Sorgular\u0131n \u00e7o\u011funlu\u011funun belirli bir shard&#8217;a y\u00f6nlendirilmesini sa\u011flar (hedefli sorgular).<br \/>\n*   Hotspot&#8217;lar\u0131 (tek bir shard&#8217;\u0131n a\u015f\u0131r\u0131 y\u00fcklenmesi) \u00f6nler.<\/p>\n<p>Yanl\u0131\u015f shard key se\u00e7imi, sharding&#8217;in faydalar\u0131n\u0131 ortadan kald\u0131rabilir ve hatta performans\u0131 d\u00fc\u015f\u00fcrebilir.<\/p>\n<h2>Sistem Gereksinimleri ve \u00d6n Haz\u0131rl\u0131k<\/h2>\n<p>Ubuntu 12.04 \u00fczerinde bir MongoDB shard k\u00fcmesi kurmak i\u00e7in belirli sistem gereksinimleri ve \u00f6n haz\u0131rl\u0131k ad\u0131mlar\u0131 bulunmaktad\u0131r. Bu ad\u0131mlar, kurulum s\u00fcrecinin sorunsuz ilerlemesini ve k\u00fcmenin istikrarl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>VPS Say\u0131s\u0131 ve Da\u011f\u0131l\u0131m\u0131<\/h3>\n<p>Bir shard k\u00fcmesi kurmak i\u00e7in minimum gereksinimler:<br \/>\n*   <strong>Config Server Replica Set:<\/strong> 3 adet VPS (her biri bir config server i\u00e7in).<br \/>\n<em>   <strong>Shard Replica Set&#8217;leri:<\/strong> Her shard i\u00e7in en az 3 adet VPS. Bu rehberde 2 shard kullanaca\u011f\u0131m\u0131z\u0131 varsayarsak, 2 <\/em> 3 = 6 adet VPS.<br \/>\n*   <strong>mongos Router&#8217;lar:<\/strong> En az 1 adet VPS (genellikle yedeklilik i\u00e7in 2 veya daha fazla \u00f6nerilir).<\/p>\n<p>Toplamda, bu \u00f6rnek yap\u0131land\u0131rma i\u00e7in <strong>en az 10 adet Ubuntu 12.04 VPS<\/strong> gerekecektir. Her VPS&#8217;in en az 1GB RAM ve 20GB SSD depolama alan\u0131na sahip olmas\u0131 \u00f6nerilir.<\/p>\n<p><strong>\u00d6rnek A\u011f Topolojisi (IP Adresleri ve Rolleri):<\/strong><\/p>\n<p>| Rol                  | VPS IP Adresi      | Port Numaras\u0131 |<br \/>\n| :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; | :&#8212;&#8212;&#8212;&#8212; |<br \/>\n| Config Server 1      | <code>192.168.1.101<\/code>    | <code>27019<\/code>       |<br \/>\n| Config Server 2      | <code>192.168.1.102<\/code>    | <code>27019<\/code>       |<br \/>\n| Config Server 3      | <code>192.168.1.103<\/code>    | <code>27019<\/code>       |<br \/>\n| Shard1-Replica1      | <code>192.168.1.111<\/code>    | <code>27018<\/code>       |<br \/>\n| Shard1-Replica2      | <code>192.168.1.112<\/code>    | <code>27018<\/code>       |<br \/>\n| Shard1-Replica3      | <code>192.168.1.113<\/code>    | <code>27018<\/code>       |<br \/>\n| Shard2-Replica1      | <code>192.168.1.121<\/code>    | <code>27018<\/code>       |<br \/>\n| Shard2-Replica2      | <code>192.168.1.122<\/code>    | <code>27018<\/code>       |<br \/>\n| Shard2-Replica3      | <code>192.168.1.123<\/code>    | <code>27018<\/code>       |<br \/>\n| mongos Router 1      | <code>192.168.1.131<\/code>    | <code>27017<\/code>       |<br \/>\n| mongos Router 2 (Ops.) | <code>192.168.1.132<\/code>    | <code>27017<\/code>       |<\/p>\n<p><strong>Not:<\/strong> Bu IP adresleri ve portlar \u00f6rnek ama\u00e7l\u0131d\u0131r. Kendi a\u011f yap\u0131land\u0131rman\u0131za g\u00f6re bunlar\u0131 ayarlaman\u0131z gerekecektir. T\u00fcm VPS&#8217;lerin birbirleriyle belirtilen portlar \u00fczerinden ileti\u015fim kurabildi\u011finden emin olun.<\/p>\n<h3>MongoDB S\u00fcr\u00fcm\u00fc<\/h3>\n<p>Ubuntu 12.04 (Precise Pangolin), Nisan 2017&#8217;de \u00f6mr\u00fcn\u00fc tamamlam\u0131\u015f eski bir i\u015fletim sistemidir. Bu nedenle, g\u00fcncel MongoDB s\u00fcr\u00fcmleriyle uyumluluk sorunlar\u0131 ya\u015fanabilir. Bu rehber i\u00e7in MongoDB 2.6 veya 3.0 serisi \u00f6nerilir. MongoDB&#8217;nin kendi depolar\u0131 bu eski s\u00fcr\u00fcmleri hala bar\u0131nd\u0131r\u0131yor olabilir. Bu rehberde, MongoDB 2.6&#8217;y\u0131 hedef alaca\u011f\u0131z, \u00e7\u00fcnk\u00fc 12.04 ile en uyumlu ve yayg\u0131n kullan\u0131lan s\u00fcr\u00fcmlerden biridir.<\/p>\n<h3>T\u00fcm VPS&#8217;lerde Ortak Ad\u0131mlar<\/h3>\n<p>Her bir VPS&#8217;ye SSH ile ba\u011flanarak a\u015fa\u011f\u0131daki \u00f6n haz\u0131rl\u0131k ad\u0131mlar\u0131n\u0131 uygulay\u0131n:<\/p>\n<p>1.  <strong>Sistem G\u00fcncellemesi:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\n    sudo apt-get upgrade -y<\/code><\/pre>\n<p>2.  <strong>MongoDB Deposu Ekleme (MongoDB 2.6 i\u00e7in):<\/strong><br \/>\n    MongoDB&#8217;nin resmi deposunu sisteminize ekleyin.<\/p>\n<pre><code class=\"language-bash\">sudo apt-key adv --keyserver hkp:\/\/keyserver.ubuntu.com:80 --recv 7F0CEB10\n    echo 'deb http:\/\/downloads-distro.mongodb.org\/repo\/ubuntu-upstart dist 10gen' | sudo tee \/etc\/apt\/sources.list.d\/mongodb.list\n    sudo apt-get update<\/code><\/pre>\n<p>    <em>Not: <code>10gen<\/code> deposu MongoDB 2.x s\u00fcr\u00fcmleri i\u00e7in ge\u00e7erlidir. Daha yeni s\u00fcr\u00fcmler i\u00e7in depo adresi farkl\u0131 olabilir.<\/em><\/p>\n<p>3.  <strong>MongoDB Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt-get install -y mongodb-org=2.6.12 mongodb-org-server=2.6.12 mongodb-org-shell=2.6.12 mongodb-org-mongos=2.6.12 mongodb-org-tools=2.6.12<\/code><\/pre>\n<p>    <em>Not: Belirli bir s\u00fcr\u00fcm\u00fc (\u00f6rne\u011fin 2.6.12) y\u00fcklemek, uyumluluk sorunlar\u0131n\u0131 \u00f6nlemek i\u00e7in \u00f6nemlidir.<\/em><\/p>\n<p>4.  <strong>G\u00fcvenlik Duvar\u0131 Ayarlar\u0131 (UFW Kullan\u0131l\u0131yorsa):<\/strong><br \/>\n    Gerekli portlara (27017, 27018, 27019) eri\u015fime izin verin.<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 27017\/tcp\n    sudo ufw allow 27018\/tcp\n    sudo ufw allow 27019\/tcp\n    sudo ufw enable<\/code><\/pre>\n<p>    <em>Not: Kendi g\u00fcvenlik politikalar\u0131n\u0131za g\u00f6re sadece gerekli IP adreslerinden eri\u015fime izin vermeniz daha g\u00fcvenlidir.<\/em><\/p>\n<p>5.  <strong>Veri ve Log Dizinleri Olu\u015fturma:<\/strong><br \/>\n    Her MongoDB \u00f6rne\u011fi i\u00e7in ayr\u0131 veri ve log dizinleri olu\u015fturmak iyi bir uygulamad\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/lib\/mongodb\/configdb\n    sudo mkdir -p \/var\/lib\/mongodb\/shard1\n    sudo mkdir -p \/var\/lib\/mongodb\/shard2\n    sudo mkdir -p \/var\/log\/mongodb\n    sudo chown -R mongodb:mongodb \/var\/lib\/mongodb\n    sudo chown -R mongodb:mongodb \/var\/log\/mongodb<\/code><\/pre>\n<p>    <em>Bu dizinler, MongoDB instance&#8217;lar\u0131n\u0131n t\u00fcr\u00fcne g\u00f6re kullan\u0131lacakt\u0131r.<\/em><\/p>\n<h2>Shard K\u00fcmesi Bile\u015fenlerinin Kurulumu<\/h2>\n<p>\u015eimdi s\u0131ra, k\u00fcmenin temel bile\u015fenlerini tek tek kurmaya geldi. Her bir bile\u015fen i\u00e7in ayr\u0131 VPS&#8217;lerde kurulum ad\u0131mlar\u0131n\u0131 takip edece\u011fiz.<\/p>\n<h3>Config Server Replica Set Kurulumu<\/h3>\n<p>Config server&#8217;lar, shard k\u00fcmesinin meta verilerini tutar. Y\u00fcksek eri\u015filebilirlik i\u00e7in \u00fc\u00e7 config server&#8217;dan olu\u015fan bir replica set kuraca\u011f\u0131z.<\/p>\n<p><strong>Ad\u0131m 1: Her bir Config Server VPS&#8217;sinde <code>mongod<\/code>&#8216;u Ba\u015flatma<\/strong><br \/>\n(<code>192.168.1.101<\/code>, <code>192.168.1.102<\/code>, <code>192.168.1.103<\/code> IP&#8217;leri i\u00e7in)<\/p>\n<p>Her VPS&#8217;ye SSH ile ba\u011flan\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n. <code>-port<\/code> parametresi ile 27019 portunu kullan\u0131yoruz ve <code>--configsvr<\/code> parametresi ile bu instance&#8217;\u0131n bir config server oldu\u011funu belirtiyoruz. <code>--replSet<\/code> ile replica set ad\u0131n\u0131 belirliyoruz (\u00f6rne\u011fin <code>cs_rs<\/code>).<\/p>\n<pre><code class=\"language-bash\"># Config Server 1 (192.168.1.101)\nsudo mongod --port 27019 --dbpath \/var\/lib\/mongodb\/configdb --logpath \/var\/log\/mongodb\/configsvr.log --fork --configsvr --replSet cs_rs --bind_ip 192.168.1.101\n\n<h2>Config Server 2 (192.168.1.102)<\/h2>\nsudo mongod --port 27019 --dbpath \/var\/lib\/mongodb\/configdb --logpath \/var\/log\/mongodb\/configsvr.log --fork --configsvr --replSet cs_rs --bind_ip 192.168.1.102\n\n<h2>Config Server 3 (192.168.1.103)<\/h2>\nsudo mongod --port 27019 --dbpath \/var\/lib\/mongodb\/configdb --logpath \/var\/log\/mongodb\/configsvr.log --fork --configsvr --replSet cs_rs --bind_ip 192.168.1.103<\/code><\/pre>\n<p><em><code>--fork<\/code> komutu, <code>mongod<\/code>&#8216;u arka planda bir s\u00fcre\u00e7 olarak \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flar.<\/em><br \/>\n<em><code>--bind_ip<\/code> ile sadece belirtilen IP adresinden eri\u015fime izin verilir. Bu, g\u00fcvenlik i\u00e7in iyi bir uygulamad\u0131r.<\/em><\/p>\n<p><strong>Ad\u0131m 2: Config Server Replica Set&#8217;i Ba\u015flatma<\/strong><br \/>\n\u00dc\u00e7 config server <code>mongod<\/code> s\u00fcreci ba\u015flad\u0131ktan sonra, herhangi bir config server&#8217;a (\u00f6rne\u011fin <code>192.168.1.101<\/code>) <code>mongo<\/code> kabu\u011fu ile ba\u011flan\u0131n ve replica set&#8217;i ba\u015flat\u0131n.<\/p>\n<pre><code class=\"language-bash\">mongo --port 27019 --host 192.168.1.101<\/code><\/pre>\n<p><code>mongo<\/code> kabu\u011funda a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-javascript\">config = {\n   _id : \"cs_rs\",\n   members: [\n      { _id : 0, host : \"192.168.1.101:27019\" },\n      { _id : 1, host : \"192.168.1.102:27019\" },\n      { _id : 2, host : \"192.168.1.103:27019\" }\n   ]\n}\nrs.initiate(config)<\/code><\/pre>\n<p><code>rs.initiate()<\/code> komutu ba\u015far\u0131l\u0131 oldu\u011funda, birincil (primary) sunucuyu belirleyecek ve di\u011ferlerini ikincil (secondary) olarak yap\u0131land\u0131racakt\u0131r. Durumu <code>rs.status()<\/code> ile kontrol edebilirsiniz.<\/p>\n<h3>Shard Replica Set&#8217;lerinin Kurulumu<\/h3>\n<p>Her bir shard, kendi ba\u015f\u0131na bir replica set olarak yap\u0131land\u0131r\u0131lacakt\u0131r. Bu rehberde iki shard kullanaca\u011f\u0131z: <code>shard1_rs<\/code> ve <code>shard2_rs<\/code>. Her biri \u00fc\u00e7 \u00fcyeden olu\u015facakt\u0131r.<\/p>\n<p><strong>Ad\u0131m 1: Shard1 Replica Set \u00dcyelerini Ba\u015flatma<\/strong><br \/>\n(<code>192.168.1.111<\/code>, <code>192.168.1.112<\/code>, <code>192.168.1.113<\/code> IP&#8217;leri i\u00e7in)<\/p>\n<p>Her VPS&#8217;ye SSH ile ba\u011flan\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n. <code>-port<\/code> parametresi ile 27018 portunu kullan\u0131yoruz ve <code>--shardsvr<\/code> parametresi ile bu instance&#8217;\u0131n bir shard oldu\u011funu belirtiyoruz. <code>--replSet<\/code> ile replica set ad\u0131n\u0131 belirliyoruz (\u00f6rne\u011fin <code>shard1_rs<\/code>).<\/p>\n<pre><code class=\"language-bash\"># Shard1-Replica1 (192.168.1.111)\nsudo mongod --port 27018 --dbpath \/var\/lib\/mongodb\/shard1 --logpath \/var\/log\/mongodb\/shard1.log --fork --shardsvr --replSet shard1_rs --bind_ip 192.168.1.111\n\n<h2>Shard1-Replica2 (192.168.1.112)<\/h2>\nsudo mongod --port 27018 --dbpath \/var\/lib\/mongodb\/shard1 --logpath \/var\/log\/mongodb\/shard1.log --fork --shardsvr --replSet shard1_rs --bind_ip 192.168.1.112\n\n<h2>Shard1-Replica3 (192.168.1.113)<\/h2>\nsudo mongod --port 27018 --dbpath \/var\/lib\/mongodb\/shard1 --logpath \/var\/log\/mongodb\/shard1.log --fork --shardsvr --replSet shard1_rs --bind_ip 192.168.1.113<\/code><\/pre>\n<p><strong>Ad\u0131m 2: Shard1 Replica Set&#8217;i Ba\u015flatma<\/strong><br \/>\nHerhangi bir Shard1 \u00fcyesine (\u00f6rne\u011fin <code>192.168.1.111<\/code>) <code>mongo<\/code> kabu\u011fu ile ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --port 27018 --host 192.168.1.111<\/code><\/pre>\n<p><code>mongo<\/code> kabu\u011funda:<\/p>\n<pre><code class=\"language-javascript\">config = {\n   _id : \"shard1_rs\",\n   members: [\n      { _id : 0, host : \"192.168.1.111:27018\" },\n      { _id : 1, host : \"192.168.1.112:27018\" },\n      { _id : 2, host : \"192.168.1.113:27018\" }\n   ]\n}\nrs.initiate(config)<\/code><\/pre>\n<p><code>rs.status()<\/code> ile durumu kontrol edin.<\/p>\n<p><strong>Ad\u0131m 3: Shard2 Replica Set \u00dcyelerini Ba\u015flatma<\/strong><br \/>\n(<code>192.168.1.121<\/code>, <code>192.168.1.122<\/code>, <code>192.168.1.123<\/code> IP&#8217;leri i\u00e7in)<\/p>\n<pre><code class=\"language-bash\"># Shard2-Replica1 (192.168.1.121)\nsudo mongod --port 27018 --dbpath \/var\/lib\/mongodb\/shard2 --logpath \/var\/log\/mongodb\/shard2.log --fork --shardsvr --replSet shard2_rs --bind_ip 192.168.1.121\n\n<h2>Shard2-Replica2 (192.168.1.122)<\/h2>\nsudo mongod --port 27018 --dbpath \/var\/lib\/mongodb\/shard2 --logpath \/var\/log\/mongodb\/shard2.log --fork --shardsvr --replSet shard2_rs --bind_ip 192.168.1.122\n\n<h2>Shard2-Replica3 (192.168.1.123)<\/h2>\nsudo mongod --port 27018 --dbpath \/var\/lib\/mongodb\/shard2 --logpath \/var\/log\/mongodb\/shard2.log --fork --shardsvr --replSet shard2_rs --bind_ip 192.168.1.123<\/code><\/pre>\n<p><strong>Ad\u0131m 4: Shard2 Replica Set&#8217;i Ba\u015flatma<\/strong><br \/>\nHerhangi bir Shard2 \u00fcyesine (\u00f6rne\u011fin <code>192.168.1.121<\/code>) <code>mongo<\/code> kabu\u011fu ile ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --port 27018 --host 192.168.1.121<\/code><\/pre>\n<p><code>mongo<\/code> kabu\u011funda:<\/p>\n<pre><code class=\"language-javascript\">config = {\n   _id : \"shard2_rs\",\n   members: [\n      { _id : 0, host : \"192.168.1.121:27018\" },\n      { _id : 1, host : \"192.168.1.122:27018\" },\n      { _id : 2, host : \"192.168.1.123:27018\" }\n   ]\n}\nrs.initiate(config)<\/code><\/pre>\n<p><code>rs.status()<\/code> ile durumu kontrol edin.<\/p>\n<h3>mongos Router Kurulumu<\/h3>\n<p><code>mongos<\/code> router&#8217;lar, istemci uygulamalar\u0131ndan gelen sorgular\u0131 al\u0131r ve bunlar\u0131 do\u011fru shard&#8217;lara y\u00f6nlendirir.<\/p>\n<p><strong>Ad\u0131m 1: mongos Router&#8217;\u0131 Ba\u015flatma<\/strong><br \/>\n(<code>192.168.1.131<\/code> IP&#8217;si i\u00e7in)<\/p>\n<p><code>mongos<\/code>&#8216;u ba\u015flat\u0131rken, <code>--configdb<\/code> parametresi ile config server replica set&#8217;inin ad\u0131n\u0131 ve \u00fcyelerini belirtmelisiniz.<\/p>\n<pre><code class=\"language-bash\"># mongos Router 1 (192.168.1.131)\nsudo mongos --port 27017 --logpath \/var\/log\/mongodb\/mongos.log --fork --configdb cs_rs\/192.168.1.101:27019,192.168.1.102:27019,192.168.1.103:27019 --bind_ip 192.168.1.131<\/code><\/pre>\n<p><em>Birden fazla <code>mongos<\/code> router&#8217;\u0131n\u0131z varsa, her biri i\u00e7in ayn\u0131 komutu farkl\u0131 bir VPS&#8217;de \u00e7al\u0131\u015ft\u0131r\u0131n.<\/em><\/p>\n<h2>Shard K\u00fcmesinin Yap\u0131land\u0131r\u0131lmas\u0131<\/h2>\n<p>T\u00fcm bile\u015fenler \u00e7al\u0131\u015f\u0131r durumda oldu\u011funda, <code>mongos<\/code> router \u00fczerinden k\u00fcme yap\u0131land\u0131rmas\u0131n\u0131 tamamlamam\u0131z gerekir.<\/p>\n<p><strong>Ad\u0131m 1: mongos&#8217;a Ba\u011flanma<\/strong><br \/>\nHerhangi bir <code>mongos<\/code> router&#8217;a (\u00f6rne\u011fin <code>192.168.1.131<\/code>) <code>mongo<\/code> kabu\u011fu ile ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">mongo --port 27017 --host 192.168.1.131<\/code><\/pre>\n<p><strong>Ad\u0131m 2: Shard&#8217;lar\u0131 K\u00fcme&#8217;ye Ekleme<\/strong><br \/>\n<code>mongos<\/code> kabu\u011funda, her bir shard replica set&#8217;ini <code>sh.addShard()<\/code> komutu ile k\u00fcmeye ekleyin:<\/p>\n<pre><code class=\"language-javascript\">sh.addShard( \"shard1_rs\/192.168.1.111:27018,192.168.1.112:27018,192.168.1.113:27018\" )\nsh.addShard( \"shard2_rs\/192.168.1.121:27018,192.168.1.122:27018,192.168.1.123:27018\" )<\/code><\/pre>\n<p>Ba\u015far\u0131l\u0131 bir ekleme sonras\u0131 <code>{ \"shardAdded\" : \"shard1_rs\", \"ok\" : 1 }<\/code> gibi bir \u00e7\u0131kt\u0131 almal\u0131s\u0131n\u0131z.<\/p>\n<p><strong>Ad\u0131m 3: Veritaban\u0131 \u0130\u00e7in Sharding&#8217;i Etkinle\u015ftirme<\/strong><br \/>\nHangi veritaban\u0131nda sharding kullanmak istedi\u011finizi belirtin. \u00d6rne\u011fin, <code>mydb<\/code> ad\u0131nda bir veritaban\u0131 i\u00e7in:<\/p>\n<pre><code class=\"language-javascript\">sh.enableSharding(\"mydb\")<\/code><\/pre>\n<p>Bu komut, <code>mydb<\/code> veritaban\u0131 i\u00e7in sharding&#8217;i etkinle\u015ftirir ancak verileri hen\u00fcz da\u011f\u0131tmaz.<\/p>\n<p><strong>Ad\u0131m 4: Koleksiyon \u0130\u00e7in Sharding&#8217;i Etkinle\u015ftirme ve Shard Key Belirleme<\/strong><br \/>\n\u015eimdi, <code>mydb<\/code> veritaban\u0131ndaki belirli bir koleksiyon (\u00f6rne\u011fin <code>mycollection<\/code>) i\u00e7in sharding&#8217;i etkinle\u015ftirmeli ve bir shard key belirlemelisiniz. Shard key se\u00e7imi kritik \u00f6neme sahiptir. Bu \u00f6rnekte <code>username<\/code> alan\u0131n\u0131 shard key olarak kullanal\u0131m ve bir indeks olu\u015fturarak ba\u015flayal\u0131m:<\/p>\n<pre><code class=\"language-javascript\">use mydb\ndb.mycollection.ensureIndex( { username: 1 } ) \/\/ Shard key i\u00e7in indeks olu\u015fturma\nsh.shardCollection( \"mydb.mycollection\", { \"username\": 1 } )<\/code><\/pre>\n<p><em>E\u011fer shard key olarak <code>_id<\/code> alan\u0131n\u0131 kullanmak isterseniz ve bu alanda homojen da\u011f\u0131l\u0131m bekliyorsan\u0131z, hashed sharding kullanabilirsiniz:<\/em><\/p>\n<pre><code class=\"language-javascript\">db.mycollection.ensureIndex( { _id: \"hashed\" } )\nsh.shardCollection( \"mydb.mycollection\", { \"_id\": \"hashed\" } )<\/code><\/pre>\n<p><code>sh.shardCollection()<\/code> komutu ba\u015far\u0131l\u0131 oldu\u011funda, MongoDB belirtilen koleksiyonu shard&#8217;lar aras\u0131nda da\u011f\u0131tmaya ba\u015flayacakt\u0131r. Ancak, koleksiyon bo\u015fsa veya az veri i\u00e7eriyorsa, da\u011f\u0131t\u0131m hemen ba\u015flamayabilir. Veri eklendik\u00e7e balancer devreye girecek ve chunk&#8217;lar\u0131 shard&#8217;lar aras\u0131nda ta\u015f\u0131yacakt\u0131r.<\/p>\n<h2>Sharding Do\u011frulama ve Test Etme<\/h2>\n<p>K\u00fcme kurulduktan ve yap\u0131land\u0131r\u0131ld\u0131ktan sonra, her \u015feyin beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in do\u011frulama ve test ad\u0131mlar\u0131 atmak \u00f6nemlidir.<\/p>\n<p><strong>Ad\u0131m 1: K\u00fcme Durumunu Kontrol Etme<\/strong><br \/>\n<code>mongos<\/code> kabu\u011funda <code>sh.status()<\/code> komutunu kullanarak k\u00fcmenin genel durumunu kontrol edin:<\/p>\n<pre><code class=\"language-javascript\">sh.status()<\/code><\/pre>\n<p>Bu komut, config server&#8217;lar\u0131, shard&#8217;lar\u0131 ve her bir shard&#8217;daki replica set \u00fcyelerini g\u00f6sterir. Ayr\u0131ca, sharding&#8217;in etkinle\u015ftirildi\u011fi veritabanlar\u0131n\u0131 ve koleksiyonlar\u0131, shard key&#8217;lerini ve chunk da\u011f\u0131l\u0131m\u0131n\u0131 da listeler. T\u00fcm bile\u015fenlerin <code>OK<\/code> veya <code>PRIMARY\/SECONDARY<\/code> durumunda oldu\u011funu do\u011frulay\u0131n.<\/p>\n<p><strong>Ad\u0131m 2: Veri Ekleme ve Da\u011f\u0131l\u0131m\u0131n\u0131 G\u00f6zlemleme<\/strong><br \/>\nSharding&#8217;in do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test etmek i\u00e7in <code>mydb.mycollection<\/code> koleksiyonuna biraz veri ekleyin:<\/p>\n<pre><code class=\"language-javascript\">use mydb\nfor (var i = 0; i < 1000; i++) {\n   db.mycollection.insert( { username: \"user\" + i, value: i, timestamp: new Date() } )\n}<\/code><\/pre>\n<p>\u015eimdi verilerin shard'lar aras\u0131nda nas\u0131l da\u011f\u0131ld\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">db.mycollection.getShardDistribution()<\/code><\/pre>\n<p>Bu komut, her bir shard'da ka\u00e7 belge oldu\u011funu ve veri boyutunu g\u00f6sterir. E\u011fer veriler e\u015fit \u015fekilde da\u011f\u0131lmad\u0131ysa, bu normaldir \u00e7\u00fcnk\u00fc MongoDB'nin balancer'\u0131 chunk'lar\u0131 ta\u015f\u0131mak i\u00e7in biraz zamana ihtiya\u00e7 duyar. Balancer'\u0131n durumu <code>sh.getBalancerState()<\/code> ile kontrol edilebilir.<\/p>\n<p><strong>Ad\u0131m 3: Sorgular\u0131 Test Etme<\/strong><br \/>\n<code>mongos<\/code> \u00fczerinden sorgular \u00e7al\u0131\u015ft\u0131rarak verilerin do\u011fru \u015fekilde getirildi\u011finden emin olun:<\/p>\n<pre><code class=\"language-javascript\">db.mycollection.find({ username: \"user500\" })\ndb.mycollection.find({ value: { $gt: 500 } }).explain(\"executionStats\")<\/code><\/pre>\n<p><code>explain()<\/code> \u00e7\u0131kt\u0131s\u0131, sorgunun hangi shard'lara gitti\u011fini ve nas\u0131l i\u015flendi\u011fini g\u00f6sterir. \u0130yi bir shard key ile yap\u0131lan sorgular\u0131n \u00e7o\u011fu, sadece ilgili shard'lara y\u00f6nlendirilmelidir.<\/p>\n<h2>Sharding \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Bir MongoDB shard k\u00fcmesini kurmak sadece ba\u015flang\u0131\u00e7t\u0131r. Optimum performans ve kararl\u0131l\u0131k i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir.<\/p>\n<p>1.  <strong>Shard Key Se\u00e7imi:<\/strong> K\u00fcmenin performans\u0131 i\u00e7in en kritik fakt\u00f6rd\u00fcr.<br \/>\n    *   <strong>Kardinalite:<\/strong> Shard key'in benzersiz de\u011fer say\u0131s\u0131 y\u00fcksek olmal\u0131d\u0131r.<br \/>\n    *   <strong>Sorgu Da\u011f\u0131l\u0131m\u0131:<\/strong> Uygulaman\u0131z\u0131n \u00e7o\u011fu sorgusu shard key'i i\u00e7ermelidir.<br \/>\n    *   <strong>Yazma Da\u011f\u0131l\u0131m\u0131:<\/strong> Shard key, yazma i\u015flemlerini k\u00fcme genelinde e\u015fit olarak da\u011f\u0131tmal\u0131d\u0131r (hotspot'lar\u0131 \u00f6nlemek i\u00e7in). Zaman serisi verileri i\u00e7in artan bir <code>_id<\/code> kullanmak yerine <code>_id: \"hashed\"<\/code> veya zaman damgas\u0131 + ba\u015fka bir alan kullanmak daha iyidir.<br \/>\n    *   <strong>Chunk Boyutu:<\/strong> Varsay\u0131lan chunk boyutu 64MB'dir. \u0130\u015f y\u00fck\u00fcn\u00fcze g\u00f6re bu boyutu ayarlaman\u0131z gerekebilir. \u00c7ok k\u00fc\u00e7\u00fck chunk'lar meta veri y\u00fck\u00fcn\u00fc art\u0131r\u0131rken, \u00e7ok b\u00fcy\u00fck chunk'lar balancer'\u0131n etkinli\u011fini azaltabilir.<\/p>\n<p>2.  <strong>Balancer Y\u00f6netimi:<\/strong> Balancer, chunk'lar\u0131 shard'lar aras\u0131nda otomatik olarak ta\u015f\u0131yarak verinin e\u015fit da\u011f\u0131l\u0131m\u0131n\u0131 sa\u011flar.<br \/>\n    *   Yo\u011fun saatlerde balancer'\u0131 duraklatmak, performans d\u00fc\u015f\u00fc\u015flerini \u00f6nleyebilir.<br \/>\n    *   Balancer'\u0131n ne zaman \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve ne kadar agresif oldu\u011funu izleyin.<\/p>\n<p>3.  <strong>Kaynak Tahsisi:<\/strong> Her shard ve config server i\u00e7in yeterli RAM, CPU ve I\/O kapasitesi sa\u011flay\u0131n. \u00d6zellikle I\/O performans\u0131, veritaban\u0131 i\u015flemleri i\u00e7in hayati \u00f6neme sahiptir. SSD'ler \u015fiddetle tavsiye edilir.<\/p>\n<p>4.  <strong>Monitoring ve Alerting:<\/strong> K\u00fcmenin sa\u011fl\u0131\u011f\u0131n\u0131, performans\u0131n\u0131 ve kaynak kullan\u0131m\u0131n\u0131 s\u00fcrekli olarak izleyin. MongoDB Cloud Manager veya Prometheus\/Grafana gibi ara\u00e7lar kullan\u0131labilir. Anormal durumlar i\u00e7in uyar\u0131 sistemleri kurun.<\/p>\n<p>5.  <strong>G\u00fcvenlik:<\/strong><br \/>\n    *   <strong>Kimlik Do\u011frulama ve Yetkilendirme:<\/strong> Kullan\u0131c\u0131 tabanl\u0131 kimlik do\u011frulama (SCRAM-SHA-1 veya X.509) ve rol tabanl\u0131 yetkilendirme kullan\u0131n.<br \/>\n    *   <strong>A\u011f G\u00fcvenli\u011fi:<\/strong> T\u00fcm MongoDB bile\u015fenleri aras\u0131nda g\u00fcvenli ileti\u015fim sa\u011flamak i\u00e7in SSL\/TLS kullan\u0131n. G\u00fcvenlik duvarlar\u0131n\u0131 do\u011fru yap\u0131land\u0131rarak sadece gerekli portlardan ve IP adreslerinden eri\u015fime izin verin.<br \/>\n    *   <strong>Kilit Dosyalar\u0131 (Keyfiles):<\/strong> Replica set'ler ve sharded cluster'lar aras\u0131nda dahili kimlik do\u011frulama i\u00e7in keyfile kullan\u0131n.<\/p>\n<p>6.  <strong>Yedekleme ve Kurtarma:<\/strong> D\u00fczenli yedekleme stratejileri uygulay\u0131n. Replica set'ler, birincil sunucu ba\u015far\u0131s\u0131z oldu\u011funda otomatik failover sa\u011flasa da, veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in yedekleme kritik \u00f6neme sahiptir. Point-in-time recovery gibi geli\u015fmi\u015f yedekleme y\u00f6ntemlerini de\u011ferlendirin.<\/p>\n<p>7.  <strong>S\u00fcr\u00fcm Y\u00f6netimi:<\/strong> MongoDB'nin g\u00fcncel ve desteklenen bir s\u00fcr\u00fcm\u00fcn\u00fc kullanmaya \u00f6zen g\u00f6sterin. Ubuntu 12.04'\u00fcn eski olmas\u0131 nedeniyle bu durum daha da \u00f6nemlidir.<\/p>\n<h2>Ubuntu 12.04 \u00d6zel Notlar<\/h2>\n<p>Bu rehber, Ubuntu 12.04 \u00fczerinde bir MongoDB shard k\u00fcmesi olu\u015fturmay\u0131 hedeflese de, bu i\u015fletim sisteminin eski olmas\u0131 nedeniyle baz\u0131 \u00f6nemli noktalara dikkat \u00e7ekmek gerekmektedir.<\/p>\n<p>*   <strong>Destek Sonu (End of Life - EOL):<\/strong> Ubuntu 12.04 (Precise Pangolin) LTS s\u00fcr\u00fcm\u00fc, Nisan 2017'de destek sonuna ula\u015fm\u0131\u015ft\u0131r. Bu, art\u0131k g\u00fcvenlik g\u00fcncellemeleri veya hata d\u00fczeltmeleri almad\u0131\u011f\u0131 anlam\u0131na gelir. Bu durum, sunucular\u0131n\u0131z\u0131 ciddi g\u00fcvenlik risklerine maruz b\u0131rak\u0131r.<br \/>\n*   <strong>G\u00fcvenlik Riskleri:<\/strong> \u00dcretim ortamlar\u0131nda EOL bir i\u015fletim sistemi kullanmak kesinlikle \u00f6nerilmez. Bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131 d\u00fczeltilmedi\u011fi i\u00e7in sisteminiz sald\u0131r\u0131lara kar\u015f\u0131 savunmas\u0131z kalabilir.<br \/>\n*   <strong>MongoDB S\u00fcr\u00fcm Uyumlulu\u011fu:<\/strong> Ubuntu 12.04 i\u00e7in en kararl\u0131 ve uyumlu MongoDB s\u00fcr\u00fcmleri genellikle 2.x veya 3.0\/3.2 serisinin ilk s\u00fcr\u00fcmleridir. Daha yeni MongoDB s\u00fcr\u00fcmleri (\u00f6rne\u011fin 3.4 ve \u00fczeri), daha modern \u00e7ekirdek \u00f6zelliklerine ve sistem k\u00fct\u00fcphanelerine ihtiya\u00e7 duyabilir ve bu da 12.04 \u00fczerinde kurulumu zorla\u015ft\u0131rabilir veya imkans\u0131z hale getirebilir. Bu rehberde 2.6 s\u00fcr\u00fcm\u00fcn\u00fc hedeflememizin nedeni budur.<br \/>\n*   <strong>Performans Optimizasyonlar\u0131:<\/strong> Eski \u00e7ekirdek ve sistem ara\u00e7lar\u0131, modern performans optimizasyonlar\u0131ndan (\u00f6rne\u011fin daha iyi I\/O zamanlay\u0131c\u0131lar\u0131, a\u011f y\u0131\u011f\u0131n\u0131 iyile\u015ftirmeleri) yoksun olabilir. Bu, k\u00fcmenizin genel performans\u0131n\u0131 s\u0131n\u0131rlayabilir.<br \/>\n*   <strong>M\u00fcmk\u00fcnse Y\u00fckseltme:<\/strong> \u015eiddetle tavsiye edilen yakla\u015f\u0131m, m\u00fcmk\u00fcn olan en k\u0131sa s\u00fcrede daha yeni ve desteklenen bir Ubuntu s\u00fcr\u00fcm\u00fcne (\u00f6rne\u011fin Ubuntu 20.04 LTS veya 22.04 LTS) ge\u00e7mektir. Bu, hem g\u00fcvenlik hem de performans a\u00e7\u0131s\u0131ndan \u00f6nemli faydalar sa\u011flayacakt\u0131r. E\u011fer bir y\u00fckseltme m\u00fcmk\u00fcn de\u011filse, bu k\u00fcmenin sadece test veya geli\u015ftirme ortamlar\u0131nda kullan\u0131lmas\u0131 ve internete do\u011frudan a\u00e7\u0131k olmamas\u0131 gibi s\u0131k\u0131 g\u00fcvenlik \u00f6nlemleri al\u0131nmas\u0131 gerekir.<\/p>\n<p>Bu k\u0131s\u0131tlamalara ra\u011fmen, yukar\u0131daki ad\u0131mlar Ubuntu 12.04 \u00fczerinde bir MongoDB shard k\u00fcmesi kurmak i\u00e7in teknik olarak do\u011fru yolu g\u00f6stermektedir. Ancak, g\u00fcvenlik ve s\u00fcrd\u00fcr\u00fclebilirlik a\u00e7\u0131s\u0131ndan modern bir i\u015fletim sistemi kullanman\u0131n \u00f6nemi g\u00f6z ard\u0131 edilmemelidir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu makalede, Ubuntu 12.04 VPS'ler \u00fczerinde bir MongoDB shard k\u00fcmesinin nas\u0131l kurulaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m detayl\u0131 bir \u015fekilde inceledik. Sharding'in temel prensiplerinden, k\u00fcme bile\u015fenlerinin (config server'lar, shard'lar ve mongos router'lar) kurulumuna, yap\u0131land\u0131rmas\u0131na ve test edilmesine kadar t\u00fcm s\u00fcre\u00e7leri ele ald\u0131k. Ayr\u0131ca, ba\u015far\u0131l\u0131 bir shard k\u00fcmesi y\u00f6netimi i\u00e7in kritik ipu\u00e7lar\u0131 ve en iyi uygulamalar hakk\u0131nda bilgi verdik.<\/p>\n<p>MongoDB sharding, b\u00fcy\u00fck veri k\u00fcmeleri ve y\u00fcksek trafik y\u00fckleri kar\u015f\u0131s\u0131nda yatay \u00f6l\u00e7eklenebilirlik, y\u00fcksek performans ve eri\u015filebilirlik sa\u011flayan g\u00fc\u00e7l\u00fc bir \u00f6zelliktir. Do\u011fru bir planlama ve uygulama ile, uygulaman\u0131z\u0131n gelecekteki b\u00fcy\u00fcme ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131layabilecek sa\u011flam bir veritaban\u0131 altyap\u0131s\u0131 olu\u015fturabilirsiniz.<\/p>\n<p>Ancak, Ubuntu 12.04 gibi eski ve desteklenmeyen bir i\u015fletim sistemi kullanman\u0131n getirdi\u011fi g\u00fcvenlik riskleri ve uyumluluk s\u0131n\u0131rlamalar\u0131 g\u00f6z ard\u0131 edilmemelidir. \u00dcretim ortamlar\u0131nda her zaman g\u00fcncel ve desteklenen yaz\u0131l\u0131m s\u00fcr\u00fcmlerini kullanmak, sistemlerinizin g\u00fcvenli\u011fini ve istikrar\u0131n\u0131 sa\u011flaman\u0131n anahtar\u0131d\u0131r. Bu rehber, eski bir ortamda \u00e7al\u0131\u015fmak zorunda kalanlar i\u00e7in bir yol haritas\u0131 sunarken, modern bir yakla\u015f\u0131mla daha g\u00fcvenli ve verimli \u00e7\u00f6z\u00fcmlere ge\u00e7i\u015fin \u00f6nemini de vurgulamaktad\u0131r. Sharding d\u00fcnyas\u0131na ad\u0131m atarken, s\u00fcrekli \u00f6\u011frenmeye ve en iyi uygulamalar\u0131 takip etmeye devam etmek, MongoDB'nin sundu\u011fu t\u00fcm potansiyeli kullanman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, uygulamalar\u0131n s\u00fcrekli b\u00fcy\u00fcyen","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-37648","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>Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi - 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\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, uygulamalar\u0131n s\u00fcrekli b\u00fcy\u00fcyen\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-11T11:41:00+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi\",\"datePublished\":\"2026-01-11T11:41:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\"},\"wordCount\":3140,\"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\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\",\"name\":\"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-11T11:41:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi\"}]},{\"@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":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi - 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\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi","og_description":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, uygulamalar\u0131n s\u00fcrekli b\u00fcy\u00fcyen","og_url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-11T11:41:00+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi","datePublished":"2026-01-11T11:41:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/"},"wordCount":3140,"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\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/","name":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-11T11:41:00+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-12-04-vps-uzerinde-mongodb-shard-kumesi-olusturma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ubuntu 12.04 VPS \u00dczerinde MongoDB Shard K\u00fcmesi Olu\u015fturma Rehberi"}]},{"@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\/37648","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=37648"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37648\/revisions"}],"predecessor-version":[{"id":37649,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37648\/revisions\/37649"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}