Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Dit artikel bevat informatie over het oplossen van veelvoorkomende problemen met het configureren van serverexemplaren voor AlwaysOn-beschikbaarheidsgroepen. Veelvoorkomende configuratieproblemen zijn onder andere AlwaysOn-beschikbaarheidsgroepen zijn uitgeschakeld, accounts zijn onjuist geconfigureerd, het eindpunt voor databasespiegeling bestaat niet, het eindpunt is niet toegankelijk (SQL Server-fout 1418), netwerktoegang bestaat niet en er mislukt een opdracht voor de joindatabase (SQL Server-fout 35250).
Opmerking
Zorg ervoor dat u voldoet aan de vereisten voor AlwaysOn-beschikbaarheidsgroepen. Zie Prerequisites, beperkingen en aanbevelingen voor Always On beschikbaarheidsgroepen (SQL Server) voor meer informatie.
In dit onderwerp:
| Afdeling | Beschrijving |
|---|---|
| AlwaysOn-beschikbaarheidsgroepen zijn niet ingeschakeld | Als een exemplaar van SQL Server niet is ingeschakeld voor AlwaysOn-beschikbaarheidsgroepen, biedt het exemplaar geen ondersteuning voor het maken van beschikbaarheidsgroepen en kan het geen beschikbaarheidsreplica's hosten. |
| Rekeningen | Beschrijft de vereisten voor het correct configureren van de accounts waaronder SQL Server wordt uitgevoerd. |
| Eindpunten | Bij dit onderwerp wordt beschreven hoe u problemen met het eindpunt voor databasespiegeling van een serverexemplaar kunt vaststellen. |
| Netwerktoegang | Documenteert de vereiste dat elke serverinstantie die een replica van beschikbaarheid host, toegang moet hebben tot de poort van elke andere serverinstantie via TCP. |
| Luisteraar | Documentatie over het vaststellen van het IP-adres en de poort van de listener en ervoor zorgen dat het actief is en luistert naar binnenkomende verbindingen. |
| Eindpunttoegang (SQL Server-fout 1418) | Bevat informatie over dit SQL Server-foutbericht. |
| Join-database mislukt (SQL Server-fout 35250) | Bespreekt de mogelijke oorzaken en oplossing van een fout bij het toevoegen van secundaire databases aan een beschikbaarheidsgroep, omdat de verbinding met de primaire replica niet actief is. |
| Read-Only routing werkt niet correct | |
| Gerelateerde taken | Bevat een lijst met taakgerichte artikelen in SQL Server Books Online die relevant zijn voor het oplossen van problemen met een configuratie van een beschikbaarheidsgroep. |
| gerelateerde inhoud | Bevat een lijst met relevante resources die extern zijn voor SQL Server Books Online. |
AlwaysOn-beschikbaarheidsgroepen zijn niet ingeschakeld
De functie AlwaysOn-beschikbaarheidsgroepen moet zijn ingeschakeld op elk van de exemplaren van SQL Server.
Als de functie AlwaysOn-beschikbaarheidsgroepen niet is ingeschakeld, wordt dit foutbericht weergegeven wanneer u probeert een beschikbaarheidsgroep te maken op SQL Server.
The Always On Availability Groups feature must be enabled for server instance 'SQL1VM' before you can create an availability group on this instance. To enable this feature, open the SQL Server Configuration Manager, select SQL Server Services, right-click on the SQL Server service name, select Properties, and use the Always On Availability Groups tab of the Server Properties dialog. Enabling Always On Availability Groups may require that the server instance is hosted by a Windows Server Failover Cluster (WSFC) node. (Microsoft.SqlServer.Management.HadrTasks)
Het foutbericht geeft duidelijk aan dat de ag-functie niet is ingeschakeld en u ook wordt omaangegeven hoe u deze kunt inschakelen. Er zijn twee scenario's waarin u zich in deze staat kunt bevinden, naast de voor de hand liggende scenario's waarbij AG niet in de eerste plaats was ingeschakeld.
- Als SQL Server is geïnstalleerd en de functie AlwaysOn-beschikbaarheidsgroepen is ingeschakeld voordat u de functie Windows-failoverclustering hebt geïnstalleerd, krijgt u mogelijk deze fout wanneer u probeert een AlwaysOn-beschikbaarheidsgroep te maken.
- Als u een bestaande Windows Failover Clustering-functie verwijdert en opnieuw opbouwt terwijl SQL Server nog steeds AlwaysOn heeft geconfigureerd, kan deze fout optreden wanneer u ag opnieuw probeert te gebruiken.
In dergelijke gevallen kunt u de volgende stappen uitvoeren om dit op te lossen:
- De functie AG uitschakelen
- Start de SQL Server-service opnieuw
- De AG-functie weer inschakelen
- Start de SQL-service opnieuw op
Zie AlwaysOn-beschikbaarheidsgroepen (SQL Server) in- en uitschakelen voor meer informatie.
Accounts
De accounts waaronder SQL Server wordt uitgevoerd, moeten correct zijn geconfigureerd.
Hebben de accounts de juiste machtigingen?
Als de partners onder hetzelfde domeinaccount werken, bestaan de juiste gebruikersaanmeldingen automatisch in beide hoofddatabases. Dit vereenvoudigt de beveiligingsconfiguratie en wordt aanbevolen.
Als twee serverexemplaren onder verschillende accounts worden uitgevoerd, moet elk account in de master op het exemplaar van de externe server worden aangemaakt, en moet aan die server-principal CONNECT-machtigingen worden verleend om verbinding te maken met het databasespiegelingseindpunt van dat serverexemplaar. Zie voor meer informatie Aanmeldingsaccounts instellen voor databasespiegeling of AlwaysOn-beschikbaarheidsgroepen (SQL Server). U kunt de volgende query op elk exemplaar gebruiken om te controleren of de logins CONNECT-machtigingen hebben.
SELECT perm.class_desc, prin.name, perm.permission_name, perm.state_desc, prin.type_desc as PrincipalType, prin.is_disabled FROM sys.server_permissions perm LEFT JOIN sys.server_principals prin ON perm.grantee_principal_id = prin.principal_id LEFT JOIN sys.tcp_endpoints tep ON perm.major_id = tep.endpoint_id WHERE perm.class_desc = 'ENDPOINT' AND perm.permission_name = 'CONNECT' AND tep.type = 4Als SQL Server wordt uitgevoerd onder een ingebouwd account, zoals lokaal systeem, lokale service of netwerkservice of een niet-domeinaccount, moet u certificaten gebruiken voor eindpuntverificatie. Als uw serviceaccounts domeinaccounts in hetzelfde domein gebruiken, kunt u ervoor kiezen om CONNECT-toegang te verlenen voor elk serviceaccount op alle replicalocaties of u kunt certificaten gebruiken. Zie Certificaten gebruiken voor een eindpunt voor databasespiegeling (Transact-SQL) voor meer informatie.
Eindpunten
Eindpunten moeten correct zijn geconfigureerd.
Zorg ervoor dat elk exemplaar van SQL Server dat een beschikbaarheidsreplica (elke replicalocatie) host, een eindpunt voor databasespiegeling heeft. Als u wilt bepalen of een eindpunt voor databasespiegeling bestaat op een bepaald serverexemplaar, gebruikt de sys.database_mirroring_endpoints catalogusweergave:
SELECT name, state_desc FROM sys.database_mirroring_endpointsZie Voor meer informatie over het maken van eindpunten een databasespiegelingseindpunt maken voor Windows-verificatie (Transact-SQL) of toestaan dat een databasespiegelingseindpunt certificaten gebruikt voor uitgaande verbindingen (Transact-SQL).
Controleer of de poortnummers juist zijn.
Gebruik de volgende Transact-SQL instructie om de poort te identificeren die momenteel is gekoppeld aan het eindpunt voor databasespiegeling van een serverexemplaar:
SELECT type_desc, port FROM sys.tcp_endpoints; GOVoor problemen met het instellen van Always On-beschikbaarheidsgroepen die moeilijk uit te leggen zijn, raden we u aan om elk serverexemplaar te inspecteren om te bepalen of die luistert op de juiste poorten.
Zorg ervoor dat de eindpunten gestart zijn (STATE=STARTED). Gebruik op elk serverexemplaar de volgende Transact-SQL-instructie:
SELECT state_desc FROM sys.database_mirroring_endpointsZie sys.database_mirroring_endpoints (Transact-SQL) voor meer informatie over de kolom state_desc.
Gebruik de volgende Transact-SQL instructie om een eindpunt te starten:
ALTER ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = <port_number>) FOR database_mirroring (ROLE = ALL); GOZie ALTER ENDPOINT (Transact-SQL)voor meer informatie.
Opmerking
In sommige gevallen, als het eindpunt wordt gestart maar de AG-replica's niet communiceren, moet u proberen het eindpunt te stoppen en opnieuw te starten. U kunt ALTER ENDPOINT [Endpoint_Mirroring] STATE = GESTOPT gebruiken, gevolgd door ALTER ENDPOINT [Endpoint_Mirroring] STATE = GESTART
Zorg ervoor dat de aanmelding van de andere server de CONNECT-machtiging heeft. Als u wilt bepalen wie CONNECT-toestemming heeft voor een endpoint, gebruikt u op elke serverexemplaar de volgende Transact-SQL-instructie:
SELECT 'Metadata Check'; SELECT EP.name, SP.STATE, CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) AS GRANTOR, SP.TYPE AS PERMISSION, CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) AS GRANTEE FROM sys.server_permissions SP , sys.endpoints EP WHERE SP.major_id = EP.endpoint_id ORDER BY Permission,grantor, grantee;Zorg ervoor dat de juiste servernaam wordt gebruikt in de eindpunt-URL
Voor servernaam in een eindpunt-URL is het raadzaam om FQDN (Fully Qualified Domain Name) te gebruiken, hoewel u elke naam kunt gebruiken die de computer uniek identificeert. Het serveradres kan een Netbios-naam zijn (als de systemen zich in hetzelfde domein bevinden), een FQDN (Fully Qualified Domain Name) of een IP-adres (bij voorkeur een statisch IP-adres). Het gebruik van de volledig gekwalificeerde domeinnaam is de aanbevolen optie.
Als u al een eindpunt-URL hebt gedefinieerd, kunt u er query's op uitvoeren met behulp van:
select endpoint_url from sys.availability_replicasVergelijk vervolgens de endpoint_url-uitvoer met de servernaam (NetBIOS-naam of FQDN). Als u een query wilt uitvoeren op de servernaam, voert u de volgende opdrachten lokaal uit in een PowerShell op de replica:
$env:COMPUTERNAME [System.Net.Dns]::GetHostEntry([string]$env:computername).HostNameAls u de servernaam op een externe computer wilt valideren, voert u deze opdracht uit vanuit PowerShell.
$servername_from_endpoint_url = "server_from_endpoint_url_output" Test-NetConnection -ComputerName $servername_from_endpoint_urlZie De eindpunt-URL opgeven bij het toevoegen of wijzigen van een beschikbaarheidsreplica (SQL Server)voor meer informatie.
Opmerking
Als u Kerberos-verificatie wilt gebruiken voor de communicatie tussen beschikbaarheidsgroepeindpunten (AG), registreert u een Service Principal Name voor Kerberos-verbindingen voor de eindpunten voor databasespiegeling die door de AG worden gebruikt.
Netwerktoegang
Elk serverexemplaar dat als host fungeert voor een beschikbaarheidsreplica moet toegang hebben tot de poort van elke andere serverexemplaar via TCP. Dit is vooral belangrijk als de serverexemplaren zich in verschillende domeinen bevinden die elkaar niet vertrouwen (niet-vertrouwde domeinen). Controleer of u verbinding kunt maken met de eindpunten door de volgende stappen uit te voeren:
Gebruik Test-NetConnection (equivalent aan Telnet) om de connectiviteit te valideren. Hier volgen enkele voorbeelden van opdrachten die u kunt gebruiken:
$server_name = "your_server_name" $IP_address = "your_ip_address" $port_number = "your_port_number" Test-NetConnection -ComputerName $server_name -Port $port_number Test-NetConnection -ComputerName $IP_address -Port $port_numberAls het eindpunt luistert en de verbinding is geslaagd, ziet u 'TcpTestSucceeded: True'. Zo niet, dan ontvangt u een 'TcpTestSucceededed : False'.
Als Test-NetConnection (Telnet)-verbinding met het IP-adres werkt, maar niet met de ServerName, is er waarschijnlijk een probleem met DNS- of naamomzetting
Als de verbinding werkt op ServerName en niet op IP-adres, kan er meer dan één eindpunt zijn gedefinieerd op die server (mogelijk een ander SQL-exemplaar) dat op die poort luistert. Hoewel de status van de endpoint op het betreffende exemplaar 'GESTART' aangeeft, kan een ander exemplaar de poort bezet hebben en voorkomen dat het correcte exemplaar kan luisteren en TCP-verbindingen tot stand kan brengen.
Als Test-NetConnection geen verbinding kan maken, zoekt u naar firewall- en/of antivirussoftware die mogelijk de betreffende eindpuntpoort blokkeert. Controleer de firewallinstelling om te zien of de eindpuntpoortcommunicatie tussen de serverexemplaren waarop primaire replica en de secundaire replica worden gehost (standaard poort 5022) is toegestaan. Voer het volgende PowerShell-script uit om te onderzoeken op uitgeschakelde regels voor inkomend verkeer
Als u SQL Server uitvoert op azure-VM, moet u er ook voor zorgen dat netwerkbeveiligingsgroep (NSG) het verkeer naar de eindpuntpoort toestaat. Controleer de firewallinstelling (en NSG, voor Azure VM) om te zien of de eindpuntpoortcommunicatie tussen de serverexemplaren waarop primaire replica en de secundaire replica worden gehost (standaard poort 5022) is toegestaan
Get-NetFirewallRule -Action Block -Enabled True -Direction Inbound |Format-TableLeg de uitvoer van de Get-NetTCPConnection-cmdlet vast (het equivalent van NETSTAT -a) en controleer of de status op de opgegeven IP:Poort voor het eindpunt op LISTENING of ESTABLISHED staat.
Get-NetTCPConnection
Listener
Voor de juiste configuratie van een listener voor een beschikbaarheidsgroep volgt u 'Een listener configureren voor een AlwaysOn-beschikbaarheidsgroep'
Zodra de listener is geconfigureerd, kunt u het IP-adres en de poort valideren waarop het luistert met behulp van de volgende query:
$server_name = $env:computername #replace this with your sql instance "server\instance" sqlcmd -E -S$server_name -Q"SELECT dns_name AS AG_listener_name, port, ip_configuration_string_from_cluster FROM sys.availability_group_listeners"U kunt de listener-informatie ook samen met de SQL Server-poorten vinden met behulp van deze query:
$server_name = $env:computername #replace this with your sql instance "server\instance" sqlcmd -E -S($server_name) -Q("SELECT convert(varchar(32), SERVERPROPERTY ('servername')) servername, convert(varchar(32),ip_address) ip_address, port, type_desc,state_desc, start_time FROM sys.dm_tcp_listener_states WHERE ip_address not in ('127.0.0.1', '::1') and type <> 2")Als u verbinding wilt maken met de listener en vermoedt dat een poort is geblokkeerd, kunt u een test uitvoeren met behulp van de PowerShell-cmdlet Test-NetConnection (vergelijkbaar met telnet).
$listener_name = "your_ag_listener" $IP_address = "your_ip_address" $port_number = "your_port_number" Test-NetConnection -ComputerName $listener_name -Port $port_number Test-NetConnection -ComputerName $IP_address -Port $port_numberControleer ten slotte of de listener luistert op de opgegeven poort:
$port_number = "your_port_number" Get-NetTCPConnection -LocalPort $port_number -State Listen
Eindpunttoegang (SQL Server-fout 1418)
Dit SQL Server-bericht geeft aan dat het netwerkadres van de server dat is opgegeven in de eindpunt-URL niet kan worden bereikt of niet bestaat en dat u de naam van het netwerkadres controleert en de opdracht opnieuw uitvoert.
Join-database mislukt (SQL Server-fout 35250)
In deze sectie worden de mogelijke oorzaken en oplossing besproken van een fout bij het toevoegen van secundaire databases aan de beschikbaarheidsgroep, omdat de verbinding met de primaire replica niet actief is. Dit is het volledige foutbericht:
Msg 35250 The connection to the primary replica is not active. The command cannot be processed.
Resolutie:
Hieronder vindt u een overzicht van de stappen.
Raadpleeg de enginefout MSSQLSERVER_35250 voor gedetailleerde stapsgewijze instructies
- Zorg ervoor dat het eindpunt is gemaakt en gestart.
- Controleer of u via Telnet verbinding kunt maken met het eindpunt en zorg ervoor dat de connectiviteit niet wordt geblokkeerd door firewallregels
- Controleer op fouten in het systeem. U kunt een query uitvoeren op de sys.dm_hadr_availability_replica_states voor de last_connect_error_number die u kan helpen bij het vaststellen van het verbindingsprobleem.
- Zorg ervoor dat het eindpunt zo is gedefinieerd dat het correct overeenkomt met het IP-/poort-adres dat ag gebruikt.
- Controleer of het netwerkserviceaccount verbindingsmachtigingen heeft voor het eindpunt.
- Controleren op mogelijke problemen met naamresolutie
- Zorg ervoor dat uw SQL Server een recente build uitvoert (bij voorkeur de nieuwste build om te beschermen tegen problemen die zijn opgelost.
Read-Only Routing werkt niet correct
Zorg ervoor dat u alleen-lezenroutering hebt ingesteld door het document Alleen-lezenroutering configureren te volgen.
Ondersteuning voor clientstuurprogramma's garanderen
De clienttoepassing moet een clientprovider gebruiken die ondersteuning biedt voor
ApplicationIntentde parameter. Zie ondersteuning voor stuurprogramma- en clientconnectiviteit voor beschikbaarheidsgroepenOpmerking
Als u verbinding maakt met een DNN-listener (gedistribueerde netwerknaam), moet de provider ook de parameter ondersteunen
MultiSubnetFailoverZorg ervoor dat de eigenschappen van de verbindingsreeks correct zijn ingesteld
Voor een goede werking van alleen-lezenroutering moet uw clienttoepassing deze eigenschappen in de verbindingsreeks gebruiken:
- Een databasenaam die deel uitmaakt van de beschikbaarheidsgroep (AG)
- De naam van een listener voor een beschikbaarheidsgroep
- Als u DNN gebruikt, moet u de naam van de DNN-listener en het DNN-poortnummer opgeven
<DNN name,DNN port>
- Als u DNN gebruikt, moet u de naam van de DNN-listener en het DNN-poortnummer opgeven
- ApplicationIntent ingesteld op ReadOnly
- MultiSubnetFailover ingesteld op true is vereist voor een Distributed Network Name (DNN).
Examples
In dit voorbeeld ziet u de verbindingsreeks voor de .NET
Microsoft.Data.SqlClient- ofSystem.Data.SqlClient-provider voor een VNN-listener (Virtual Network Name):Server=tcp:VNN_AgListener,1433;Database=AgDb1;ApplicationIntent=ReadOnly;MultiSubnetFailover=TrueDit voorbeeld illustreert de verbindingsreeks voor de .NET
Microsoft.Data.SqlClient- ofSystem.Data.SqlClient-provider voor een DNN-listener (Distributed Network Name).Server=tcp:DNN_AgListener,DNN_Port;Database=AgDb1;ApplicationIntent=ReadOnly;MultiSubnetFailover=TrueOpmerking
Als u opdrachtregelprogramma's zoals SQLCMD gebruikt, moet u ervoor zorgen dat u de juiste schakelopties voor servernaam opgeeft. In SQLCMD moet u bijvoorbeeld de hoofdletter -S switch gebruiken waarmee de servernaam wordt opgegeven, niet de kleine letter -s switch die wordt gebruikt voor kolomscheidingsteken.
Voorbeeld:sqlcmd -S AG_Listener,port -E -d AgDb1 -K ReadOnly -MZorg ervoor dat de listener van de beschikbaarheidsgroep online is. Voer de volgende query uit op de primaire replica om ervoor te zorgen dat de listener van de beschikbaarheidsgroep online is:
SELECT * FROM sys.dm_tcp_listener_states;Als u merkt dat de listener offline is, kunt u proberen deze online te brengen met behulp van een opdracht als volgt:
ALTER AVAILABILITY GROUP myAG RESTART LISTENER 'AG_Listener';Zorg ervoor dat READ_ONLY_ROUTING_LIST correct is ingevuld. Zorg ervoor dat de READ_ONLY_ROUTING_LIST alleen serverexemplaren bevat die als host fungeren voor leesbare secundaire replica's op de primaire replica.
Als u de eigenschappen van elke replica wilt bekijken, kunt u deze query uitvoeren en het connectiviteitseindpunt (URL) van de alleen-lezen replica onderzoeken.
SELECT replica_id, replica_server_name, secondary_role_allow_connections_desc, read_only_routing_url FROM sys.availability_replicas;Om een alleen-lezen routeringslijst te bekijken en te vergelijken met de eindpunt-URL:
SELECT * FROM sys.availability_read_only_routing_lists;Als u een lijst met alleen-lezenroutering wilt wijzigen, kunt u een query als volgt gebruiken:
ALTER AVAILABILITY GROUP [AG1] MODIFY REPLICA ON N'COMPUTER02' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));Zie voor meer informatie alleen-lezenroutering configureren voor een beschikbaarheidsgroep - SQL Server Always On
Controleer of de poort van READ_ONLY_ROUTING_URL is geopend. Zorg ervoor dat windows Firewall de READ_ONLY_ROUTING_URL poort niet blokkeert. Configureer een Windows Firewall voor toegang tot database-engine op elke replica in de read_only_routing_list en alle clients die verbinding maken met deze replica's.
Opmerking
Als u SQL Server uitvoert op een Virtuele Azure-machine, moet u aanvullende configuratiestappen uitvoeren. Zorg ervoor dat de netwerkbeveiligingsgroep (NSG) van elke replica-VM verkeer naar de eindpuntpoort en de DNN-poort toestaat als u DNN-listener gebruikt. Als u VNN-listener gebruikt, moet u ervoor zorgen dat de load balancer correct is geconfigureerd.
Zorg ervoor dat de READ_ONLY_ROUTING_URL (TCP://system-address:port) de juiste FQDN (Fully Qualified Domain Name) en het juiste poortnummer bevat. See:
Zorg voor de juiste CONFIGURATIE van SQL Server-netwerken in SQL Server Configuration Manager.
Controleer op elke replica in de read_only_routing_list dat:
- Externe SQL Server-connectiviteit is ingeschakeld
- TCP/IP is ingeschakeld
- De IP-adressen zijn correct geconfigureerd
Opmerking
U kunt snel controleren of al deze correct zijn geconfigureerd als u vanaf een externe computer verbinding kunt maken met de sql Server-exemplaarnaam van een doelreplica met behulp van
TCP:SQL_Instancesyntaxis.
Zie: Configureer een server om te luisteren op een specifieke TCP-poort (SQL Server Configuration Manager) en bekijk of wijzig servereigenschappen (SQL Server)
Gerelateerde taken
Maken en configureren van beschikbaarheidsgroepen (SQL Server)
een eindpunt voor databasespiegeling maken voor Windows-verificatie (Transact-SQL)
Geef de eindpunt-URL op bij het toevoegen of wijzigen van een beschikbaarheidsreplica (SQL Server)
Handmatig een secundaire database voorbereiden voor een beschikbaarheidsgroep (SQL Server)
Problemen met een mislukte Add-File-bewerking oplossen (AlwaysOn-beschikbaarheidsgroepen)
Beheer van aanmeldingen en taken voor de databases van een beschikbaarheidsgroep (SQL Server)
Verwante inhoud
- Gebeurtenissen en logboeken voor een failovercluster weergeven
- failovercluster-cmdlet voor Get-ClusterLog
- SQL Server AlwaysOn-teamblog: de officiële SQL Server Always On-teamblog
- Transportbeveiliging voor Database Mirroring en Always On Availability Groups (SQL Server)
- Clientnetwerkconfiguratie
- vereisten, beperkingen en aanbevelingen voor AlwaysOn-beschikbaarheidsgroepen (SQL Server)