MongoDB 7.x Replicaset Kurulumu

Cihat Zoroğlu
4 min readJan 19, 2024

--

Bu döküman uygulama mimarisi ve nasıl Mongodb sunucusuna nasıl bağlantı kurulacağına dair bilgileri içerir.

MongoDB ReplicaSet’in Mimarisi

  1. Primary ve Secondary Node’lar:
  • Primary Node: Veri yazma ve okuma işlemlerinin yapıldığı ana sunucudur. Tüm yazma işlemleri öncelikle bu sunucuda gerçekleşir.
  • Secondary Node’lar: Primary node’daki verilerin sürekli olarak kopyalandığı yedek sunuculardır. Bu sunucular, primary sunucudan veri replikasyonu yaparak güncel veri setini korurlar. Okuma işlemleri bu sunucularda da yapılabilir.

2. Otomatik Failover:

  • Eğer primary node herhangi bir sebeple çevrimdışı olursa, secondary node’lardan biri otomatik olarak yeni primary node olarak seçilir. Bu işlem, veritabanının sürekli olarak kullanılabilir olmasını sağlar.

3. Veri Replikasyonu:

  • Veri replikasyonu, primary node’daki verilerin sürekli olarak secondary node’lara kopyalanması işlemidir. Bu sayede, herhangi bir sunucuda meydana gelebilecek arıza veya veri kaybı durumunda, diğer sunuculardaki veri kopyaları kullanılabilir.

4. Güvenlik ve İzolasyon:

  • ReplicaSet yapısı, veri güvenliğini ve izolasyonunu artırır. Farklı fiziksel konumlarda bulunan sunucular kullanılarak, doğal afetler gibi bölgesel sorunlardan kaynaklanan veri kayıplarının önüne geçilebilir.

5. Ölçeklenebilirlik:

  • ReplicaSet yapısı, okuma yükünü dağıtarak ölçeklenebilirliği artırır. Okuma işlemleri, birden fazla secondary node üzerinde dağıtılarak, sistem yükü dengelenir.

6. Veri Tutarsızlıklarının Önlenmesi:

  • MongoDB, replikasyon sırasında veri tutarsızlıklarını önlemek için çeşitli mekanizmalar kullanır. Örneğin, “write concern” ve “read concern” ayarları ile veri yazma ve okuma işlemlerinin güvenilirliği artırılır.

Kurulum Adımları

Gereksinimler

Tek node için minimum gereksinimler:

  • 1 adet Ubuntu 22.04 LTS
  • Minimum 2vcpu
  • 8GB ram
  • 40GB disk

Replicaset için minimum gereksinimler:

  • 3 adet Ubuntu 22.04 LTS
  • Minimum 2vcpu
  • 8GB ram
  • 40GB disk

Not: Harici bir disk kullanılıyorsa sunucuya mount edilmelidir.

Aşağıdaki komutlar tek instance olması yada replicaset olması fark etmeksizin tüm sunuculara yapılmalıdır:

sudo apt install software-properties-common gnupg \\
apt-transport-https ca-certificates -y
curl -fsSL <https://pgp.mongodb.com/server-7.0.asc> | \\
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg  ] \\
<https://repo.mongodb.org/apt/ubuntu> jammy/mongodb-org/7.0 multiverse" | \\
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install mongodb-org -y

Son olarak sunuculardaki mongodb’nin çalıştığını kontrol edin:

sudo systemctl status mongodb

Mongodb versiyon kontrolü için aşağıdaki komutu kullanabilirsiniz:

mongod --version

Sunucu üzerinden aşağıdaki komutla mongodb’ye bağlanabilirsiniz:

mongosh

Login olduktan sonra aşağıdaki komutlarla admin kullanıcısını yaratabilirsiniz:

db.createUser(
{
user: "mongoadmin",
pwd: passwordPrompt(),
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

Karşınıza şifre sekmesi gelecek ve oraya belirlemek istediğiniz şifreyi girin.

Mongodb’yi güvenli hale getirmek için sudo nano /etc/mongod.conf dosyası üzerine aşağıdaki satırları eklemek gerekir:

security:
authorization: enabled

Mongodb’yi dışarıya erişime açmak istiyorsanız aşağıdaki satırları da eklemelisiniz:

net: 
port: 27017 //Dış bağlantıyı farklı portlar ile de gerçekleştirebilirsiniz.
bindIp: 0.0.0.0 //Bu tüm kullanıcılara açmak içindir. Eğer sadece spesifik iplere açmak istiyorsanız [ip1,ip2] şeklinde eklemelisiniz.

Not: Eğer sunucuda Uncomplicated Firewall (UFW) açıksa aşağıdaki komutla geçerli olan porta izin vermeniz gerekmektedir. Bu da aşağıdaki komutlarla yapılır. Eğer sunucunuz default portlar ise bu tek node için 27017’dir. Replicaset gibi bir yapı varsa ayrıca 27018 ve 27019’a da izin verilmelidir.

sudo ufw allow from remote_machine_ip to any port <gerekli_olan_portlar>

Son olarak bu işlemlerden sonra mongodb’yi restart edin:

systemctl restart mongod

Eğer default dosya yolu dışında bir yere mongo data dosyalarını taşımak istiyorsanız aşağıdaki kısmı sudo nano /etc/mongod.conf üzerinden değiştirilmelidir.

storage:
dbPath: <data_directory_pathi>
systemLog:
destination: file
logAppend: true
logRotate: rename
path: </log_directory/mongod.log>

Bu kısımı değiştirdikten sonra bu directory’lere mongodb kullanıcısı izinleri verilmelidir:

sudo chown mongodb:mongodb <data_directory_pathi> -fR;
sudo chown mongodb:mongodb </log_directory/mongod.log>

Bu kısıma kadarki yapılan konfigürasyonlar tek node yada replicaset fark etmeksizin tüm sunuculara yapılmalıdır.

Replicaset yapmak için sunucuda aşağıdaki adımları gerçekleştirmek gerekmektedir. Öncelikle primary olarak belirlenen sunucuda bir key dosyası oluşturulur.

openssl rand -base64 741 > <key_dosyasi>
sudo chown mongodb:mongodb <key_dosyasi>
sudo chmod 600

Aynı key dosyası tüm sunuculara gönderilmelidir.

Key dosyasının yolu /etc/mongod.conf eklenmelidir. replicasetname’de belirlenmelidir.

replication:
replSetName: <replicasetname>
security:
authorization: enabled
keyFile: <key_file_dosya_yolu>

Sunuculardaki mongodb daemon’ları restart edilmelidir.

sudo systemctl restart mongod;
sudo systemctl status mongod

Daha sonra köleler(slaveler) primary sunucu üzerinden replikasyona dahil edilmelidir.

mongo --host slave-1-ip -p 27017
mongo --host slave-2-ip 27017

Sonrasında database’e bağlanılır.

mongosh "mongodb://<ip1>:27017,<ip2>,\\
<ip3>:27017/?replicaSet=<replicasetname>" \\
--apiVersion 1 --username admin

Database’e bağlandıktan sonra aşağıdaki komutlar girilmelidir.

rs.initiate()
rs.add("<slave-1-ip yada hostname>:27017")
rs.add("<slave-2-ip yada hostname>:27017")

rs.conf() yada rs.status() komutlarıyla databasede sunucuların konfigürasyonlarını görebiliriniz.

Mongodb Database Bağlantısı

Mongodb’ye iki çeşit bağlantı mevcuttur. Birincisi mongo compass uygulaması indirilerek uygulamanın ui’i üzerinden gerçekleştirilir. İkincisi ise Mongosh shell uygulaması ile gerçekleştirilir.

  • Mongo Compass üzerinden bağlanmak için cihazınıza aşağıdaki linkteki uygulamayı kurabilirsiniz:

https://www.mongodb.com/docs/compass/current/

Cihazınıza kurulumu gerçekleştirdikten sonra Mongo Compass uygulamasını açarak connection bilgilerini aşağıdaki sekmeye girebilirsiniz:

Connection bilgileri:

  • Replicaset için:
mongodb://<ip1>:27017,<ip2>:27017,<ip3>27017/?replicaSet=<replicasetname>

Kullanıcı adı ve parola bilgilerini authentication sekmesinden girdiğinizde bağlantınızı gerçekleştirebilirsiniz.

  • Tek Node için:
mongodb://<replicasetname>:27017

Eğer Mongo shelli ile bağlanmak istiyorsanız, diğer adıyla mongosh ile bağlanmak istiyorsanız linkteki Mongosh uygulamasını cihazınıza kurduktan sonra aşağıdaki komutla giriş yapabilirsiniz.

https://www.mongodb.com/try/download/shell

Replicaset için ve tek node için sırasıyla terminalden aşağıdaki komutlarla

mongosh "mongodb://<ip1>:27017,<ip2>:27017,\\
<ip3>:27017/?replicaSet=<replicasetname>" \\
--apiVersion 1 --username <admin_adi>
mongosh “mongodb://<sunucu_ipsi>:27017”

Referans:

--

--