Internetsiz Ortamda MongoDB Sürüm Yükseltme
Bu doküman, internet erişimi bulunmayan (air-gapped) ortamlarda çalışan ve replica set olarak yapılandırılmış MongoDB kümelerinin, hizmet kesintisi yaşanmadan bir üst ana sürüme yükseltilmesini açıklar. Kurulum, repoya bağlanmak yerine önceden indirilip sunuculara taşınan yerel paketlerden (RPM) yapılır.
MongoDB'de ana sürüm atlanamaz; yükseltme her ana sürüm için sırayla uygulanır: 4.4 → 5.0 → 6.0 → 7.0 → 8.0. Her geçişte izlenen yöntem aynıdır: önce secondary node'lar teker teker güncellenir, ardından primary node secondary rolüne çekilip güncellenir ve en son featureCompatibilityVersion (FCV) değeri yükseltilir.
Yükseltmeye başlamadan önce güncel bir mongodump yedeği alınmalı ve her node üzerindeki /etc/mongod.conf dosyasının bir kopyası saklanmalıdır. Paketler internete bağlı bir makinede indirilip ilgili sürüm için her node'a taşınmış olmalıdır.
Örneklerdeki <NODE_IP> node'un IP adresini, <PRIMARY_NODE_IP> primary node'un IP adresini ve <paket-dizini> ilgili sürümün RPM dosyalarının bulunduğu dizini ifade eder. Komutlar RHEL / Rocky / AlmaLinux (dnf) ortamına göredir. Varsayılan Apinizer MongoDB portu 25080 olarak kullanılmıştır.
MongoDB 4.4'ten 5.0'a Yükseltme
1. Secondary Node'ları MongoDB 4.4'ten 5.0'a Güncelleme
Her secondary node üzerinde sırasıyla uygulanır.
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
Bir secondary node, SECONDARY durumuna ve health: 1 değerine dönmeden diğer secondary node'un güncellemesine geçmeyin.
2. Primary Rolündeki Bir Node'u Secondary Rolüne Çekme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
Primary'yi düşürün:
rs.stepDown()
Yeni primary'nin seçildiğini doğrulayın:
rs.status()
3. Primary Rolünü Bırakan Node'u MongoDB 4.4'ten 5.0'a Güncelleme
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
4. MongoDB 5.0 Özellik Uyumu (FCV) Güncelleme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin
Mevcut özellik uyumunu kontrol edin:
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
Özellik uyumunu güncelleyin:
db.adminCommand({ setFeatureCompatibilityVersion: "5.0" })
MongoDB 5.0'dan 6.0'a Yükseltme
5. Secondary Node'ları MongoDB 5.0'dan 6.0'a Güncelleme
Her secondary node üzerinde sırasıyla uygulanır.
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
6. Primary Rolündeki Bir Node'u Secondary Rolüne Çekme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
Primary'yi düşürün:
rs.stepDown()
Yeni primary'nin seçildiğini doğrulayın:
rs.status()
7. Primary Rolünü Bırakan Node'u MongoDB 5.0'dan 6.0'a Güncelleme
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
8. MongoDB 6.0 Özellik Uyumu (FCV) Güncelleme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin
Mevcut özellik uyumunu kontrol edin:
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
Özellik uyumunu güncelleyin:
db.adminCommand({ setFeatureCompatibilityVersion: "6.0" })
MongoDB 6.0'dan 7.0'a Yükseltme
MongoDB 7.0 sürümünde storage.journal yapılandırma anahtarı tamamen kaldırılmıştır; journaling artık her zaman etkindir. /etc/mongod.conf dosyasında 6.0 döneminden kalan bir journal bloğu varsa, 7.0 servisi bu anahtarı tanımaz ve Unrecognized option: storage.journal.enabled hatasıyla (status=2/INVALIDARGUMENT) açılmaz. Bu geçişte servisi başlatmadan önce journal bloğu config dosyasından tümüyle kaldırılmalıdır. Düzeltme, bu bloğu içeren her node üzerinde ayrıca uygulanmalıdır.
9. Secondary Node'ları MongoDB 6.0'dan 7.0'a Güncelleme
Her secondary node üzerinde sırasıyla uygulanır.
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
Yapılandırmadaki journal bloğunu kaldırın:
sudo cp -a /etc/mongod.conf /etc/mongod.conf.bak
sudo sed -i '/^\s*journal:/,/^\s*enabled:/d' /etc/mongod.conf
sudo grep -n journal /etc/mongod.conf # çıktı boş olmalıdır
Yalnızca enabled: true alt satırını silmek yeterli değildir; journal: anahtarının kendisi de geçersizdir. İşlem sırasında storage: ve dbPath: satırlarının YAML girintisi korunmalıdır.
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
10. Primary Rolündeki Bir Node'u Secondary Rolüne Çekme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
Primary'yi düşürün:
rs.stepDown()
Yeni primary'nin seçildiğini doğrulayın:
rs.status()
11. Primary Rolünü Bırakan Node'u MongoDB 6.0'dan 7.0'a Güncelleme
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
Yapılandırmadaki journal bloğunu kaldırın:
sudo cp -a /etc/mongod.conf /etc/mongod.conf.bak
sudo sed -i '/^\s*journal:/,/^\s*enabled:/d' /etc/mongod.conf
sudo grep -n journal /etc/mongod.conf # çıktı boş olmalıdır
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
12. MongoDB 7.0 Özellik Uyumu (FCV) Güncelleme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin
Mevcut özellik uyumunu kontrol edin:
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
Özellik uyumunu güncelleyin:
db.adminCommand({ setFeatureCompatibilityVersion: "7.0", confirm: true })
MongoDB 7.0'dan 8.0'a Yükseltme
13. Secondary Node'ları MongoDB 7.0'dan 8.0'a Güncelleme
Her secondary node üzerinde sırasıyla uygulanır.
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
14. Primary Rolündeki Bir Node'u Secondary Rolüne Çekme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
Primary'yi düşürün:
rs.stepDown()
Yeni primary'nin seçildiğini doğrulayın:
rs.status()
15. Primary Rolünü Bırakan Node'u MongoDB 7.0'dan 8.0'a Güncelleme
MongoDB servisini durdurun:
sudo systemctl stop mongod
Paketleri kurun (çevrimdışı, yerel dizinden):
cd <paket-dizini>
sudo dnf install -y ./*.rpm
MongoDB servisini başlatın:
sudo systemctl start mongod
sudo systemctl status mongod
Replica set durumunu kontrol edin:
mongosh mongodb://<NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
rs.status()
16. MongoDB 8.0 Özellik Uyumu (FCV) Güncelleme
Primary node'a bağlanın:
mongosh mongodb://<PRIMARY_NODE_IP>:25080 --authenticationDatabase "admin" -u "apinizer" -p
use admin
Mevcut özellik uyumunu kontrol edin:
db.runCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
Özellik uyumunu güncelleyin:
db.adminCommand({ setFeatureCompatibilityVersion: "8.0", confirm: true })