Felsöka Azure Load Balancer problem med utgående anslutningar

Lär dig felsökningsvägledning för utgående anslutningar i Azure Load Balancer. Detta omfattar förståelse för källnätverksadressöversättning (SNAT) och den påverkar anslutningar, använder enskilda offentliga IP-adresser på virtuella datorer och utformar program för anslutningseffektivitet för att undvika SNAT-portöverbelastning. De flesta problem med utgående anslutningar som kunderna upplever beror på SNAT-portöverbelastning och tidsgränser för anslutningar som leder till förlorade paket.

Mer information om SNAT-portar finns i Källnätverksadressöversättning för utgående anslutningar.

Förstå din SNAT-portanvändning

Följ standarddiagnostik för lastbalanserare med mått, aviseringar och resurshälsa för att övervaka den befintliga lastbalanserarens användning och allokering av SNAT-portar. Övervaka för att bekräfta eller fastställa risken för SNAT-överbelastning. Om du har problem med att förstå ditt beteende för utgående anslutningar använder du IP-stackstatistik (netstat) eller samlar in infångade paket. Du kan utföra dessa paketinsamlingar i gästoperativsystemet för din instans eller använda Network Watcher för infångade paket. I de flesta fall rekommenderar Azure att du använder en NAT-gateway för utgående anslutning för att minska risken för SNAT-överbelastning. En NAT-gateway rekommenderas starkt om tjänsten initierar upprepade utgående TCP- eller UDP-anslutningar till samma mål.

Optimera dina Azure-distributioner för utgående anslutningar

Det är viktigt att optimera dina Azure-distributioner för utgående anslutningar. Optimering kan förhindra eller lindra problem med utgående anslutningar.

Distribuera NAT-gateway för utgående Internetanslutning

Azure NAT Gateway är en mycket motståndskraftig och skalbar Azure-tjänst som ger utgående anslutning till Internet från ditt virtuella nätverk. En NAT-gateways unika metod för att använda SNAT-portar hjälper till att lösa vanliga problem med SNAT-överbelastning och anslutning. Mer information om Azure NAT Gateway finns i Vad är Azure NAT Gateway?.

  • Hur minskar en NAT-gateway risken för SNAT-portöverbelastning?

    Azure Load Balancer allokerar fasta mängder SNAT-portar till varje virtuell datorinstans i en serverdelspool. Den här allokeringsmetoden kan leda till SNAT-överbelastning, särskilt om ojämna trafikmönster resulterar i att en specifik virtuell dator skickar en större mängd utgående anslutningar. Till skillnad från lastbalanserare allokerar en NAT-gateway dynamiskt SNAT-portar över alla VM-instanser i ett undernät.

    En NAT-gateway gör tillgängliga SNAT-portar tillgängliga för varje instans i ett undernät. Med den här dynamiska allokeringen kan virtuella datorinstanser använda det antal SNAT-portar som varje behöver från den tillgängliga portpoolen för nya anslutningar. Den dynamiska allokeringen minskar risken för SNAT-överbelastning.

    Diagram över Azure Load Balancer jämfört med Azure NAT Gateway.

  • Beteende för val och återanvändning av portar.

    En NAT-gateway väljer slumpmässiga portar från den tillgängliga portpoolen. Om det inte finns några tillgängliga portar återanvänds SNAT-portar så länge det inte finns någon befintlig anslutning till samma offentliga mål-IP och port. Det här beteendet för val och återanvändning av portar för en NAT-gateway gör det mindre troligt att anslutningen överskrider tidsgränsen.

    Mer information om hur SNAT och portanvändning fungerar för NAT-gateway finns i grunderna i SNAT. Det finns några villkor där du inte kan använda NAT-gateway för utgående anslutningar. Mer information om begränsningar för NAT-gateway finns i BEGRÄNSNINGAR för NAT Gateway.

    Om du inte kan använda en NAT-gateway för utgående anslutning läser du de andra migreringsalternativen som beskrivs i den här artikeln.

Konfigurera regler för utgående lastbalanserare för att maximera SNAT-portar per virtuell dator

Om du använder en offentlig standardlastbalanserare och upplever SNAT-överbelastning eller anslutningsfel kontrollerar du att du använder regler för utgående trafik med manuell portallokering. Annars förlitar du dig förmodligen på lastbalanserarens standardåtkomst för utgående trafik. Utgående standardåtkomst allokerar automatiskt ett konservativt antal portar, vilket baseras på antalet instanser i serverdelspoolen. Utgående standardåtkomst är inte en rekommenderad metod för att aktivera utgående anslutningar. När serverdelspoolen skalas kan anslutningarna påverkas om portarna behöver omallokeras.

Mer information om utgående standardåtkomst och standardportallokering finns i Källnätverksadressöversättning för utgående anslutningar.

Om du vill öka antalet tillgängliga SNAT-portar per virtuell dator konfigurerar du regler för utgående trafik med manuell portallokering på lastbalanseraren. Om du till exempel vet att du har högst 10 virtuella datorer i serverdelspoolen kan du allokera upp till 6 400 SNAT-portar per virtuell dator i stället för standardvärdet 1 024. Om du behöver fler SNAT-portar kan du lägga till flera IP-adresser på klientsidan för utgående anslutningar för att multiplicera antalet tillgängliga SNAT-portar. Se till att du förstår varför du tar slut på SNAT-portar innan du lägger till fler IP-adresser i klientdelen.

Detaljerad vägledning finns i Utforma dina program för att använda anslutningar effektivt senare i den här artikeln. Om du vill lägga till fler IP-adresser för utgående anslutningar skapar du en IP-konfiguration för klientdelen för varje ny IP-adress. När regler för utgående trafik har konfigurerats kan du välja flera IP-konfigurationer för klientdelen för en serverdelspool. Vi rekommenderar att du använder olika IP-adresser för inkommande och utgående anslutningar. Olika IP-adresser isolerar trafik för förbättrad övervakning och felsökning.

Konfigurera en enskild offentlig IP-adress på en virtuell dator

För distributioner i mindre skala kan du tilldela en offentlig IP-adress till en virtuell dator. Om en offentlig IP-adress tilldelas till en virtuell dator är alla portar som tillhandahålls av den offentliga IP-adressen tillgängliga för den virtuella datorn. Till skillnad från en lastbalanserare eller en NAT-gateway är portarna endast tillgängliga för den enskilda virtuella dator som är associerad med IP-adressen.

Vi rekommenderar starkt att du överväger att använda NAT-gatewayen i stället, eftersom tilldelning av enskilda offentliga IP-adresser inte är en skalbar lösning.

Anteckning

Om du behöver ansluta ditt virtuella Azure-nätverk till Azure PaaS-tjänster som Azure Storage, Azure SQL, Azure Cosmos DB eller andra tillgängliga Azure-tjänster kan du använda Azure Private Link för att undvika SNAT helt. Azure Private Link skickar trafik från ditt virtuella nätverk till Azure-tjänster via Azure-stamnätverket i stället för via Internet.

Private Link är det rekommenderade alternativet för tjänstslutpunkter för privat åtkomst till Azure-värdbaserade tjänster. Mer information om skillnaden mellan Private Link och tjänstslutpunkter finns i Jämför privata slutpunkter och tjänstslutpunkter.

Utforma anslutningseffektiva program

När du utformar dina program bör du se till att de använder anslutningar effektivt. Anslutningseffektivitet kan minska eller eliminera SNAT-portöverbelastning i dina distribuerade program.

Ändra programmet så att det återanvänder anslutningar

I stället för att generera enskilda atomiska TCP-anslutningar för varje begäran rekommenderar vi att du konfigurerar programmet för att återanvända anslutningar. Återanvändning av anslutningar resulterar i mer högpresterande TCP-transaktioner och är särskilt relevant för protokoll som HTTP/1.1, där återanvändning av anslutningar är standard. Den här återanvändningen gäller för andra protokoll som använder HTTP som transport, till exempel REST.

Ändra programmet så att det använder anslutningspooler

Använd ett schema för anslutningspooler i ditt program, där begäranden distribueras internt över en fast uppsättning anslutningar och återanvänds när det är möjligt. Det här schemat begränsar antalet SNAT-portar som används och skapar en mer förutsägbar miljö.

Det här schemat kan öka dataflödet för begäranden genom att tillåta flera samtidiga åtgärder när en enda anslutning blockerar svaret på en åtgärd.

Anslutningspooler kanske redan finns inom det ramverk som du använder för att utveckla ditt program eller konfigurationsinställningarna för ditt program. Du kan kombinera anslutningspooler med återanvändning av anslutningar. Dina flera begäranden använder sedan ett fast, förutsägbart antal portar till samma mål-IP-adress och port.

Begäranden drar nytta av effektiv användning av TCP-transaktioner, vilket minskar svarstiden och resursutnyttjandet. UDP-transaktioner kan också vara till nytta. Hanteringen av antalet UDP-flöden kan undvika avgastillstånd och hantera SNAT-portanvändningen.

Ändra programmet så att det använder mindre aggressiv omförsökslogik

När SNAT-portar är slut eller programfel uppstår, orsakar aggressiva eller råstyrkeåterförsök utan förfall och backoff-logik att överbelastning uppstår eller kvarstår. Du kan minska efterfrågan på SNAT-portar med hjälp av en mindre aggressiv logik för återförsök.

Beroende på den konfigurerade tidsgränsen för inaktivitet har anslutningarna kanske inte tillräckligt med tid för att stänga och släppa SNAT-portar för återanvändning om återförsöken är för aggressiva.

Använd keepalives för att återställa tidsgränsen för utgående inaktivitet

Regler för utgående lastbalanserare har som standard en tidsgräns på 4 minuters inaktivitet som kan justeras upp till 100 minuter. Du kan använda TCP keepalives för att uppdatera ett inaktivt flöde och återställa den här tidsgränsen för inaktivitet om det behövs. När du använder TCP keepalives räcker det att aktivera dem på ena sidan av anslutningen.

Det räcker till exempel att aktivera dem på serversidan endast för att återställa den inaktiva timern för flödet och det är inte nödvändigt för båda sidor att initiera TCP keepalives. Det finns liknande begrepp för programlager, inklusive klient-serverkonfigurationer för databaser. Kontrollera på serversidan vilka alternativ som finns för programspecifika keepalives.

Nästa steg

Mer information om SNAT-portöverbelastning, utgående anslutningsalternativ och standardåtkomst för utgående trafik finns i: