Giden bağlantı sorunlarını giderme

Bu makale, bir ağdan giden bağlantılarda meydana gelen yaygın sorunların çözümlerini Azure Load Balancer. Müşterilerin yaşanan giden bağlantı sorunlarının çoğu, kaynak ağ adresi çevirisi (SNAT) bağlantı noktası tükenmesi ve bırakılan paketlere neden olan bağlantı zaman aşımı nedeniyle ortaya çıkar. Bu makalede, bu sorunların her biri hafifletici adımlar açıklanmıştır.

SNAT'den kaçının

SNAT bağlantı noktası tükenmesi önlemenin en iyi yolu, mümkünse ilk olarak SNAT'ye olan ihtiyacı ortadan kaldırmaktır. Bazı durumlarda bu mümkün değildir. Örneğin, genel uç noktalara bağlanırken. Ancak bazı durumlarda bu mümkündür ve kaynaklara özel olarak bağlanarak bu mümkün olabilir. Depolama, SQL, Cosmos DB veya burada listelenen diğer Azurehizmetleri gibi Azure hizmetleriyle bağlantınız varsa, Azure Özel Bağlantı'den yararlanarak SNAT ihtiyacı ortadan kalkmış olur. Sonuç olarak, SNAT bağlantı noktası tükenmesi nedeniyle olası bir bağlantı sorunu riskiniz olmaz.

Özel Bağlantı Hizmeti Snowflake, MongoDB, Confluent, Elastic ve diğer hizmetler tarafından da de desteklemektedir.

SNAT (PAT) bağlantı noktası tükenmeyi yönetme

PAT için kullanılan kısa ömürlü bağlantı noktaları, Genel IP adresi olmayan Tek Başına VM ve Genel IP adresi olmayan Yük dengeli VM'de açıklandığı gibi, tükenebilir bir kaynaktır. Bu kılavuzu kullanarak kısa ömürlü bağlantı noktası kullanımınızı izleyebilir ve SNAT tükenmesi riskini belirlemek için geçerli ayırmanız ile karşılaştırabilirsiniz.

Aynı hedef IP adresine ve bağlantı noktasına çok sayıda giden TCP veya UDP bağlantısı başlatıyorsanız ve giden bağlantıların başarısız olduğunu gözlemler veya SNAT bağlantı noktalarını (PATtarafından kullanılan önceden bağımsız kısa ömürlü bağlantı noktaları) tüketmeniz önerilirse, çeşitli genel risk azaltma seçenekleriniz vardır. Bu seçenekleri gözden geçirin ve senaryo için kullanılabilir ve en iyi seçenekleri belirleyin. Bu senaryonun yönetimine bir veya daha fazla yardımcı olabilir.

Giden bağlantı davranışını anlama konusunda sorun kullanıyorsanız IP yığını istatistiklerini (netstat) kullanabilirsiniz. Veya paket yakalamalarını kullanarak bağlantı davranışlarını gözlemlemek yararlı olabilir. Bu paket yakalamalarını örneğinizin konuk işletim sistemi içinde gerçekleştirebilirsiniz veya paket yakalama için Ağ İzleme'yi kullanabilirsiniz.

VM başına SNAT bağlantı noktalarını en üst düzeye çıkarmak için SNAT bağlantı noktalarını el ile ayırma

Önceden ayrılmış bağlantı noktalarında tanımlandığıgibi, yük dengeleyici arka uçta vm sayısına göre bağlantı noktalarını otomatik olarak ayırır. Varsayılan olarak, ölçeklenebilirliği sağlamak için bu, tutucu bir şekilde yapılır. Arka uçta en fazla VM'niz olduğunu biliyorsanız, her giden kuralda SNAT bağlantı noktalarını el ile ayırabilirsiniz. Örneğin, en fazla 10 VM'miz olduğunu biliyorsanız, vm başına varsayılan 1.024 yerine 6.400 SNAT bağlantı noktası ayırabilirsiniz.

Uygulamayı bağlantıları yeniden kullanmak için değiştirme

Uygulamanıza bağlantıları yeniden kullanarak SNAT için kullanılan kısa ömürlü bağlantı noktalarına olan talebi azaltabilirsiniz. Bağlantı yeniden kullanımı özellikle HTTP/1.1 gibi protokoller için kullanılır; burada bağlantı yeniden kullanımı varsayılan değerdir. Aktarım olarak HTTP kullanan diğer protokoller de (örneğin REST) bundan yararlanabilir.

Yeniden kullanma her zaman her istek için ayrı, atomik TCP bağlantılardan daha iyidir. Sonuçları yeniden kullanmak daha yüksek performansa sahip, çok verimli TCP işlemlerine neden olur.

Uygulamayı bağlantı havuzu kullanmak üzere değiştirme

Uygulamanıza, isteklerin sabit bir bağlantı kümesine (her biri mümkün olduğunca yeniden kullanılır) dahili olarak dağıtıldıkları bir bağlantı havuzu düzeni çalıştırabilirsiniz. Bu düzen, kullanımda kısa ömürlü bağlantı noktası sayısını kısıtlar ve daha öngörülebilir bir ortam oluşturur. Bu düzen, bir işlem yanıtını tek bir bağlantı engelleyerek birden çok eşzamanlı işleme izin vererek isteklerin aktarım hızını da artırabilir.

Bağlantı havuzu, uygulama geliştirmek için kullanmakta olduğu çerçevede veya uygulama yapılandırma ayarlarında zaten mevcut olabilir. Bağlantı havuzunu bağlantı yeniden kullanımıyla birleştirebilirsiniz. Birden çok isteğiniz daha sonra aynı hedef IP adresine ve bağlantı noktasına sabit, tahmin edilebilir sayıda bağlantı noktası tüketir. İstekler, TCP işlemlerinin verimli bir şekilde kullanılmasından da faydalanarak gecikme süresini ve kaynak kullanımını azaltıyor. UDP akışlarının sayısı yöneterek tükenme koşullarını önleyene ve SNAT bağlantı noktası kullanımını yönetebiçimlerinden dolayı UDP işlemleri de faydalı olabilir.

Uygulamayı daha az agresif yeniden deneme mantığı kullanmak üzere değiştirme

PAT için kullanılan önceden bağımsız kısa ömürlü bağlantı noktaları tükenmişse veya uygulama hataları oluştuğunda, bozulma ve geri kesme mantığı olmadan agresif veya deneme yanılma yeniden denemeleri tükenmenin meydana veya kalıcılığa neden olur. Daha az agresif bir yeniden deneme mantığı kullanarak kısa ömürlü bağlantı noktalarına yönelik talebi azaltabilirsiniz.

Kısa ömürlü bağlantı noktaları 4 dakikalık boşta kalma zaman aşımına sahiptir (ayarlanabilir değildir). Yeniden denemeler çok agresifse, tükenmenin kendi kendine temizlen şansı yoktur. Bu nedenle, uygulamanın işlemleri nasıl ve ne sıklıkta yeniden denemesi tasarımın kritik bir parçası olduğunu göz önünde bulundurarak.

Her VM'ye Genel IP atama

Genel IP adresi atamak, senaryoyu vm'ye Genel IP olarak değiştirir. Her VM için kullanılan genel IP'nin tüm kısa ömürlü bağlantı noktaları VM'de kullanılabilir. (Genel IP'nin kısa ömürlü bağlantı noktalarının ilgili arka uç havuzuyla ilişkili tüm VM'lerle paylaşılır olduğu senaryoların aksine.) Genel IP adreslerinin ek maliyeti ve çok sayıda ayrı IP adresini filtrelemenin olası etkisi gibi dikkate almaları gereken bazı olumsuz etkiler vardır.

Not

Bu seçenek web çalışanı rolleri için kullanılamaz.

Birden çok ön uç kullanma

Genel ağ Standart Load Balancer giden bağlantılar için birden çok ön uç IP adresi atar ve kullanılabilir SNAT bağlantı noktası sayısını çarpın. SNAT programlamayı ön ucun genel IP'sinde tetiklemek için bir ön uç IP yapılandırması, kuralı ve arka uç havuzu oluşturun. Kuralın çalışması ve durum yoklamalarının başarılı olması gerek değildir. Gelen için de birden çok ön uç kullanıyorsanız (yalnızca giden için değil), güvenilirlik sağlamak için özel durum yoklamalarını da kullansanız iyi olur.

Not

Çoğu durumda, SNAT bağlantı noktalarının tükenmesi kötü bir tasarımın işaretidir. SNAT bağlantı noktaları eklemek için daha fazla ön uç kullanmadan önce bağlantı noktalarını neden tükettiysiniz? Daha sonra hataya neden olan bir sorunu maskeleme durumundayabilirsiniz.

Ölçeğin ölçeğini dışarı

Önceden bulunan bağlantı noktaları arka uç havuzu boyutuna göre atanır ve bir sonraki büyük arka uç havuzu boyutu katmanına uyum sağlayacak şekilde bazı bağlantı noktalarının yeniden tahsis edilmesi gerekmesi durumunda kesintiyi en aza indirmek için katmanlara gruplanarak atanır. Arka uç havuzlarınızı verilen bir katman için maksimum boyuta ölçeklendirerek, verilen ön uç için SNAT bağlantı noktası kullanımını artırma seçeneğiniz olabilir. Varsayılan bağlantı noktası ayırmanın, uygulamanın SNAT tükenmesi riski olmadan verimli bir şekilde ölçeğini uzdurma açısından gerekli olduğunu unutmayın.

Örneğin, arka uç havuzunda iki sanal makine IP yapılandırması başına 1024 SNAT bağlantı noktası kullanabilir ve dağıtım için toplam 2048 SNAT bağlantı noktası sağlar. Dağıtımın 50 sanal makineye artırılmış olması halinde, önceden kaynaklandırılmış bağlantı noktası sayısı sanal makine başına sabit kalırken, dağıtım tarafından toplam 51.200 (50 x 1024) SNAT bağlantı noktası kullanılabilir. Dağıtımınızı ölçeklendirmek isterseniz, ilgili katman için ölçeği en üst düzeye doğru şekillendirin emin olmak için katman başına önceden yerel olarak yer alan bağlantı noktası sayısını kontrol edin. Önceki örnekte, ölçeği 50 örnek yerine 51'e ölçeklendirmeyi seçtiy olsaydınız bir sonraki katmana ilerler ve sanal makine başına ve toplamda daha az SNAT bağlantı noktası ile sonuçlanırdı.

Ölçeği bir sonraki daha büyük arka uç havuzu boyutu katmanına ölçeklendirecek olursanız, ayrılan bağlantı noktalarının yeniden tahsisi gerekirse giden bağlantılardan bazılarının zaman dışında olması olasıdır. Yalnızca bazı SNAT bağlantı noktalarınızı kullanıyorsanız, ölçeği bir sonraki büyük arka uç havuzu boyutu arasında genişletme zamansız olur. Mevcut bağlantı noktalarının yarısı, bir sonraki arka uç havuzu katmanına her taşımada yeniden bulunur. Bunu yapmak istemiyorsanız, dağıtımınızı katman boyutuna göre şekillendirmeniz gerekir. Veya uygulamanın gerektiğinde algılayana ve yeniden denemeye devam olduğundan emin olun. TCP koruyucuları, yeniden konumlandırılan SNAT bağlantı noktalarının artık çalışmama zamanlarını algılamaya yardımcı olabilir.

Giden boşta kalma zaman aşımını sıfırlamak için tutmaları kullanma

Giden bağlantıların 4 dakikalık boşta kalma zaman aşımı vardır. Bu zaman aşımı Giden kuralları aracılığıyla ayarlanabilir. Boştaki bir akışı yenilemek ve gerekirse bu boşta kalma zaman aşımını sıfırlamak için aktarım (örneğin, TCP keepalives) veya uygulama katmanı tutmaları da kullanabilirsiniz.

TCP keepalives kullanırken, bağlantının bir tarafında bunları etkinleştirmek yeterlidir. Örneğin, bunları yalnızca akışın boşta zamanlayıcıyı sıfırlamak için sunucu tarafında etkinleştirmek yeterlidir ve her iki tarafın da TCP keepalives başlatması gerekli değildir. Veritabanı istemci-sunucu yapılandırmaları da dahil olmak üzere uygulama katmanı için de benzer kavramlar vardır. Uygulamaya özgü keepalive'lar için mevcut seçenekler için sunucu tarafını kontrol edin.

Sonraki Adımlar

Her zaman müşterilerimizin deneyimini geliştirmek için çalışıyoruz. Bu makalede listelenmezse veya çözümlenmezse giden bağlantıyla ilgili sorunlar yaşıyorsanız, bu sayfanın alt kısmından GitHub üzerinden geri bildirim gönderin. Geri bildiriminizi en kısa zamanda ele aacağız.