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.
In dit onderwerp worden Microsoft-stuurprogramma's voor PHP voor SQL Server-ondersteuning (toegevoegd in versie 3.0) besproken voor herstel na noodgevallen met hoge beschikbaarheid.
Vanaf versie 3.0 van de Microsoft-stuurprogramma's voor PHP voor SQL Server kunt u de beschikbaarheidsgroep-listener van een beschikbaarheidsgroep, een rampenherstel-beschikbaarheidsgroep of een failoverclusterinstantie opgeven als server in de verbindingsreeks.
De verbindingseigenschap MultiSubnetFailover geeft aan dat de toepassing wordt geïmplementeerd in een beschikbaarheidsgroep of failoverclusterexemplaren en dat het stuurprogramma verbinding probeert te maken met de database op het primaire SQL Server-exemplaar door verbinding te maken met alle IP-adressen. Specificeer altijd MultiSubnetFailover=True wanneer u verbinding maakt met een SQL Server beschikbaarheidsgroep-listener of SQL Server-failoverclusterexemplaar. Als de toepassing is verbonden met een AlwaysOn-database die een failover-overschakeling uitvoert, wordt de oorspronkelijke verbinding verbroken en moet de toepassing een nieuwe verbinding openen om na de failover door te gaan.
Volledige informatie over AlwaysOn-beschikbaarheidsgroepen vindt u op de pagina Documenten voor hoge beschikbaarheid, herstel na noodgevallen .
Transparent Network IP Resolution (TNIR)
Transparent Network IP Resolution (TNIR) is een revisie van de bestaande MultiSubnetFailover-functie . Dit is van invloed op de verbindingsreeks van het stuurprogramma wanneer het eerste opgeloste IP-adres van de hostnaam niet reageert en er zijn meerdere IP-adressen gekoppeld aan de hostnaam. De bijbehorende verbindingsoptie is TransparentNetworkIPResolution. Samen met MultiSubnetFailover biedt het de volgende vier verbindingsreeksen:
- TNIR ingeschakeld & MultiSubnetFailover uitgeschakeld: Eerst wordt één IP-adres geprobeerd, gevolgd door alle IP-adressen parallel.
- TNIR ingeschakeld & MultiSubnetFailover ingeschakeld: Alle IP-adressen worden parallel benaderd
- TNIR Disabled & MultiSubnetFailover Disabled: Alle IP-adressen worden na elkaar geprobeerd
- TNIR Disabled en MultiSubnetFailover Enabled: Alle IP-adressen worden tegelijkertijd geprobeerd
TNIR is standaard ingeschakeld en MultiSubnetFailover is standaard uitgeschakeld.
Dit is een voorbeeld van het inschakelen van zowel TNIR als MultiSubnetFailover met behulp van het PDO_SQLSRV-stuurprogramma:
<?php
$serverName = "yourservername";
$username = "yourusername";
$password = "yourpassword";
$connectionString = "sqlsrv:Server=$serverName; TransparentNetworkIPResolution=Enabled; MultiSubnetFailover=yes";
try {
$conn = new PDO($connectionString, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
// your code
// more of your code
// when done, close the connection
unset($conn);
} catch(PDOException $e) {
print_r($e->errorInfo);
}
?>
Upgraden naar multi-subnet clusters vanuit databasespiegeling
Een verbindingsfout zal optreden als de MultiSubnetFailover en Failover_Partner verbindingssleutelwoorden aanwezig zijn in de verbindingsstring. Er zal ook een fout optreden als MultiSubnetFailover wordt gebruikt en de SQL Server een failover-partnerreactie teruggeeft die aangeeft dat het deel uitmaakt van een databasespiegelingpaar.
Wanneer u een PHP-toepassing bijwerkt die momenteel gebruikmaakt van databasespiegeling naar een scenario met meerdere subnetten, verwijdert u de eigenschap Failover_Partner verbinding en vervangt u deze door MultiSubnetFailover ingesteld op True en vervangt u de servernaam in de verbindingsreeks door een listener voor beschikbaarheidsgroepen. Als een verbindingsreeks Failover_Partner en MultiSubnetFailover=true gebruikt, genereert het stuurprogramma een fout. Als een verbindingsreeks echter gebruikmaakt van Failover_Partner en MultiSubnetFailover=false (of ApplicationIntent=ReadWrite), gebruikt de toepassing databasespiegeling.
Het stuurprogramma retourneert een fout als databasespiegeling wordt gebruikt voor de primaire database in de AG en als MultiSubnetFailover=true wordt gebruikt in de verbindingsreeks die verbinding maakt met een primaire database in plaats van met een availability group listener.
Specificeer applicatieintentie
Je kunt het trefwoord ApplicationIntent in je verbindingsstring opgeven. De toewijzingbare waarden zijn ReadWrite (de standaard) of ReadOnly.
Wanneer je ApplicationIntent=ReadOnly, vraagt de client een leeswerklast aan bij het verbinden. De server handhaaft de intentie tijdens de verbinding en tijdens een USE databasestatement.
Het ApplicationIntent trefwoord werkt niet met legacy, alleen-lezen databases.
Doelen van ReadOnly
Wanneer een verbinding kiest ReadOnly, wordt de verbinding toegewezen aan een van de volgende speciale configuraties die mogelijk bestaan voor de database:
Altijd aan. Een database kan leeswerklasten toestaan of verbieden op de beoogde beschikbaarheidsgroepdatabase. Deze keuze wordt bepaald door gebruik te maken van de
ALLOW_CONNECTIONSclausule van dePRIMARY_ROLEenSECONDARY_ROLETransact-SQL-statements.
Als geen van die speciale doelen beschikbaar is, wordt de reguliere database gelezen.
Het ApplicationIntent trefwoord maakt alleen-lezen routering mogelijk.
Alleen-lezenroutering
Alleen-lezen routering is een functie die de beschikbaarheid van een alleen-lezen replica van een database kan waarborgen. Om alleen-lezen routering in te schakelen, gelden alle volgende regels:
Je moet verbinding maken met een luisteraar van een Always On beschikbaarheidsgroep.
Het
ApplicationIntenttrefwoord voor de verbindingsreeks moet worden ingesteld opReadOnly.De databasebeheerder moet de beschikbaarheidsgroep configureren om alleen-lezen routering mogelijk te maken.
Meerdere verbindingen die elk read-only routing gebruiken, hoeven niet allemaal met dezelfde read-only replica te verbinden. Wijzigingen in databasesynchronisatie of wijzigingen in de routeringsconfiguratie van de server kunnen leiden tot clientverbindingen met verschillende alleen-lezen replica's.
Je kunt ervoor zorgen dat alle alleen-lezen-verzoeken verbinding maken met dezelfde alleen-lezen replica door geen luisteraar van een beschikbaarheidsgroep aan het sleutelwoord van de Server verbindingsstring door te geven. Geef in plaats daarvan de naam op van het exemplaar met het kenmerk Alleen-lezen.
Alleen-lezen routeren kan langer duren dan aansluiten op de primaire router. Dit komt doordat alleen-lezen routering eerst verbinding maakt met de primaire en vervolgens zoekt naar de best beschikbare leesbare secundaire route. Door deze meerdere stappen moet je je login time-out verhogen tot minstens 30 seconden.