Azure Traffic Manager ile Global Yük Dengeleme ve Trafik Yönlendirme Rehberi

Global ölçekte uygulama dağıtımı yapıyorsanız, kullanıcılarınızın dünyanın hangi köşesinden bağlandığı fark etmeksizin hızlı ve kesintisiz hizmet sunmak zorundasınız. Azure Traffic Manager tam da bu noktada devreye giriyor. DNS tabanlı bu trafik yönlendirme servisi, farklı coğrafi bölgelerdeki endpoint’lerinizi akıllıca yönetmenizi ve trafik politikalarını ihtiyacınıza göre şekillendirmenizi sağlıyor. Bu yazıda Traffic Manager’ı sıfırdan kurmanın yanı sıra gerçek dünya senaryolarında nasıl kullanabileceğinizi de ele alacağım.

Azure Traffic Manager Nedir ve Neden Kullanılır?

Traffic Manager, Azure’un DNS katmanında çalışan bir yük dengeleme servisidir. Klasik load balancer’lardan temel farkı şudur: paket seviyesinde değil, DNS çözümlemesi seviyesinde çalışır. Kullanıcı uygulamanıza bağlanmak istediğinde DNS sorgusu gelir, Traffic Manager bu sorguya en uygun endpoint’in IP adresini döndürür.

Bu yaklaşımın birkaç kritik avantajı var:

  • Coğrafi dağılım: Aynı anda birden fazla Azure bölgesinde, hatta Azure dışı sunucularda çalışan endpoint’leri yönetebilirsiniz
  • Otomatik failover: Bir bölge çökerse trafik otomatik olarak sağlıklı endpoint’lere yönlendirilir
  • Düşük gecikme: Kullanıcılar coğrafi olarak kendilerine en yakın endpoint’e yönlendirilir
  • Hibrit senaryolar: On-premises sunucularınızı da Traffic Manager’a ekleyebilirsiniz

Şimdi pratik kısma geçelim.

Traffic Manager Profile Oluşturma

Önce Azure CLI ile basit bir profile oluşturalım. Bu örnekte Batı Avrupa ve Doğu ABD’de iki farklı web uygulaması olduğunu varsayıyorum.

# Resource group oluştur
az group create 
  --name rg-trafficmanager-demo 
  --location westeurope

# Traffic Manager profile oluştur
az network traffic-manager profile create 
  --name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --routing-method Performance 
  --unique-dns-name globalapp-demo-2024 
  --ttl 30 
  --protocol HTTPS 
  --port 443 
  --path "/health"

Burada birkaç parametreye dikkat edelim:

  • –routing-method Performance: Kullanıcıyı en düşük gecikmeli endpoint’e yönlendirir
  • –unique-dns-name: Profilinizin DNS adı olacak, globalapp-demo-2024.trafficmanager.net şeklinde erişilir
  • –ttl 30: DNS TTL değeri, saniye cinsinden. Düşük tutmak failover süresini kısaltır ama DNS yükünü artırır
  • –path “/health”: Health check için kullanılacak URL yolu

Routing Method Seçenekleri

Traffic Manager’ın altı farklı routing methodu var ve hangisini seçeceğiniz kullanım senaryonuza göre değişir.

Performance Routing

Kullanıcıyı en düşük network gecikmesine sahip endpoint’e yönlendirir. Global kullanıcı tabanınız varsa ve her bölgede aynı uygulamayı çalıştırıyorsanız bu methodu kullanın.

az network traffic-manager profile update 
  --name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --routing-method Performance

Priority Routing

Primary-Secondary (aktif-pasif) senaryolar için idealdir. En yüksek öncelikli endpoint sağlıklıysa tüm trafik oraya gider, çökerse bir sonraki önceliğe geçer.

az network traffic-manager profile update 
  --name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --routing-method Priority

Weighted Routing

Trafik dağılımını yüzdesel olarak kontrol etmek istediğinizde kullanırsınız. Blue-green deployment ya da canary release senaryolarında çok işe yarar.

az network traffic-manager profile update 
  --name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --routing-method Weighted

Geographic Routing

Kullanıcının coğrafi konumuna göre yönlendirme yapar. Veri yerelleştirme gereksinimleri olan uygulamalar için kritiktir. Örneğin Avrupa kullanıcılarının verilerinin Avrupa’da kalması gerekiyorsa bu methodu seçmelisiniz.

Endpoint Ekleme

Profile oluşturduktan sonra endpoint’leri ekleyelim. Önce West Europe’daki App Service’i ekleyelim:

# West Europe endpoint ekle
az network traffic-manager endpoint create 
  --name endpoint-westeurope 
  --profile-name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --type azureEndpoints 
  --target-resource-id "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/rg-app-westeu/providers/Microsoft.Web/sites/webapp-westeurope" 
  --priority 1 
  --weight 70 
  --endpoint-status Enabled

# East US endpoint ekle
az network traffic-manager endpoint create 
  --name endpoint-eastus 
  --profile-name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --type azureEndpoints 
  --target-resource-id "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/rg-app-eastus/providers/Microsoft.Web/sites/webapp-eastus" 
  --priority 2 
  --weight 30 
  --endpoint-status Enabled

Endpoint türleri hakkında kısa bilgi:

  • azureEndpoints: Azure kaynaklarına doğrudan referans verir
  • externalEndpoints: Azure dışı veya farklı subscription’daki kaynaklara FQDN ya da IP ile erişim sağlar
  • nestedEndpoints: Başka bir Traffic Manager profilini endpoint olarak ekler, karmaşık trafik senaryoları için kullanılır

Health Check Konfigürasyonu

Traffic Manager’ın en güçlü özelliklerinden biri health check mekanizması. Endpoint’lerinizin durumunu düzenli aralıklarla kontrol eder ve sorunlu olanları otomatik olarak devre dışı bırakır.

# Health check ayarlarını güncelle
az network traffic-manager profile update 
  --name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --protocol HTTPS 
  --port 443 
  --path "/api/health" 
  --interval 10 
  --timeout 5 
  --tolerated-failures 2

Parametreler:

  • –interval 10: Her 10 saniyede bir probe gönderir
  • –timeout 5: 5 saniye içinde yanıt gelmezse başarısız sayar
  • –tolerated-failures 2: 2 ardışık başarısız probe’dan sonra endpoint degraded olarak işaretlenir

Uygulamanızda /api/health endpoint’inin HTTP 200 dönmesi gerekiyor. İyi bir health check endpoint’i sadece sunucunun ayakta olduğunu değil, veritabanı bağlantısı ve bağımlı servislerin durumunu da kontrol etmelidir.

Gerçek Dünya Senaryosu: E-Ticaret Sitesi için Global Yük Dengeleme

Dünya genelinde kullanıcı tabanı olan bir e-ticaret platformu düşünelim. Üç bölgede deployment var: West Europe (birincil), East US ve Southeast Asia. Normal şartlarda Performance routing ile kullanıcılar en yakın bölgeye yönlendirilecek. Ama bir bölge çökerse diğerleri devreye girecek.

Bu senaryo için iç içe (nested) profile yapısı kuruyoruz:

# Ana profile (Performance routing)
az network traffic-manager profile create 
  --name tm-ecommerce-global 
  --resource-group rg-ecommerce 
  --routing-method Performance 
  --unique-dns-name ecommerce-global-prod 
  --ttl 60 
  --protocol HTTPS 
  --port 443 
  --path "/health/live"

# West Europe regional profile (Priority routing - aktif/pasif)
az network traffic-manager profile create 
  --name tm-ecommerce-westeu 
  --resource-group rg-ecommerce 
  --routing-method Priority 
  --unique-dns-name ecommerce-westeu-prod 
  --ttl 30 
  --protocol HTTPS 
  --port 443 
  --path "/health/live"

# West Europe primary endpoint
az network traffic-manager endpoint create 
  --name endpoint-westeu-primary 
  --profile-name tm-ecommerce-westeu 
  --resource-group rg-ecommerce 
  --type azureEndpoints 
  --target-resource-id "/subscriptions/{SUB_ID}/resourceGroups/rg-westeu/providers/Microsoft.Web/sites/webapp-westeu-01" 
  --priority 1

# West Europe secondary endpoint (DR)
az network traffic-manager endpoint create 
  --name endpoint-westeu-secondary 
  --profile-name tm-ecommerce-westeu 
  --resource-group rg-ecommerce 
  --type azureEndpoints 
  --target-resource-id "/subscriptions/{SUB_ID}/resourceGroups/rg-westeu/providers/Microsoft.Web/sites/webapp-westeu-02" 
  --priority 2

# West Europe regional profile'i ana profile'e nested endpoint olarak ekle
az network traffic-manager endpoint create 
  --name nested-westeu 
  --profile-name tm-ecommerce-global 
  --resource-group rg-ecommerce 
  --type nestedEndpoints 
  --target-resource-id "/subscriptions/{SUB_ID}/resourceGroups/rg-ecommerce/providers/Microsoft.Network/trafficManagerProfiles/tm-ecommerce-westeu" 
  --min-child-endpoints 1 
  --endpoint-location westeurope

Bu yapıda şu avantajları elde ediyorsunuz: Global düzeyde en yakın bölgeye yönlendirme yapılıyor. Bölge içinde ise birincil sunucu çökerse ikincil devreye giriyor. --min-child-endpoints 1 parametresi sayesinde nested profile’in en az 1 sağlıklı endpoint’i olduğu sürece ana profile’de healthy görünüyor.

Canary Release ile Weighted Routing

Yeni bir sürümü kademeli olarak yayına almak istiyorsunuz. Trafiğin %10’unu yeni versiyona yönlendirip izleyeceksiniz, sorun yoksa yüzdeyi artıracaksınız.

# Weighted profile oluştur
az network traffic-manager profile create 
  --name tm-app-canary 
  --resource-group rg-app 
  --routing-method Weighted 
  --unique-dns-name myapp-canary-release 
  --ttl 30 
  --protocol HTTPS 
  --port 443 
  --path "/health"

# Stable versiyon - %90 trafik
az network traffic-manager endpoint create 
  --name endpoint-stable 
  --profile-name tm-app-canary 
  --resource-group rg-app 
  --type externalEndpoints 
  --target "app-stable.azurewebsites.net" 
  --weight 90 
  --endpoint-status Enabled

# Canary versiyon - %10 trafik
az network traffic-manager endpoint create 
  --name endpoint-canary 
  --profile-name tm-app-canary 
  --resource-group rg-app 
  --type externalEndpoints 
  --target "app-canary.azurewebsites.net" 
  --weight 10 
  --endpoint-status Enabled

Canary sürüm stableyse weight’i güncelleyerek kademeli geçiş yapabilirsiniz:

# Canary sürümü %50'ye çıkar
az network traffic-manager endpoint update 
  --name endpoint-canary 
  --profile-name tm-app-canary 
  --resource-group rg-app 
  --weight 50

az network traffic-manager endpoint update 
  --name endpoint-stable 
  --profile-name tm-app-canary 
  --resource-group rg-app 
  --weight 50

Endpoint Durumunu İzleme ve Yönetme

Operasyonel açıdan profile ve endpoint durumlarını düzenli takip etmeniz gerekir.

# Profile genel durumunu kontrol et
az network traffic-manager profile show 
  --name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --query "{Name:name, Status:properties.profileStatus, RoutingMethod:properties.trafficRoutingMethod, MonitorStatus:properties.monitorConfig.profileMonitorStatus}" 
  --output table

# Tüm endpoint'lerin durumunu listele
az network traffic-manager endpoint list 
  --profile-name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --query "[].{Name:name, Status:properties.endpointStatus, MonitorStatus:properties.endpointMonitorStatus, Target:properties.target}" 
  --output table

# Belirli bir endpoint'i manuel olarak devre dışı bırak (maintenance window için)
az network traffic-manager endpoint update 
  --name endpoint-westeurope 
  --profile-name tm-global-app 
  --resource-group rg-trafficmanager-demo 
  --endpoint-status Disabled

Maintenance window sırasında bir endpoint’i devre dışı bırakmak yerine Traffic Manager’ın health check’ini atlayarak kontrollü trafik yönlendirmesi yapabilirsiniz. Endpoint’i disabled yaptığınızda DNS TTL süresi kadar eski cache’ler devreye girebilir, bunu hesaba katın.

PowerShell ile Toplu Yönetim

Birden fazla profile yönetiyorsanız PowerShell scriptleri işinizi çok kolaylaştırır. Aşağıdaki script tüm Traffic Manager profillerindeki sağlıksız endpoint’leri raporlar:

# Azure PowerShell ile sağlıksız endpoint raporu
# Bu scripti Azure Cloud Shell'de çalıştırabilirsiniz

$profiles = Get-AzTrafficManagerProfile

foreach ($profile in $profiles) {
    $endpoints = Get-AzTrafficManagerEndpoint -ProfileName $profile.Name -ResourceGroupName $profile.ResourceGroupName
    
    foreach ($endpoint in $endpoints) {
        if ($endpoint.EndpointMonitorStatus -ne "Online") {
            Write-Output "UNHEALTHY: Profile=$($profile.Name) | Endpoint=$($endpoint.Name) | Status=$($endpoint.EndpointMonitorStatus) | Target=$($endpoint.Target)"
        }
    }
}

Bu scripti Azure Automation’a ekleyip zamanlanmış çalıştırabilir, sonuçları Log Analytics’e aktarabilir ya da Alert oluşturabilirsiniz.

Önemli Dikkat Noktaları

Pratikte Traffic Manager kullanırken birkaç konuya özellikle dikkat etmeniz gerekiyor.

DNS Caching ve TTL: Traffic Manager DNS tabanlı çalıştığı için failover anında tüm istemciler hemen yeni endpoint’e geçmez. TTL süresi boyunca eski endpoint’in adresini cache’de tutanlar olmaya devam eder. Kritik uygulamalarda TTL’yi 30-60 saniyeye çekin, ama bu DNS sorgularını artırır ve maliyet getirir.

Health Check Sıklığı: Çok agresif health check ayarları endpoint’lerinize gereksiz yük bindirir. Normal uygulamalar için 30 saniyelik interval yeterlidir. Mission-critical sistemlerde 10 saniyeye inebilirsiniz.

Endpoint Türü Seçimi: Azure kaynaklarını azureEndpoints olarak eklemek daha az konfigürasyon gerektirirken externalEndpoints için manuel IP veya FQDN girişi yapmanız ve health check için custom header ihtiyacınız olabilir.

Maliyet: Traffic Manager, DNS sorgu sayısına ve health check sayısına göre ücretlendirilir. Milyonlarca kullanıcısı olan bir serviste bu maliyet göz ardı edilemez. Azure Pricing Calculator ile önceden hesap yapın.

Geographic Routing ve Fallback: Geographic routing kullanırken mutlaka bir “World” ya da fallback endpoint tanımlayın, aksi takdirde kapsanmayan coğrafyalardan gelen kullanıcılar hata alır.

Traffic Manager Diagnostics ve Troubleshooting

Sorun giderme süreçlerinde en çok ihtiyaç duyacağınız araç nslookup ve dig komutlarıdır:

# Traffic Manager DNS çözümlemesini test et
nslookup globalapp-demo-2024.trafficmanager.net

# dig ile daha detaylı bilgi al
dig globalapp-demo-2024.trafficmanager.net +short

# Farklı lokasyonlardan simülasyon için
# Azure'un farklı bölgelerindeki DNS resolver'larını kullanabilirsiniz
dig @168.63.129.16 globalapp-demo-2024.trafficmanager.net

# Endpoint health durumunu REST API ile sorgula
curl -s -H "Authorization: Bearer $(az account get-access-token --query accessToken -o tsv)" 
  "https://management.azure.com/subscriptions/{SUB_ID}/resourceGroups/rg-trafficmanager-demo/providers/Microsoft.Network/trafficManagerProfiles/tm-global-app?api-version=2018-04-01" 
  | python3 -m json.tool | grep -A 3 "endpointMonitorStatus"

Azure portalındaki Traffic Manager diagnostic logs özelliğini de etkinleştirmenizi tavsiye ederim. Bu sayede hangi istemcinin hangi endpoint’e yönlendirildiğini, health check sonuçlarını ve DNS sorgu metriklerini Log Analytics üzerinden analiz edebilirsiniz.

Sonuç

Azure Traffic Manager, özellikle multi-region deployment yapan ekipler için vazgeçilmez bir araç. DNS katmanında çalışması hem güç hem de kısıtlılık anlamına geliyor; TTL kaynaklı gecikmeyi kabul ederken karşılığında çok hafif ve ölçeklenebilir bir global yük dengeleme mekanizması elde ediyorsunuz.

Routing method seçimini uygulama gereksinimlerinize göre yapın: global kullanıcı tabanı için Performance, aktif-pasif DR için Priority, kademeli deployment için Weighted ve veri yerelleştirme için Geographic. Çoğu zaman bu methodları nested profile’lar ile kombine etmek en optimal çözümü sunar.

Health check konfigürasyonunu ihmal etmeyin. TTL değerlerinizi olası failover süresini göz önünde bulundurarak ayarlayın. Monitoring ve alerting mutlaka kurulumu aşamasında yapılandırın, sorun olduktan sonra değil. Ve son olarak, Traffic Manager’ı production’a almadan önce farklı bölgelerden DNS çözümlemelerini test edin; teoride çalışan her şey DNS caching gerçekliğiyle farklı davranabilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir