Bu kılavuzda, MongoDB Replicalarını 4.4 sürümünden 7.0 sürümüne kesintisiz bir şekilde güncellemeyi amaçlamaktadır. MongoDB 7.0 sürümüne direkt olarak 4.4 sürümünden geçmek mümkün değildir. Dolayısıyla, her bir ana sürüm arasında kademeli bir geçiş yapılması gerekmektedir.

Bu örnek Ubuntu 22.04 üzerinde gerçekleştirilmiştir.

1) Secondary Nodeları Mongo 4.4'ten 5.0'a Güncelleme

İlk olarak, tüm MongoDB secondary node'larının her biri teker teker 5.0 sürümüne güncellenir.

sudo apt-mark unhold mongo*
sudo systemctl stop mongod

# MongoDB 5.0 anahtarı eklenir
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

# MongoDB 5.0 Repository'si eklenir
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

sudo apt update

# Güncellemeyi yüklerken soracağı config dosyasını güncelleme sorusuna N ile cevap vererek mevcut konfigürasyon dosyanızı korumanız gereklidir
sudo apt install -y mongodb-org=5.0.6 mongodb-org-server=5.0.6 mongodb-org-shell=5.0.6 mongodb-org-mongos=5.0.6 mongodb-org-tools=5.0.6
BASH

Çok Önemli

Yükleme esnasında sistem config dosyasının yeniden yazıp yazmayacağını sorar, burada eğer yanlışlıkla konfigürasyon dosyası ezilirse eski ayara döndürülmesi gerekir.

# sudo vi /etc/mongod.conf

# Eski dosya varsayılan olarak aşağıdaki gibidir

storage:
  dbPath: /var/lib/mongodb
  wiredTiger:
    engineConfig:
       cacheSizeGB: 2

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

net:
  port: 25080
  bindIp: 0.0.0.0

replication:
  replSetName: apinizer-replicaset

security:
  authorization: enabled
  keyFile:  /etc/mongodb/keys/mongo-key

setParameter:
  transactionLifetimeLimitSeconds: 300

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

# MongoDB servisini başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
BASH

Herhangi bir node'a bağlanarak replica set'in durumu kontrol edilir:

mongo mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Replica-Set'in Durumu Kontrol Edilir
rs.status()
BASH

2) Primary-Node'u Secondary'e Düşürme

Primary node'a bağlanılıp primary node'un görevini secondary'e düşürerek yeni bir primary node seçilmesi sağlanır.

# Primary Node'a bağlanılır
mongo mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Primary Node'u Secondary Node'a düşürülür
rs.stepDown()
 
# Biraz bekleyerek Secondary Node'lardan birisinin Primary Node olduğu kontrol edilir
rs.status()
BASH

3) Düşürülen Primary Node'u Mongo 4.4'ten 5.0'a Güncelleme

sudo apt-mark unhold mongo*
sudo systemctl stop mongod

# MongoDB 5.0 anahtarını ekleyin ve repository'i güncellenir
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

sudo apt update

# Güncellemeyi yüklerken soracağı config dosyasını güncelleme sorusuna N ile cevap vererek mevcut konfigürasyon dosyanızı korumanız gereklidir
sudo apt install -y mongodb-org=5.0.6 mongodb-org-server=5.0.6 mongodb-org-shell=5.0.6 mongodb-org-mongos=5.0.6 mongodb-org-tools=5.0.6
BASH


# MongoDB servisini başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
BASH

Herhangi bir node'a bağlanarak replica set'in durumu kontrol edilir.

mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

#Replica-Set'in durumu kontrol edilir
rs.status()
BASH

4) Mongo 5.0 Özellik Uyumu Kontrolü

Bütün Node'lar MongoDB 5.0'a geçtikten sonra, Mongodb 6.0'a geçiş yapmadan önce özellik uyumluluğu ayarı 5.0'a ayarlanılır. (Primary Node'da).

# Primary Node'a bağlanılır.
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin

# Aşağıdaki komutun çıktısı olarak özellik uyumu eğer 4 gözüküyorsa 5'e güncellenmesi gerekir
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })

# Eğer değer 5.0 değilse, bunu aşağıdaki komutla değiştirebilinir.
db.adminCommand({ setFeatureCompatibilityVersion: "5.0" })
BASH

5) Secondary Nodeları Mongo 5.0'dan 6.0'a Güncelleme

Tüm MongoDB replicalarının 5.0 sürümüne geçtiğinden emin olduktan sonra, 6.0 sürümüne geçiş yapabiliriz. İlk olarak, tüm secondary node'ları sırayla güncelleyerek başlayın.

sudo apt-mark unhold mongo*
sudo systemctl stop mongod

# MongoDB 6.0 anahtarını eklenir ve repository güncellenir
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update

# Güncelleme yüklenilir
sudo apt install -y mongodb-org=6.0.0 mongodb-org-server=6.0.0 mongodb-org-shell=6.0.0 mongodb-org-mongos=6.0.0 mongodb-org-tools=6.0.0

# MongoDB servisi başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
BASH

Herhangi bir node'a bağlanarak replica set'in durumunu kontrol edin.

mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Replica-Set'in durumu kontrol edilir
rs.status()
BASH

6) Primary-Node'u Secondary'e Düşürme.

# Primary Node'a bağlanılır
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Primary Node'u Secondary Node'a düşürülür
rs.stepDown()

# Biraz bekleyerek yükseltme yapılan Secondary Node'lardan birisinin Primary olduğu kontrol edilir
rs.status()
BASH

7) Düşürülen Primary Node'u Mongo 5.0'dan 6.0'a Güncelleme

sudo apt-mark unhold mongo*
sudo systemctl stop mongod

# MongoDB 6.0 anahtarını eklenilir ve repository güncellenir
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update

# Güncelleme yüklenilir
sudo apt install -y mongodb-org=6.0.0 mongodb-org-server=6.0.0 mongodb-org-shell=6.0.0 mongodb-org-mongos=6.0.0 mongodb-org-tools=6.0.0

# MongoDB servisi başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
BASH

Herhangi bir node'a bağlanarak replica set'in durumunu kontrol edin:

mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Replica-Set'in durumu kontrol edilir
rs.status()
BASH

8) Mongo 6.0 Özellik Uyumu Kontrolü

Bütün Node'lar MongoDB 6.0'a geçtikten sonra, özellik uyumluluğu ayarı 6.0'a ayarlanır (Primary Node'da).

# Primary Node'a Bağlanılır.
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin

# Aşağıdaki komutun çıktısı olarak özellik uyumu eğer 5 gözüküyorsa 6'ya güncellenmesi gerekir
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })

# Eğer değer 6.0 değilse, bunu aşağıdaki komutla değiştirebilirsiniz
db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
BASH

9) Secondary Nodeları Mongo 6.0'dan 7.0'a Güncelleme

Tüm MongoDB replicalarının 6.0 sürümüne geçtiğinden emin olduktan sonra, 7.0 sürümüne geçiş yapabiliriz. İlk olarak, tüm secondary node'ları sırayla güncelleyerek başlayın.

sudo apt-mark unhold mongo*
sudo systemctl stop mongod

# MongoDB 6.0 anahtarını eklenir ve repository güncellenir
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update

# Güncelleme yüklenilir
sudo apt install -y mongodb-org=7.0.0 mongodb-org-server=7.0.0 mongodb-org-shell=7.0.0 mongodb-org-mongos=7.0.0 mongodb-org-tools=7.0.0

# MongoDB servisi başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
BASH

Herhangi bir node'a bağlanarak replica set'in durumunu kontrol edin.

mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Replica-Set'in durumu kontrol edilir
rs.status()
BASH

10) Primary-Node'u Secondary'e Düşürme.

# Primary Node'a bağlanılır
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Primary Node'u Secondary Node'a düşürülür
rs.stepDown()

# Biraz bekleyerek yükseltme yapılan Secondary Node'lardan birisinin Primary olduğu kontrol edilir
rs.status()
BASH

11) Düşürülen Primary Node'u Mongo 6.0'dan 7.0'a Güncelleme

sudo apt-mark unhold mongo*
sudo systemctl stop mongod

# MongoDB 6.0 anahtarını eklenir ve repository güncellenir
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update

# Güncelleme yüklenilir
sudo apt install -y mongodb-org=7.0.0 mongodb-org-server=7.0.0 mongodb-org-shell=7.0.0 mongodb-org-mongos=7.0.0 mongodb-org-tools=7.0.0

# MongoDB servisi başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
BASH

Herhangi bir node'a bağlanarak replica set'in durumunu kontrol edin:

mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p

# Replica-Set'in durumu kontrol edilir
rs.status()
BASH

12) Mongo 7.0 Özellik Uyumu Kontrolü

Bütün Node'lar MongoDB 7.0'a geçtikten sonra, özellik uyumluluğu ayarı 7.0'a ayarlanır (Primary Node'da).

# Primary Node'a Bağlanılır.
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin

# Aşağıdaki komutun çıktısı olarak özellik uyumu eğer 6 gözüküyorsa 7'ye güncellenmesi gerekir
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })

# Eğer değer 7.0 değilse, bunu aşağıdaki komutla değiştirebilirsiniz
db.adminCommand( { setFeatureCompatibilityVersion: "7.0", confirm: true } )
BASH