Takip et

Giriş: MongoDB Replica Set Nedir ve Neden Kullanılır?

Giriş: MongoDB Replica Set Nedir ve Neden Kullanılır? Modern uygulamalar için veri tabanları, yüksek erişilebilirlik, veri bütünlüğü ve

Giriş: MongoDB Replica Set Nedir ve Neden Kullanılır?

Modern uygulamalar için veri tabanları, yüksek erişilebilirlik, veri bütünlüğü ve ölçeklenebilirlik gibi kritik gereksinimleri karşılamak zorundadır. MongoDB, esnek belge tabanlı yapısı ve güçlü yatay ölçeklenebilirlik özellikleri ile bu ihtiyaçları karşılayan popüler bir NoSQL veri tabanıdır. MongoDB’nin sunduğu temel özelliklerden biri de “Replica Set” kavramıdır.

Bir MongoDB Replica Set, aynı verinin birden fazla kopyasını barındıran bir grup mongod işleminden oluşur. Bu, veri yedekliliği sağlayarak sistemin bir veya daha fazla düğümün arızalanması durumunda bile çalışmaya devam etmesini garanti eder. Bir Replica Set’in temel bileşenleri şunlardır:

* Primary (Birincil) Düğüm: Tüm yazma işlemlerini kabul eden tek düğümdür. Okuma işlemleri hem Primary hem de Secondary düğümlerden yapılabilir.
* Secondary (İkincil) Düğümler: Primary düğümdeki verilerin bir kopyasını tutar ve Primary’den gelen tüm yazma işlemlerini kendi kopyalarına uygular. Secondary’ler, Primary’nin arızalanması durumunda yeni Primary olmak için adaydırlar. Ayrıca okuma işlemleri için de kullanılabilirler, bu da okuma yükünü dağıtmaya yardımcı olur.
* Arbiter (Hakem) Düğüm (İsteğe Bağlı): Veri kopyası tutmaz, sadece birincil düğüm seçimi (election) sürecinde oy kullanır. Replica Set’te düğüm sayısı çift ise veya kaynak sınırlı bir ortamda ek bir Secondary düğüm yerine hafif bir çözüm istendiğinde kullanılır.

Replica Set Kullanmanın Avantajları:

* Yüksek Erişilebilirlik (High Availability): Primary düğümün çökmesi durumunda, Secondary düğümlerden biri otomatik olarak yeni Primary olarak seçilir. Bu süreç genellikle saniyeler içinde tamamlanır ve uygulama kesintisiz çalışmaya devam eder.
* Veri Yedekliliği (Data Redundancy): Veriler birden fazla düğümde saklandığı için, donanım arızası veya başka bir felaket durumunda veri kaybı riski minimize edilir.
* Felaket Kurtarma (Disaster Recovery): Coğrafi olarak dağıtılmış bir Replica Set ile, bir bölgedeki felaket durumunda bile veri başka bir bölgeden kurtarılabilir.
* Okuma Ölçeklendirme (Read Scaling): Uygulama, okuma işlemlerini Secondary düğümlere yönlendirerek Primary düğüm üzerindeki yükü azaltabilir ve genel performansını artırabilir.
* Bakım Kolaylığı: Sistem kesintisi olmadan tek tek düğümler üzerinde bakım (güncelleme, yükseltme vb.) yapılabilir.

Bu makalede, Ubuntu 20.04 işletim sistemi üzerinde bir MongoDB Replica Set’i adım adım nasıl yapılandıracağımızı öğreneceğiz. Üç düğümlü bir Replica Set kuracak ve güvenlik için anahtar dosyası (keyfile) kimlik doğrulamasını etkinleştireceğiz.

Ön Gereksinimler

Bir MongoDB Replica Set kurmaya başlamadan önce aşağıdaki ön gereksinimleri sağlamanız gerekmektedir:

* En Az Üç Adet Ubuntu 20.04 Sunucusu: Bu sunucular fiziksel makineler, sanal makineler (VM’ler) veya bulut sağlayıcılarından (AWS EC2, Azure VM, Google Cloud Compute Engine vb.) alınan örnekler olabilir. Her sunucunun kendi IP adresine sahip olması ve birbiriyle ağ üzerinden iletişim kurabilmesi gerekmektedir. Örnek olarak aşağıdaki IP adreslerini kullanacağız:
* 192.168.1.101 (mongo1)
* 192.168.1.102 (mongo2)
* 192.168.1.103 (mongo3)
* SSH Erişimi: Tüm sunuculara SSH ile erişebiliyor olmanız gerekmektedir.
* sudo Yetkileri: Kurulum ve yapılandırma işlemleri için sudo yetkilerine sahip bir kullanıcı hesabınız olmalıdır.
* Temel Linux Bilgisi: Komut satırı kullanımı ve dosya düzenleme konularında temel bilgiye sahip olmanız faydalı olacaktır.

Sunucular Arası İletişim İçin /etc/hosts Dosyasının Yapılandırılması (Önerilen)

IP adresleri yerine okunabilir ana bilgisayar adları (hostname) kullanmak, yönetimi kolaylaştırır. Her sunucuda /etc/hosts dosyasını düzenleyerek diğer sunucuların IP adreslerini ve ana bilgisayar adlarını ekleyelim.

Her üç sunucuda da aşağıdaki komutu çalıştırarak /etc/hosts dosyasını açın:

sudo nano /etc/hosts

Dosyanın sonuna aşağıdaki satırları ekleyin (kendi IP adreslerinize göre düzenleyin):

192.168.1.101 mongo1
192.168.1.102 mongo2
192.168.1.103 mongo3

Kaydedin ve kapatın (CTRL+O, Enter, CTRL+X). Bu sayede mongo1, mongo2 ve mongo3 ana bilgisayar adlarını kullanarak sunuculara erişebileceksiniz.

Adım 1: Her Bir Sunucunun Hazırlanması (Tüm Düğümler İçin Tekrar Edilecek)

Bu adımlar, Replica Set’teki her bir düğüm için ayrı ayrı uygulanmalıdır.

1.1. Sistem Paketlerini Güncelleme

Her sunucuda en güncel yazılım paketlerine sahip olmak için sistem paket listesini güncelleyin ve yüklü paketleri yükseltin:

sudo apt update && sudo apt upgrade -y

1.2. MongoDB Kurulumu

MongoDB’nin resmi deposunu kullanarak en son stabil sürümü (bu makale yazıldığı sırada MongoDB 6.0) kuracağız.

MongoDB GPG Anahtarını İçe Aktarma:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

Bu komut, MongoDB paketlerini doğrulamak için gerekli GPG anahtarını sisteminize ekler.

MongoDB Deposunu Ekleme:

Ubuntu 20.04 (Focal Fossa) için MongoDB deposunu sources.list.d dizinine ekleyin:

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

Paket Listesini Güncelleme ve MongoDB Kurulumu:

Depoyu ekledikten sonra, yeni paket listesini indirmek için tekrar apt update çalıştırın ve ardından MongoDB’yi kurun:

sudo apt update
sudo apt install -y mongodb-org

Kurulum tamamlandıktan sonra, MongoDB servisi otomatik olarak başlamalıdır. Durumunu kontrol edebilirsiniz:

sudo systemctl status mongod

Çıktıda active (running) ibaresini görmelisiniz. Eğer çalışmıyorsa, sudo systemctl start mongod komutuyla başlatın ve sudo systemctl enable mongod komutuyla sistem başlangıcında otomatik başlamasını sağlayın.

1.3. Güvenlik Duvarı Yapılandırması (UFW)

MongoDB, varsayılan olarak 27017 numaralı portu kullanır. Replica Set düğümlerinin birbiriyle iletişim kurabilmesi ve dışarıdan erişilebilmesi için bu portu güvenlik duvarında açmamız gerekmektedir. Ubuntu’da varsayılan güvenlik duvarı olan UFW’yi kullanacağız.

Her sunucuda aşağıdaki komutları çalıştırın:

sudo ufw allow 27017/tcp
sudo ufw enable
sudo ufw status

ufw status çıktısında 27017/tcp ALLOW Anywhere satırını görmelisiniz. Anywhere yerine sadece Replica Set’teki diğer sunucuların IP adreslerini de belirtebilirsiniz, bu daha güvenli bir yaklaşımdır (örneğin: sudo ufw allow from 192.168.1.102 to any port 27017).

Adım 2: MongoDB Yapılandırması (Tüm Düğümler İçin Tekrar Edilecek)

Her MongoDB düğümünün Replica Set’in bir parçası olacağını ve diğer düğümlerle iletişim kurabileceğini belirtmek için /etc/mongod.conf dosyasını düzenlememiz gerekmektedir.

Her sunucuda aşağıdaki komutla yapılandırma dosyasını açın:

sudo nano /etc/mongod.conf

Aşağıdaki değişiklikleri yapın:

1. bindIp Yapılandırması:
Varsayılan olarak MongoDB, sadece 127.0.0.1 (localhost) adresinden bağlantıları kabul eder. Replica Set’in diğer üyeleriyle iletişim kurabilmesi için bu ayarı sunucunun kendi IP adresine veya tüm ağ arayüzlerine (0.0.0.0) değiştirmemiz gerekir. Üretim ortamlarında 0.0.0.0 kullanmak yerine, sadece Replica Set üyelerinin IP adreslerini virgülle ayırarak belirtmek daha güvenlidir. Bu örnekte basitleştirmek adına 0.0.0.0 kullanacağız, ancak güvenlik notunu aklınızda bulundurun.

# network interfaces
    net:
      port: 27017
      bindIp: 0.0.0.0 # veya kendi sunucunuzun IP adresi ve diğer replica set üyelerinin IP adresleri
                      # Örn: bindIp: 192.168.1.101,192.168.1.102,192.168.1.103

2. replication Bölümünü Etkinleştirme:
Replica Set adını belirtmek için replication bölümünü etkinleştirin ve bir replSetName değeri atayın. Tüm düğümlerde bu ad aynı olmalıdır.

replication:
      replSetName: "rs0" # Replica Set'inizin adını buraya girin

3. security Bölümünü Etkinleştirme (Şimdilik Yorum Satırı Olarak Kalsın):
Anahtar dosyası kimlik doğrulamasını daha sonra etkinleştireceğiz. Şimdilik bu bölümü yorum satırı olarak bırakın veya eklemeyin. Replica Set’i başlattıktan sonra güvenlik adımlarını uygulayacağız.

# security:
    #   authorization: enabled
    #   keyFile: /etc/mongo-keyfile

Yapılandırma dosyanızın ilgili bölümleri şu şekilde görünmelidir:

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # Veya Replica Set üyelerinin IP adresleri

replication

replication: replSetName: "rs0"

security

security:

authorization: enabled

keyFile: /etc/mongo-keyfile

Değişiklikleri kaydedin ve dosyayı kapatın. Ardından, MongoDB servisini yeniden başlatın ki yeni yapılandırma uygulansın:

sudo systemctl restart mongod

Bu adımları her üç sunucuda da tekrarladığınızdan emin olun.

Adım 3: Replica Set’in Başlatılması

Tüm düğümlerin yapılandırması tamamlandıktan sonra, Replica Set’i başlatma zamanı geldi. Bu işlem sadece bir kez, Primary aday olarak belirlediğiniz sunucuda yapılmalıdır. Biz mongo1 (192.168.1.101) sunucusunu Primary aday olarak kullanacağız.

mongo1 sunucusuna SSH ile bağlanın ve MongoDB kabuğunu açın:

mongo

MongoDB kabuğunda, rs.initiate() komutunu kullanarak Replica Set’i başlatın. Bu komuta, Replica Set’in adı ve tüm üyelerinin listesi verilir. /etc/hosts dosyasını yapılandırdığımız için ana bilgisayar adlarını kullanabiliriz:

rs.initiate(
  {
    _id: "rs0",
    members: [
      { _id: 0, host: "mongo1:27017" },
      { _id: 1, host: "mongo2:27017" },
      { _id: 2, host: "mongo3:27017" }
    ]
  }
)

Komut başarıyla çalışırsa, ok: 1 içeren bir çıktı almalısınız. Kısa bir süre sonra, mongo1 sunucusu Primary olarak seçilecek ve diğerleri Secondary olarak katılacaktır.

Replica Set’in durumunu kontrol etmek için aşağıdaki komutu kullanın:

rs.status()

Bu komut, Replica Set’in tüm üyelerinin durumunu, rollerini (PRIMARY, SECONDARY) ve diğer önemli bilgileri gösteren ayrıntılı bir çıktı verir. mongo1‘in stateStr alanında PRIMARY ve diğerlerinin SECONDARY olduğunu görmelisiniz.

Adım 4: Güvenlik: Anahtar Dosyası (Keyfile) Kimlik Doğrulaması

Üretim ortamlarında Replica Set’inizi güvence altına almak kritik öneme sahiptir. Anahtar dosyası (keyfile) kimlik doğrulaması, Replica Set üyelerinin birbirleriyle güvenli bir şekilde iletişim kurmasını sağlar. Bu, her bir düğümün aynı anahtar dosyasına sahip olmasını ve bu dosya aracılığıyla kimliklerini doğrulamalarını gerektirir.

Bu adımlar her üç sunucuda da tekrarlanmalıdır.

4.1. Anahtar Dosyası Oluşturma

Anahtar dosyası, sadece Replica Set üyeleri tarafından okunabilen rasgele karakterlerden oluşan bir metin dosyasıdır. Minimum 6, maksimum 1024 karakter uzunluğunda olmalıdır. Güçlü bir anahtar oluşturmak için openssl kullanabiliriz:

sudo openssl rand -base64 756 > /etc/mongo-keyfile

Bu komut, 756 baytlık rastgele veri oluşturur ve /etc/mongo-keyfile dosyasına kaydeder.

4.2. Anahtar Dosyasının İzinlerini Ayarlama

Anahtar dosyasının sadece MongoDB kullanıcısı tarafından okunabilir olması önemlidir. Diğer kullanıcıların bu dosyaya erişimini engellemek için izinleri 400 olarak ayarlayın ve dosyanın sahibini mongodb kullanıcısı ve grubu olarak değiştirin:

sudo chmod 400 /etc/mongo-keyfile
sudo chown mongodb:mongodb /etc/mongo-keyfile

4.3. Anahtar Dosyasını Diğer Düğümlere Kopyalama

ÖNEMLİ: Oluşturduğunuz anahtar dosyası, Replica Set’teki tüm düğümlerde aynı olmalıdır. Bu nedenle, mongo1 üzerinde oluşturduğunuz /etc/mongo-keyfile dosyasını mongo2 ve mongo3 sunucularına kopyalamanız gerekmektedir. scp komutunu kullanabilirsiniz:

mongo1 sunucusundan:

scp /etc/mongo-keyfile mongo2:/etc/mongo-keyfile
scp /etc/mongo-keyfile mongo3:/etc/mongo-keyfile

Her kopyalama işleminden sonra, mongo2 ve mongo3 sunucularında SSH ile bağlanarak kopyalanan dosyanın izinlerini ve sahipliğini doğru şekilde ayarladığınızdan emin olun:

mongo2 ve mongo3 sunucularında:

sudo chmod 400 /etc/mongo-keyfile
sudo chown mongodb:mongodb /etc/mongo-keyfile

4.4. MongoDB Yapılandırmasını Güncelleme

Şimdi her üç sunucuda da /etc/mongod.conf dosyasını tekrar düzenleyerek security bölümünü etkinleştireceğiz:

sudo nano /etc/mongod.conf

Aşağıdaki satırları ekleyin veya yorum satırından çıkarın:

security:
  authorization: enabled
  keyFile: /etc/mongo-keyfile

Yapılandırma dosyanızın son hali şu şekilde görünmelidir:

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # Veya Replica Set üyelerinin IP adresleri

replication

replication: replSetName: "rs0"

security

security: authorization: enabled keyFile: /etc/mongo-keyfile

Değişiklikleri kaydedin ve dosyayı kapatın. Ardından, her üç sunucuda da MongoDB servisini yeniden başlatın:

sudo systemctl restart mongod

4.5. Yönetici Kullanıcısı Oluşturma

authorization: enabled ayarı etkinleştirildiğinde, artık MongoDB’ye kimlik doğrulaması olmadan erişilemez. Bu nedenle, Replica Set’i yönetmek için bir yönetici kullanıcısı oluşturmamız gerekmektedir.

mongo1 (Primary) sunucusuna bağlanın ve kimlik doğrulaması ile MongoDB kabuğuna erişin. İlk bağlantıda henüz bir kullanıcı olmadığı için, localhost bağlantısı üzerinden geçici olarak kimlik doğrulaması olmadan bağlanıp kullanıcı oluşturabiliriz. Ancak bindIp 0.0.0.0 olarak ayarlıysa, bu yöntem çalışmayabilir. En güvenli yol, mongod.conf dosyasında authorization‘ı geçici olarak kapatıp kullanıcı oluşturduktan sonra tekrar açmaktır.

Alternatif olarak, MongoDB’nin ilk bağlantıda kimlik doğrulaması yapmadan yerel bağlantılara izin verme özelliğinden yararlanabiliriz:

mongo1 sunucusuna SSH ile bağlanın:

mongo --host 127.0.0.1 --port 27017

Bu komut, localhost üzerinden bağlanmanızı sağlar. Ardından, admin veritabanında bir yönetici kullanıcısı oluşturun:

use admin
db.createUser(
  {
    user: "mongoAdmin",
    pwd: "your_strong_password", // Güçlü bir şifre belirleyin
    roles: [ { role: "root", db: "admin" } ]
  }
)

your_strong_password kısmını kendi güvenli şifrenizle değiştirin. root rolü, veritabanı üzerinde tam yetki sağlar.

Kullanıcı oluşturulduktan sonra exit komutuyla kabuktan çıkın.

Artık Replica Set’e bağlanırken bu yönetici kullanıcısını kullanmanız gerekecek:

mongo --host mongo1 --port 27017 -u mongoAdmin -p --authenticationDatabase admin

Şifreniz istendiğinde, belirlediğiniz şifreyi girin. Başarılı bir şekilde bağlandıktan sonra, rs.status() komutunu tekrar çalıştırarak Replica Set’in durumunu kontrol edebilirsiniz. Her şeyin yolunda olduğunu ve tüm düğümlerin doğru rollerde olduğunu görmelisiniz.

Adım 5: Arbiter Düğümü Ekleme (İsteğe Bağlı)

Replica Set’inizde çift sayıda oy veren düğüm varsa (örneğin 2 Primary/Secondary), bir düğüm arızalandığında oybirliği sağlamakta zorlanabilirsiniz. Bu durumda, bir Arbiter düğümü eklemek seçim sürecini kolaylaştırır. Arbiter, veri tutmaz ve bu nedenle daha az kaynak tüketir.

Eğer 4. bir sunucunuz varsa (örneğin mongo4), bu adımı uygulayabilirsiniz. Varsayılan Replica Set’imiz 3 düğümlü olduğu için zaten tek sayıda oya sahiptir, ancak Arbiter ekleme sürecini göstermek için bu adımı dahil ediyoruz.

5.1. Arbiter Sunucusunu Hazırlama

Yeni bir sunucuya (örneğin mongo4 – 192.168.1.104) Adım 1’deki gibi MongoDB’yi kurun ve güvenlik duvarını yapılandırın. /etc/hosts dosyasını da güncellemeyi unutmayın.

5.2. Arbiter Yapılandırması

mongo4 sunucusunda /etc/mongod.conf dosyasını düzenleyin:

sudo nano /etc/mongod.conf

Aşağıdaki değişiklikleri yapın:

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # Veya sadece Replica Set üyelerinin IP adresleri

replication

replication: replSetName: "rs0"

security

security: authorization: enabled keyFile: /etc/mongo-keyfile # mongo1'den kopyaladığınız anahtar dosyası

Anahtar dosyasını mongo1‘den mongo4‘e kopyaladığınızdan ve izinlerini doğru ayarladığınızdan emin olun.

MongoDB servisini yeniden başlatın:

sudo systemctl restart mongod

5.3. Replica Set’e Arbiter Ekleme

Primary düğüme (şu an mongo1) yönetici kullanıcınızla bağlanın:

mongo --host mongo1 --port 27017 -u mongoAdmin -p --authenticationDatabase admin

Arbiter düğümünü Replica Set’e eklemek için rs.addArb() komutunu kullanın:

rs.addArb("mongo4:27017")

rs.status() komutuyla durumu kontrol edin. mongo4‘ün stateStr alanında ARBITER olarak göründüğünü teyit edin.

Adım 6: Replica Set’in Çalışmasını Test Etme

Replica Set’in yüksek erişilebilirlik ve veri yedekliliği özelliklerini test edelim.

6.1. Veri Ekleme

Primary düğüme (şu an mongo1) yönetici kullanıcınızla bağlanın:

mongo --host mongo1 --port 27017 -u mongoAdmin -p --authenticationDatabase admin

Bir veritabanı seçin ve bazı veriler ekleyin:

use mydatabase
db.testcollection.insertOne({ item: "laptop", qty: 10, tags: ["electronics", "office"] })
db.testcollection.insertOne({ item: "keyboard", qty: 25, tags: ["electronics", "accessories"] })

Eklediğiniz verileri kontrol edin:

db.testcollection.find().pretty()

6.2. Primary Düğümün Kapatılması (Failover Testi)

Şimdi mevcut Primary düğümü (mongo1) kasıtlı olarak kapatalım ve Replica Set’in yeni bir Primary seçmesini izleyelim.

mongo1 sunucusunda yeni bir SSH oturumu açın (veya mevcut MongoDB kabuğundan çıkıp yeni bir komut çalıştırın):

sudo systemctl stop mongod

Bu, mongo1 üzerindeki MongoDB servisini durduracaktır.

Hemen ardından, mongo2 veya mongo3 sunucusuna bağlanın (yönetici kullanıcınızla) ve rs.status() komutunu çalıştırın:

mongo --host mongo2 --port 27017 -u mongoAdmin -p --authenticationDatabase admin
rs.status()

Birkaç saniye içinde, mongo2 veya mongo3‘ten birinin PRIMARY rolünü üstlendiğini görmelisiniz. mongo1 ise RECOVERING veya DOWN olarak görünecektir. Bu, Replica Set’in başarılı bir şekilde failover gerçekleştirdiğini gösterir.

6.3. Yeni Primary’den Veri Okuma

Yeni Primary olan düğüme bağlanın (örneğin mongo2 ise):

mongo --host mongo2 --port 27017 -u mongoAdmin -p --authenticationDatabase admin

Daha önce eklediğiniz verileri okumayı deneyin:

use mydatabase
db.testcollection.find().pretty()

Verilerin hala erişilebilir olduğunu ve önceki Primary’den kopyalandığını görmelisiniz. Bu, veri yedekliliğinin ve tutarlılığının çalıştığını kanıtlar.

6.4. Eski Primary’yi Tekrar Başlatma

Şimdi mongo1 sunucusunu tekrar başlatalım:

sudo systemctl start mongod

Tekrar bir Secondary düğüme bağlanıp rs.status() komutunu çalıştırın. mongo1‘in SECONDARY rolünü üstlendiğini görmelisiniz. Replica Set, Primary’nin geri gelmesini otomatik olarak algılar ve onu Secondary olarak entegre eder.

Adım 7: Replica Set Yönetimi ve İzleme

Replica Set’inizi etkin bir şekilde yönetmek ve izlemek için kullanabileceğiniz bazı önemli komutlar ve ipuçları:

* rs.status(): Replica Set’in genel durumunu, üyelerin rollerini, durumlarını, replikasyon gecikmelerini ve diğer kritik bilgileri gösterir. En sık kullanılan yönetim komutlarından biridir.
* rs.printReplicationInfo(): Replikasyonun durumu hakkında daha özet bilgiler sunar, özellikle son opLog zaman damgalarını ve gecikme sürelerini görmek için kullanışlıdır.
* db.hello() (eski adıyla db.isMaster()): Bağlandığınız düğümün Primary olup olmadığını ve Replica Set hakkında temel bilgileri gösterir.
* rs.conf(): Replica Set’in mevcut yapılandırma belgesini döndürür. Bu belge, üyelerin listesini, oylarını ve diğer yapılandırma parametrelerini içerir.
* rs.reconfig(): Replica Set’in yapılandırmasını değiştirmek için kullanılır (örneğin, üye ekleme/çıkarma, oy sayısını değiştirme). Bu komut dikkatli kullanılmalı ve genellikle rs.add() veya rs.remove() gibi yardımcı komutlar tercih edilmelidir.
* Log Dosyaları: MongoDB’nin log dosyaları (/var/log/mongodb/mongod.log), Replica Set’in davranışını, seçim süreçlerini, replikasyon hatalarını ve diğer önemli olayları anlamak için hayati öneme sahiptir. Herhangi bir sorun yaşandığında ilk kontrol etmeniz gereken yerdir.

Üretim Ortamı İçin Ek Hususlar:

* Yedekleme Stratejileri: Replica Set, yüksek erişilebilirlik sağlasa da, yanlışlıkla silinen verileri veya bozuk verileri geri getirmek için düzenli yedeklemeler hala gereklidir.
* İzleme ve Uyarılar: Prometheus, Grafana, MongoDB Cloud Manager veya diğer izleme araçlarını kullanarak Replica Set’in performansını, disk kullanımını, CPU yükünü ve replikasyon gecikmesini sürekli izleyin ve anormal durumlar için uyarılar kurun.
* Ağ Güvenliği: Replica Set üyeleri arasındaki iletişimin şifreli olduğundan (örneğin TLS/SSL) ve sadece yetkili IP adreslerinin MongoDB portuna erişebildiğinden emin olun.
* Dedicated Kullanıcılar: Her uygulama veya servis için ayrı MongoDB kullanıcıları oluşturun ve sadece ihtiyaç duydukları minimum yetkileri verin (Principle of Least Privilege).
* Versiyon Yükseltmeleri: MongoDB versiyonlarını yükseltirken, resmi dokümantasyonu takip ederek kademeli bir yükseltme stratejisi uygulayın (örneğin, Secondary’leri yükseltin, sonra Primary’yi yükseltin).

Sorun Giderme

Replica Set yapılandırması sırasında veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:

* Replica Set Başlatılamıyor veya Üyeler Katılamıyor:
* Güvenlik Duvarı: Tüm düğümlerde 27017 portunun açık olduğundan emin olun (sudo ufw status).
* bindIp Ayarı: /etc/mongod.conf dosyasındaki net.bindIp ayarının, diğer Replica Set üyelerinin IP adreslerini veya 0.0.0.0 içerdiğinden emin olun.
* Anahtar Dosyası (Keyfile): Tüm düğümlerde aynı anahtar dosyasının bulunduğundan ve dosya izinlerinin (chmod 400) ve sahipliğinin (chown mongodb:mongodb) doğru olduğundan emin olun.
* replSetName: Tüm düğümlerde /etc/mongod.conf içindeki replication.replSetName değerinin aynı olduğundan emin olun.
* Log Dosyaları: /var/log/mongodb/mongod.log dosyasını kontrol ederek hata mesajlarını arayın.

* rs.status() Çıktısında Üyeler (not reachable/healthy) veya STARTUP2 Durumunda Görünüyor:
* Bu genellikle ağ bağlantısı sorunları, güvenlik duvarı kısıtlamaları veya yanlış bindIp yapılandırmasından kaynaklanır.
* Düğümler arasında ping komutuyla bağlantıyı test edin.
* İlgili düğümün MongoDB servisini yeniden başlatmayı deneyin.

* Kimlik Doğrulama Hataları:
* authorization: enabled ayarı aktifken, mongo kabuğuna bağlanırken -u, -p ve --authenticationDatabase parametrelerini doğru kullandığınızdan emin olun.
* Kullanıcı adının ve şifrenin doğru olduğundan emin olun.
* Yönetici kullanıcısının doğru rol ve yetkilere sahip olduğundan emin olun.

* Primary Seçimi Gerçekleşmiyor veya Sık Sık Değişiyor:
* Replica Set’teki oy veren düğüm sayısının tek olduğundan emin olun (genellikle 3 veya 5). Çift sayıda düğüm varsa, bir Arbiter eklemeyi düşünün.
* Ağ gecikmeleri veya kesintileri de seçim sorunlarına neden olabilir.
* rs.status() çıktısındaki health değerlerini kontrol edin.

Sonuç

Bu makalede, Ubuntu 20.04 üzerinde bir MongoDB Replica Set’i kurmak ve yapılandırmak için adım adım bir rehber sunduk. Replica Set’in ne olduğunu, neden önemli olduğunu ve yüksek erişilebilirlik, veri yedekliliği ve okuma ölçeklendirme gibi avantajlarını ele aldık.

Kurulum sürecinde, her bir düğümün hazırlanması, MongoDB’nin yüklenmesi, güvenlik duvarının yapılandırılması ve mongod.conf dosyasının düzenlenmesi gibi temel adımları uyguladık. Replica Set’i başlattık ve güvenliği sağlamak için anahtar dosyası kimlik doğrulamasını etkinleştirdik. Ayrıca, bir Arbiter düğümünün nasıl ekleneceğini ve Replica Set’in failover yeteneğini nasıl test edeceğimizi gösterdik.

Artık, uygulamanız için yüksek oranda erişilebilir ve dayanıklı bir MongoDB veri tabanı ortamına sahipsiniz. Unutmayın ki üretim ortamlarında daha fazla güvenlik önlemi (TLS/SSL şifrelemesi, ağ segmentasyonu, detaylı erişim kontrolü) ve sürekli izleme kritik öneme sahiptir. Bu temel yapılandırma, daha karmaşık ve ölçeklenebilir MongoDB dağıtımları için sağlam bir temel oluşturmaktadır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.