RDP sunucu çiftliği için yük dengeleme yapabilir miyim?
Kısa cevap
Evet, L7 TCP vService ile. 3389 portu frontend'de TCP protokolüyle yayınlanır, Details panelindeki LB Algorithm kutusunda RDP Cookie seçilir ve RDP Cookie Name alanına mstshash yazılır. RDP istemcisi bağlantının başında kullanıcı adını bu çerezle gönderir; TR7 aynı kullanıcıyı her bağlantıda aynı Kurum Servisine yönlendirir. RDP Cookie kalıcılığı kendisi sağladığı için ayrı bir Persistence seçilmez. Bağlantı kurulduktan sonra boşta kalan oturumların kopmaması için Timeouts profilindeki Tunnel(Websocket) Timeout değeri (varsayılan 120 saniye) artırılır.
Sorun: RDP Oturumu Neden Aynı Sunucuya Dönmeli?
Uzak masaüstü oturumu, kullanıcının bağlandığı sunucuda açık kalır. Bağlantı koptuğunda ya da kullanıcı yeniden bağlandığında başka bir sunucuya yönlendirilirse açık oturumuna ulaşamaz ve yeni bir oturum açılır. Ayrıca RDP bağlantısı saatlerce açık kalabilir; kullanıcı işlem yapmadığı sürede bağlantı boşta beklerken zaman aşımına uğrayabilir.
Çözüm
L7 TCP vService ve RDP Cookie algoritması
- Nasıl çalışır RDP istemcisi bağlantının ilk paketinde
mstshashçerezine kullanıcı adını yazar; TR7 bu değere göre sunucu seçer ve aynı kullanıcıyı hep aynı sunucuya gönderir. - Nerede açılır vService → Details → LB Algorithm → RDP Cookie → RDP Cookie Name
- Gereksinim Frontend protokolünün TCP olması (RDP'nin TLS'i RDP el sıkışmasının içinde başlar; TR7'de sonlandırılmaz)
- vService tipi L7 TCP
- Kurum Servisi tarafı Değişiklik gerekmez. Sunucular varsayılan olarak bağlantıyı TR7'nin IP'sinden görür; denetim kayıtlarında istemci IP'si gerekiyorsa Kurum Servisinde SNAT → Use Client IP kullanılır.
Adım adım yapılandırma
Load Balancer → Profiles → Health Checks → Add adımları izlenir (nasıl eklenir).
Name girilir ve Check Type olarak TCP seçilir (varsayılan HTTP'dir; tür kayıttan sonra değiştirilemez).
Formun altındaki Add butonuna tıklanır.
Load Balancer → Backend Services → Add adımları izlenir (Kurum Servisi nasıl eklenir; hangi bilgiler zorunludur?). Bu adım ve sonraki iki adım her RDP sunucusu için tekrarlanır.
Backend Service Name ve Address (ör. 192.0.2.50:3389) girilir; Health Check alanında 1–3. adımlarda oluşturulan profil seçilir. Health check tanımlı olmayan Kurum Servisi her zaman erişilebilir kabul edilir.
Formun altındaki Add butonuna tıklanır.
Load Balancer → Profiles → Timeouts → Add adımları izlenir (nasıl eklenir).
Name girilir; Tunnel(Websocket) Timeout alanına kullanıcıların boşta kalabileceği süreden büyük bir değer saniye olarak yazılır (ör. 28800; en çok 60.000). L7 TCP'de bağlantı kurulduktan sonra geçerli olan boşta kalma süresi budur.
Formun altındaki Add butonuna tıklanır.
Load Balancer → Load Balancer vService List → Add adımları izlenir; Name girilir ve Type olarak L7 TCP seçilir.
Frontend satırında IP seçilir, port 3389 yapılır ve Protocol olarak Unencrypted grubundaki TCP seçilir (yeni satır 80 / TCP ile gelir). IP listede yoksa önce Network → Interfaces → Actions → Add IP ile eklenir (Frontend IP'sini neden elle yazamıyorum; listede olmayan bir IP'yi (ör. IPv6) vService'te kullanmak için ne yapmalıyım?).
Default Backend Services tablosunda 4–6. adımlarda eklenen Kurum Servisleri seçilir.
Formun sağ üstündeki Details anahtarı açılır; LB Algorithm kutusundaki Algorithm alanında RDP Cookie (listede Self-persistent notuyla) seçilir. Bu algoritma kalıcılığı kendisi sağladığı için Persistence alanı gizlenir.
Zorunlu RDP Cookie Name alanı boş gelir; alana mstshash yazılır.
Details panelinde Timeout kutusu işaretlenir ve 7–9. adımlarda oluşturulan profil seçilir.
Save butonuna tıklanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da aktarılır; Manual Sync Mode açıksa Synchronize ile elle gönderilir.
Doğrulama
mstsc /v:203.0.113.40 ile kullanıcı adı girilerek bağlanılır, bağlantı kesilip yeniden kurulur. vService'in vService Sessions ekranında bağlantının gittiği Kurum Servisine bakılır.
Aynı kullanıcı her bağlantıda aynı Kurum Servisine gider; açık oturumuna dönerSık Yapılan Hatalar
- RDP Cookie Name alanını yanlış yazmak. Alan
mstshasholmalıdır; başka bir ad yazılırsa çerez bulunamaz. - Frontend'de TCP + TLS seçmek. RDP'nin TLS'i RDP el sıkışmasının içinde başladığı için TR7'de sonlandırılamaz; Protocol TCP seçilir.
- Süreyi varsayılanda bırakmak. Tunnel(Websocket) Timeout 120 saniyedir; bu süre boyunca veri akmayan RDP bağlantıları kapatılır.
- Health check atamamak. Kapanan bir RDP sunucusu, health check yoksa bağlantı almaya devam eder.
Dokümantasyonda nasıl yapılır
