Veritabanı Bağlantı Sorunları
Sorunun Belirtileri
Veritabanı bağlantı sorunları genellikle aşağıdaki belirtilerle kendini gösterir:
- API isteklerinde zaman aşımı hataları
Connection refusedveyaConnection timeouthataları- Veritabanı sorgularının başarısız olması
- Yüksek sayıda connection pool hatası
- Pod'ların veritabanına bağlanamaması
Sorunun Nedenleri
Veritabanı bağlantı sorunları genellikle şu faktörlerden kaynaklanabilir:
- Ağ Bağlantısı Sorunları: Pod'ların veritabanına erişememesi
- Connection Pool Tükenmesi: Maksimum connection sayısına ulaşılması
- Veritabanı Sunucu Sorunları: Veritabanı sunucusunun yanıt vermemesi
- Yanlış Bağlantı Ayarları: Hatalı host, port veya credentials
- Firewall Kuralları: Ağ güvenlik kurallarının bağlantıyı engellemesi
- DNS Çözümleme Sorunları: Veritabanı host adının çözülememesi
Tespit Yöntemleri
1. Log Analizi
Veritabanı bağlantı hatalarını log dosyalarında arayın:
kubectl logs <pod-name> | grep -i "connection"
kubectl logs <pod-name> | grep -i "database"
kubectl logs <pod-name> | grep -i "timeout"
2. Bağlantı Testi
Pod içinden veritabanı bağlantısını test edin:
# Pod'a bağlanma
kubectl exec -it <pod-name> -- /bin/bash
# Veritabanı bağlantısını test etme
telnet <database-host> <database-port>
3. Connection Pool Metrikleri
Connection pool metriklerini izleyin:
- Aktif connection sayısı
- Bekleyen connection sayısı
- Connection timeout sayısı
- Connection pool kullanım yüzdesi
Çözüm Önerileri
1. Bağlantı Ayarlarını Kontrol Etme
Veritabanı bağlantı ayarlarını kontrol edin:
- Host: Veritabanı sunucu adresi doğru mu?
- Port: Port numarası doğru mu?
- Database Name: Veritabanı adı doğru mu?
- Username/Password: Kimlik bilgileri doğru mu?
- Connection String: Connection string formatı doğru mu?
2. MongoDB Connection Pool Ayarlarını Optimize Etme
Apinizer yapılandırmasını MongoDB'de tutar. JDBC veya Hikari havuzu yoktur; bu yüzden spring.datasource.hikari.* ayarları etki etmez. Havuzu, SPRING_DATA_MONGODB_URI ortam değişkenindeki MongoDB bağlantı dizesi seçenekleriyle ayarlayın.
SPRING_DATA_MONGODB_URI="mongodb://apinizer:<password>@mongo1:25080,mongo2:25080,mongo3:25080/?authSource=admin&replicaSet=apinizer-replicaset&maxPoolSize=100&minPoolSize=10&maxIdleTimeMS=600000&waitQueueTimeoutMS=5000&serverSelectionTimeoutMS=30000"
| Seçenek | Anlamı |
|---|---|
maxPoolSize | MongoDB sunucusu başına en fazla bağlantı sayısı |
minPoolSize | Açık tutulan en az boşta bağlantı sayısı |
maxIdleTimeMS | Boşta bağlantının kapatıldığı süre |
waitQueueTimeoutMS | Bir isteğin boş bağlantı için bekleyeceği en uzun süre |
serverSelectionTimeoutMS | Uygun MongoDB sunucusunu bulmak için en uzun süre |
Bu seçenekleri hangi bileşen okur:
- Manager ve Integration: Spring Boot, MongoDB istemcisini URI'den kurar. Yukarıdaki tüm seçenekler geçerlidir.
- Worker ve Cache MapStore istemcisi: Kod, URI'yi okuduktan sonra havuz boyutunu ve soket zaman aşımlarını kendisi belirler. URI'deki
maxPoolSize,minPoolSize,waitQueueTimeoutMS,connectTimeoutMSvesocketTimeoutMSdeğerleri geçersiz kalır. Sabit değerler: en fazla 50 bağlantı, en az 5 (Worker) veya 2 (Cache), 5 saniye bekleme, 10 saniye bağlanma ve 30 saniye okuma zaman aşımı.maxIdleTimeMSveserverSelectionTimeoutMSgibi diğer seçenekler geçerli olmaya devam eder.
Değişkeni Deployment üzerinde değiştirin, sonra pod'ları yeniden başlatın.
3. Ağ Bağlantısını Kontrol Etme
Ağ bağlantısını kontrol edin:
# DNS çözümleme testi
nslookup <database-host>
# Port erişilebilirliği testi
nc -zv <database-host> <database-port>
# Network policy kontrolü
kubectl get networkpolicies
4. Veritabanı Sunucu Durumunu Kontrol Etme
Veritabanı sunucu durumunu kontrol edin:
- Veritabanı sunucusu çalışıyor mu?
- Yeterli kaynak (CPU, RAM) var mı?
- Maksimum connection limit'ine ulaşılmış mı?
- Veritabanı log'larında hata var mı?
5. Firewall Kurallarını Kontrol Etme
Firewall kurallarını kontrol edin:
- Pod'ların veritabanı port'una erişimi var mı?
- Network policy'ler bağlantıyı engelliyor mu?
- Security group kuralları doğru mu?
6. DNS Çözümleme Sorunlarını Çözme
DNS çözümleme sorunlarını çözün:
- CoreDNS pod'ları çalışıyor mu?
- DNS ayarları doğru mu?
- Service discovery düzgün çalışıyor mu?
Önleyici Tedbirler
1. Connection Pool Monitoring
- Connection pool metriklerini düzenli izleyin
- Alert'ler kurarak erken uyarı alın
- Connection pool kullanımını optimize edin
2. Health Check'ler
- Veritabanı health check'lerini yapılandırın
- Liveness ve readiness probe'ları ayarlayın
- Otomatik failover mekanizmaları kurun
3. Connection Retry Mekanizması
- Connection retry mekanizması ekleyin
- Exponential backoff kullanın
- Maksimum retry sayısını belirleyin