Ana içeriğe geç

Veritabanı Bağlantı Sorunları

Sorunun Belirtileri​

uyarı

Veritabanı bağlantı sorunları genellikle aşağıdaki belirtilerle kendini gösterir:

  • API isteklerinde zaman aşımı hataları
  • Connection refused veya Connection timeout hataları
  • 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​

Log Dosyalarını Kontrol Et

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'a Bağlan

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​

bilgi

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​

bilgi

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çenekAnlamı
maxPoolSizeMongoDB sunucusu başına en fazla bağlantı sayısı
minPoolSizeAçık tutulan en az boşta bağlantı sayısı
maxIdleTimeMSBoşta bağlantının kapatıldığı süre
waitQueueTimeoutMSBir isteğin boş bağlantı için bekleyeceği en uzun süre
serverSelectionTimeoutMSUygun MongoDB sunucusunu bulmak için en uzun süre
not

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, connectTimeoutMS ve socketTimeoutMS değ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ı. maxIdleTimeMS ve serverSelectionTimeoutMS gibi 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

İlgili Kaynaklar​