Dela via


Felsöka utgående anslutningsproblem med Azure Load Balancer

Lär dig felsökningsvägledning för utgående anslutningar i Azure Load Balancer. Detta omfattar att förstå källnätverksadressöversättning (SNAT) och dess inverkan på anslutningar, använda enskilda offentliga IP-adresser på virtuella datorer och utforma program för anslutningseffektivitet för att undvika SNAT-portöverbelastning. De flesta problem med utgående anslutning som kunderna upplever beror på SNAT-portöverbelastning och tidsgränser för anslutningar som leder till borttagna 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 din befintliga lastbalanserares SNAT-portanvändning och allokering. Ö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 anslutning kan du använda IP-stackstatistik (netstat) eller samla in paketinsamlingar. Du kan utföra dessa paketinsamlingar i gästoperativsystemet för din instans eller använda Network Watcher för paketinsamling. I de flesta scenarier 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 anslutning

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

Distribuera NAT-gateway för utgående Internetanslutning

Azure NAT Gateway är en mycket elastisk och skalbar Azure-tjänst som tillhandahåller 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 högre 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 antalet 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-adress och port. Det här portvals- och återanvändningsbeteendet för en NAT-gateway gör det mindre troligt att anslutningen överskrids.

    Mer information om hur SNAT- och portanvändning fungerar för NAT-gateway finns i grunderna för 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 kan du läsa 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 utgående regler med manuell portallokering. Annars förlitar du dig förmodligen på lastbalanserarens standardportallokering. Standardportallokering tilldelar automatiskt ett konservativt antal portar, vilket baseras på antalet instanser i serverdelspoolen. Standardportallokering är inte en rekommenderad metod för att aktivera utgående anslutningar. När serverdelspoolen skalar kan dina anslutningar påverkas om portarna behöver omallokeras.

Mer information om 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 utgående regler 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 i klientdelen för utgående anslutningar för att multiplicera antalet tillgängliga SNAT-portar. Se till att du förstår varför du överbelastar SNAT-portar innan du lägger till fler IP-adresser i klientdelen.

Detaljerad vägledning finns i Designa 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 utgående regler 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 anslutning. 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 överväga att 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 datorn som är associerad med IP-adressen.

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

Kommentar

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 över 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. Återanvändning 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 uttömda eller programfel uppstår, orsakar aggressiva eller råstyrkeförsök utan sönderfall och back-off-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 anslutningar 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 en tidsgräns på 4 minuter för inaktivitet som standard som kan justeras upp till 100 minuter. Du kan använda TCP keepalives för att uppdatera ett inaktivt flöde och återställa 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. Liknande begrepp finns för programskiktet, inklusive databasklientserverkonfigurationer. Kontrollera på serversidan vilka alternativ som finns för programspecifika keepalives.

Nästa steg

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