Canary veya blue-green dağıtımı nasıl yaparım?
Kısa cevap
Canary için yeni sürüm ayrı bir Kurum Servisi olarak eklenir ve trafiğin küçük bir payı ona verilir: Weight ile (Algorithm = Weighted Round Robin gerekir), Random Number değişkenli bir Dynamic Condition ile ya da yalnızca belirli kullanıcıları seçen bir koşulla. Blue-green geçişte iki ortam hazır tutulur ve trafik tek hamlede çevrilir: Maintenance Mode açılıp kapatılarak ya da vService'in Default Backend Services listesi değiştirilerek. Yeni sürüm kullanıcıya açılmadan önce Traffic Mirroring ile gerçek trafiğin kopyasıyla denenebilir; Backup Service ise yeni sürüm erişilemez olursa trafiği eski sürüme döndürür.
Sorun: Yeni Sürüm Risk Almadan Canlıya Alınmalı
Yeni bir sürümü tüm kullanıcılara bir anda açmak, bir hata olduğunda herkesi etkiler. Canary yaklaşımında yeni sürüm önce trafiğin küçük bir kısmına açılır ve pay kademeli artırılır; blue-green yaklaşımında iki ortam hazır tutulur ve trafik tek hamlede yeni ortama çevrilir, sorun olursa aynı hızla geri alınır. TR7'de iki yaklaşım da Kurum Servisi ayarları ve Conditional Backend Services (Content Switching) ile kurulur; Kurum Servisi tarafında ek bir yapılandırma gerekmez.
Çözüm: Yedi Yöntem
Yöntemler birlikte de kullanılabilir: örneğin yeni sürüm önce Traffic Mirroring ile denenir, sonra Weight ile kademeli açılır.
| Durumunuz | Uygun yöntem |
|---|---|
| Kademeli pay (canary), kullanıcı sabitlenebilir | Yöntem 1: Weight |
| İstek başına yüzde (canary) | Yöntem 2: Dynamic condition + Random number |
| Yalnızca beta kullanıcıları (canary) | Yöntem 3: Hedefli koşul |
| Kullanıcıya açmadan deneme | Yöntem 4: Traffic Mirroring |
| Tek hamlede geçiş (blue-green) | Yöntem 5: Maintenance Mode |
| Hedefi değiştirerek geçiş (blue-green) | Yöntem 6: Default Backend Services listesini değiştirmek |
| Yeni sürüm düşerse otomatik geri dönüş | Yöntem 7: Backup service |
Yöntem 1: Weight ile Kademeli Canary Önerilen
- Nasıl çalışır Kurum Servisleri Weight oranında trafik alır; yeni sürümün Weight değeri artırılarak payı kademeli büyütülür.
- Nerede açılırLoad Balancer → Backend Services → Weight · vService → LB Algorithm → Algorithm
- Gereksinim Algorithm = Weighted Round Robin (varsayılan Round Robin Weight değerlerini yok sayar)
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Load Balancer → Backend Services → Add ile yeni sürüm için Kurum Servisi oluşturulur; Backend Service Name ve Address (yeni sürüm sunucusunun IP'si ve portu, ör. 192.0.2.21:8080) girilir, Health Check profili seçilip Add ile kaydedilir (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
İki Kurum Servisinde sırayla Edit ile Weight alanına pay girilir (1–256) ve Edit ile kaydedilir; örneğin eski sürüm 99, yeni sürüm 1 → yeni sürüm yaklaşık %1 alır. Backend Group içindeki sunucularda aynı alan sunucu düzeyinde bulunur.
Load Balancer → Load Balancer vService List ekranında vService seçilip Edit tıklanır.
İki Kurum Servisi Default Backend Services listesine eklenir; LB Algorithm bölümünde Algorithm = Weighted Round Robin seçilir. Network vService'te karşılığı Weighted Round-Robin'dir.
Canary'ye düşen kullanıcının orada kalması için HTTP vService'te Persistence = New cookie seçilir.
vService Save ile kaydedilir. Sorun görülmezse yeni sürümün Weight değeri adım adım yükseltilir; her değişiklik Kurum Servisinde Edit ile kaydedilir.
Doğrulama
Yeni sürümün Kurum Servisi panosunda HTTP Response Codes izlenir.
Yeni sürümde hata yanıtı artışı yokYöntem 2: Dynamic Condition + Random Number
- Nasıl çalışır Her istekte 0 ile Random max. − 1 arasında bir sayı üretilir; sayı eşiğin altındaysa istek yeni sürüme gider. Karar istek başına verilir, kullanıcı sabitlenmez.
- Nerede açılırLoad Balancer → Conditions → Dynamic Condition · vService → + Conditional backend services
- Gereksinim HTTP ya da L7 TCP vService
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Load Balancer → Conditions → Add ile koşul formu açılır (nasıl eklenir).
Koşul Add ile kaydedilir.
Yeni sürüm TR7'de henüz Kurum Servisi değilse Load Balancer → Backend Services → Add ile Backend Service Name, Address ve Health Check girilip Add ile kaydedilir (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
vService Edit ile açılır; Default Backend Services tablosunun üstündeki + Conditional backend services tıklanır. Bloğun Select Conditions alanında koşul, Backend Services tablosunda yeni sürüm seçilir.
vService Save ile kaydedilir; koşulu sağlamayan istekler Default Backend Services'e gitmeye devam eder.
Doğrulama
Left Monitor Panel'de vService açılıp Logs & Tracking sekmesindeki HTTP Logs ekranında Backend Service kolonuna bakılır.
İsteklerin yaklaşık %10'u yeni sürümdeYöntem 3: Hedefli Canary
- Nasıl çalışır Yalnızca belirli bir başlığı, cookie'yi ya da kaynak adresi taşıyan istekler yeni sürüme gönderilir.
- Nerede açılırLoad Balancer → Conditions → HTTP Header / User Cookie Name / Source IP · vService → + Conditional backend services
- Gereksinim HTTP vService (Source IP koşulu L7 TCP'de de kullanılabilir)
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Load Balancer → Conditions → Add ile koşul formu açılır (nasıl eklenir).
Condition Name girilir ve beta kullanıcılarını ayıran ölçüt seçilir: ör. Header Name = X-Canary ve eşleştirme Is present olan bir HTTP Header koşulu, beta adlı çerezi arayan bir User Cookie Name koşulu ya da iç ağ adresleri için Source IP (Manual).
Koşul Add ile kaydedilir.
Yeni sürüm TR7'de henüz Kurum Servisi değilse Load Balancer → Backend Services → Add ile tanımlanır (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
vService Edit ile açılır; + Conditional backend services ile blok eklenir, koşul ve yeni sürüm seçilir.
vService Save ile kaydedilir.
Doğrulama
Başlıklı ve başlıksız birer istek gönderilir (ör. curl -H "X-Canary: 1" https://www.example.com/); HTTP Logs ekranında isteklerin gittiği Kurum Servisine bakılır.
Başlıklı istek → yeni sürüm · başlıksız → Default backend servicesYöntem 4: Traffic Mirroring ile Ön Deneme
- Nasıl çalışır Gerçek isteklerin kopyası yeni sürüme gönderilir; kopyanın yanıtı atılır ve kullanıcı yanıtı her zaman mevcut sürümden alır.
- Nerede açılırLoad Balancer → Actions → Traffic Mirroring
- Gereksinim HTTP vService; hedef tek bir Kurum Servisi
- vService tipi HTTP
Adım adım yapılandırma
Kopyanın gönderileceği yeni sürüm TR7'de henüz Kurum Servisi değilse Load Balancer → Backend Services → Add ile tanımlanır (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?). Mirror Target Service yalnızca tek bir Kurum Servisi kabul eder; Backend Group seçilemez.
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Traffic Mirroring seçilir ve Mirror Target Service alanında yeni sürüm seçilir (shadow testing).
Aksiyon Add ile kaydedilir.
vService Edit ile açılır; aksiyon Details → Actions alanında seçilir.
vService Save ile kaydedilir.
Doğrulama
vService'in Live Stats ekranındaki Traffic Mirroring bölümünde Mirrored/s, Skipped/s ve Dropped/s değerlerine bakılır (aynalamanın izlenmesi).
Mirrored/s > 0Yöntem 5: Maintenance Mode ile Blue-Green
- Nasıl çalışır Maintenance Mode'daki Kurum Servisi yeni trafik almaz; iki ortamın Maintenance Mode durumu yer değiştirilerek trafik tek hamlede çevrilir.
- Nerede açılırLoad Balancer → Backend Services → Edit → Maintenance Mode
- Gereksinim Blue ve Green aynı Default Backend Services listesinde
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Yeni ortam (Green) henüz Kurum Servisi değilse Load Balancer → Backend Services → Add ile Backend Service Name, Address ve Health Check girilir; Maintenance Mode işaretlenip Add ile kaydedilir. Böylece listeye eklendiğinde trafik almaz (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
vService Edit ile açılır; Blue ve Green Default Backend Services listesine eklenir ve vService Save ile kaydedilir. Green'de Maintenance Mode açık olduğu için trafik yalnızca Blue'ya gider.
Green Kurum Servisi Edit ile açılır, Maintenance Mode işareti kaldırılır ve Edit ile kaydedilir. Health check başarılı olunca Green trafik almaya başlar.
Blue Kurum Servisi Edit ile açılır, Maintenance Mode işaretlenir ve Edit ile kaydedilir. Blue'daki mevcut bağlantılar kesilmez, tamamlanmaya bırakılır; yeni bağlantılar Green'e gider. Geri dönmek için 3. ve 4. adım ters yönde uygulanır.
Doğrulama
Load Balancer → Backend Services listesinde Blue'nun adının yanında bakım simgesi görülür; HTTP Logs ekranında yeni isteklerin Backend Service kolonuna bakılır.
Yeni istekler → GreenYöntem 6: Default Backend Services Listesini Değiştirmek
- Nasıl çalışır vService'in Default Backend Services listesindeki Blue Kurum Servisi ya da grubu Green ile değiştirilir.
- Nerede açılır vService → Edit → Default Backend Services
- Gereksinim Green ayrı bir Kurum Servisi ya da Backend Group olarak tanımlı
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Green TR7'de henüz tanımlı değilse Load Balancer → Backend Services → Add ile Kurum Servisi olarak eklenir; birden çok sunucu tek hedef olarak yönetilecekse Load Balancer → Backend Groups → Add ile bir Backend Group oluşturulur (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?).
Load Balancer → Load Balancer vService List ekranında vService seçilip Edit tıklanır.
Default Backend Services listesinden Blue kaldırılır, Green eklenir.
vService Save ile kaydedilir. Geri dönmek için liste eski hâline getirilir.
Doğrulama
vService'in Load Balancer Management sekmesindeki Backend Services bölümünde hedef görülür; HTTP Logs ekranında yeni isteklerin gittiği Kurum Servisine bakılır.
Yeni istekler → GreenYöntem 7: Backup Service ile Güvenlik Ağı
- Nasıl çalışır Green ana servis, Blue yedek olarak tutulur; Green'in bütün ana servisleri erişilemez olursa trafik Blue'ya geçer, Green yeniden sağlıklı olunca trafik kendiliğinden Green'e döner.
- Nerede açılırLoad Balancer → Backend Services → Backup Service
- Gereksinim Green'e Health check profili atanmış olmalı; profil yoksa erişilemezlik algılanmaz
- vService tipi HTTP · L7 TCP
Adım adım yapılandırma
Green Kurum Servisi Edit ile açılır; Health Check alanında bir profil seçilir (varsayılan No check) ve Edit ile kaydedilir. Uygun profil yoksa Load Balancer → Profiles → Health Checks → Add ile önce oluşturulur (nasıl eklenir).
Blue Kurum Servisi Edit ile açılır; Backup Service işaretlenir ve Edit ile kaydedilir. Green normal servis olarak kalır.
vService Edit ile açılır; Green ve Blue Default Backend Services listesine eklenir ve vService Save ile kaydedilir.
Doğrulama
HTTP Logs ekranında isteklerin gittiği Kurum Servisine bakılır; Backend Services listesinde Blue'nun adının yanında yedek servis simgesi görülür.
Bütün istekler → GreenSık Yapılan Hatalar
- Varsayılan algoritmayla Weight beklemek. Yeni vService'lerde varsayılan olan Round Robin Weight değerlerini yok sayar; Weighted Round Robin seçilmelidir.
- Random number bölmesinin kullanıcıyı sabitlediğini sanmak. Karar her istekte yeniden verilir; oturum gerektiren uygulamalarda Weight ile New Cookie kullanılır.
- Koşulsuz blok eklemek. Koşulu boş bir Conditional Backend Services bloğu hiçbir istekle eşleşmez.
- Kademeli ağırlık değişimini blue-green sanmak. Blue-green tek hamlede geçiştir; payın kademeli kaydırılması canary'dir.
- Cluster'da değişikliği iki cihazda ayrı ayrı yapmak. Weight, Maintenance Mode ve vService değişiklikleri varsayılan auto-sync ile eş cihaza kendiliğinden geçer; yalnızca Manual Sync Mode açıkken Synchronize gerekir.
Dokümantasyonda nasıl yapılır
