Mongo 4.4'ten 6.0'a Downtime Olmadan Güncelleme
Bu kılavuzda, MongoDB Replicalarını 4.4 sürümünden 6.0 sürümüne kesintisiz bir şekilde güncellemeyi amaçlamaktadır. MongoDB 6.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
Ç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
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()
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()
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
# MongoDB servisini başlatılır
sudo apt-mark hold mongo*
sudo systemctl start mongod
sudo systemctl status mongod
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()
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" })
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
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()
6) Son Primary-Node'a Bağlanılıp 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()
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
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()
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" } )