Önce hatanın adını doğru koyun
Bağlantı hatalarında en yorucu şey, herkesin aynı anda farklı bir ihtimali denemesidir. Biri parolayı değiştirir, biri firewall açar, biri uygulamayı yeniden başlatır. Bazen sorun çözülür ama kimse neden çözüldüğünü bilmez.
Daha iyi yol, hatayı uygulama logundaki metne göre sınıflandırmaktır. Zaman aşımı çoğunlukla ağ, DNS veya izin listesi tarafına; authentication failed kullanıcı/parola tarafına; TLS hataları sertifika ve bağlantı parametrelerine; too many connections ise havuz veya istemci davranışına işaret eder.
Üretimde ilk refleks güvenlik ayarlarını kapatmak olmamalıdır. IP izin listesi, TLS ve tenant izolasyonu doğru çalışıyorsa, sorun çoğu zaman istemcinin yanlış uç noktayı, yanlış portu veya eksik tüneli kullanmasıdır.
- Zaman aşımı: istemci veritabanı uç noktasına ulaşamıyor ya da güvenlik katmanı trafiği engelliyor.
- Connection refused: uç nokta yanlış portta, servis hazır değil veya bağlantı yolu tünelden geçmiyor olabilir.
- Authentication failed: kullanıcı, parola, database adı veya authSource hatalıdır.
- TLS hatası: istemci TLS istemiyor, yanlış CA kullanıyor veya bağlantı dizesi eksik parametre içeriyor.
- Too many connections: uygulama havuzu kontrolsüz büyümüş veya veritabanı tarafında pooler kullanılmıyor olabilir.
TürkDB kullanıyorsanız önce nerelere bakılır?
TürkDB pilotunda hedeflenen nokta, bağlantı yolunun dağınık olmamasıdır. Cluster durumu, olaylar, izin listesi kayıtları ve bağlantı bilgisi aynı kontrol düzleminden okunabilirse sorun kendiliğinden çözülmez ama yanlış kapıyı çalma riski azalır.
Aşağıdaki komutları bir “sihirli çözüm” gibi değil, durum fotoğrafı almak için düşünün. Fotoğraf netleşince parolaya mı, IP’ye mi, TLS’e mi, uygulama pool’una mı bakacağınız daha anlaşılır hale gelir.
Cluster ve erişim kontrolü
turkdb cluster get app-db turkdb cluster events app-db --limit 20 turkdb cluster allowlist list app-db turkdb connect app-db --no-tunnel
connect --no-tunnel yalnızca bağlantı bilgisini gösterir; otomatik tünel açmadan uygulamanın kullandığı DSN ile karşılaştırmak için kullanışlıdır.
Yeni ofis veya CI/CD çıkış IP adresini ekleme
turkdb cluster allowlist add app-db 203.0.113.0/24 --desc "Ofis ağı" turkdb cluster allowlist add app-db 198.51.100.42 --desc "CI/CD runner"
5 dakikalık karar ağacı
Bağlantı sorununda sırayla ilerlemek önemlidir; aksi halde aynı anda hem ağ hem kullanıcı hem uygulama havuzu değiştirilir ve gerçek neden kaybolur. İlk beş dakikada amaç bazen çözmek değil, problemi doğru sınıfa koymaktır.
Aşağıdaki akış küçük ekiplerde bile tekrar edilebilir bir müdahale rehberi sağlar. Önce servis hazır mı, sonra istemci doğru yerden mi geliyor, sonra kimlik bilgisi doğru mu, en son uygulama havuzu sağlıklı mı diye bakılır.
- Cluster hazır değilse uygulama koduna bakmayın; önce olay ve hazır olma durumunu çözün.
- İzin listesi eşleşmiyorsa parolayı değiştirmeyin; istemci çıkış IP adresini doğrulayın.
- CLI istemcisi bağlanıyor ama uygulama bağlanmıyorsa bağlantı dizesi veya framework pool ayarını inceleyin.
- Sadece yoğun saatlerde kopuyorsa ağdan önce bağlantı limiti ve pool tüketimini kontrol edin.
- TLS hatası varsa sslmode/tls parametresi ve istemcinin CA davranışı doğrulanmalıdır.
Uygulama bağlantı dizesi kontrol listesi
Bağlantı dizesi içinde host, port, database, kullanıcı, TLS modu ve motor-özel parametreler açık olmalıdır. PostgreSQL için sslmode=require, MongoDB için tls=true ve authSource, Redis için rediss:// şeması gibi detaylar çoğu bağlantı hatasını belirler.
Uygulama frameworkleri bazen bağlantı dizesi parametrelerini kendi varsayılanlarıyla ezebilir. Bu nedenle aynı DSN ile resmi CLI istemcisinden bağlanmak, sorunun uygulama kodunda mı ağda mı olduğunu ayırmanın pratik yoludur.
Motorlara göre güvenli bağlantı örnekleri
POSTGRES_DSN="postgresql://app:***@app.pg.ist1.turkdb.io:5432/app?sslmode=require" MYSQL_DSN="app:***@tcp(app.mysql.ist1.turkdb.io:3306)/app?tls=true" MONGODB_URI="mongodb://app:***@app.mongo.ist1.turkdb.io:27017/app?tls=true&authSource=admin" REDIS_URL="rediss://default:***@app.redis.ist1.turkdb.io:6379" CLICKHOUSE_DSN="clickhouse://app:***@app.ch.ist1.turkdb.io:9440?secure=true"
Sorun çözüldükten sonra tekrar etmesini nasıl önlersiniz?
Bağlantı problemi düzeldikten sonra aynı hatanın tekrar yaşanmaması için iki kayıt bırakılmalıdır: hangi sinyal kök nedeni gösterdi ve hangi değişiklik problemi çözdü. Bu bilgi olmadan ekip bir sonraki olayda yine rastgele deneme yapar.
TürkDB tarafında izin listesi açıklamalarını anlamlı yazmak, cluster olaylarını incelemek ve uygulama pool limitini kod deposunda görünür tutmak operasyonel borcu azaltır.
Uygulama havuz limitini açık tutma örneği
DB_POOL_MIN=2 DB_POOL_MAX=20 DB_CONNECT_TIMEOUT_MS=5000 DB_IDLE_TIMEOUT_MS=30000
Bu değerler örnektir; hedef, pool davranışının varsayılanlara bırakılmaması ve cluster kapasitesiyle birlikte dokümante edilmesidir.