Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Tento článek obsahuje informace, které vám pomůžou vyřešit typické problémy s konfigurací instancí serveru pro skupiny dostupnosti AlwaysOn. Mezi typické problémy s konfigurací patří zakázané skupiny dostupnosti Always On, nesprávná konfigurace účtů, neexistující koncový bod zrcadlení databáze, nepřístupný koncový bod (chyba SQL Serveru 1418), neexistující síťový přístup a selhání příkazu pro připojení k databázi (chyba SQL Serveru 35250).
Poznámka:
Ujistěte se, že splňujete požadavky skupin dostupnosti AlwaysOn. Další informace najdete v tématu Požádky, omezení a doporučení pro skupiny dostupnosti Always On (SQL Server).
V tomto tématu:
| Oddíl | Description |
|---|---|
| Skupiny dostupnosti AlwaysOn nejsou povolené. | Pokud pro skupiny dostupnosti AlwaysOn není povolená instance SQL Serveru, instance nepodporuje vytváření skupin dostupnosti a nemůže hostovat žádné repliky dostupnosti. |
| Účty | Popisuje požadavky pro správnou konfiguraci účtů, ve kterých běží SQL Server. |
| Koncové body | Se zabývá tím, jak diagnostikovat problémy s koncovým bodem zrcadlení databáze instance serveru. |
| Přístup k síti | Dokumentuje požadavek, aby každá instance serveru hostující repliku dostupnosti mohla mít přístup k portu všech ostatních instancí serveru přes protokol TCP. |
| Posluchač | Doporučuje, jak nastavit IP adresu a port posluchače a ujistit se, že je aktivní a naslouchá příchozím připojením. |
| Přístup ke koncovému bodu (chyba SQL Serveru 1418) | Obsahuje informace o této chybové zprávě SQL Serveru. |
| Selhání připojení databáze (chyba SQL Serveru 35250) | Popisuje možné příčiny a řešení chyby připojení sekundárních databází ke skupině dostupnosti, protože připojení k primární replice není aktivní. |
| Směrování pouze pro čtení nefunguje správně | |
| související úkoly | Obsahuje seznam článků orientovaných na úlohy v sql Server Books Online, které jsou relevantní pro řešení potíží s konfigurací skupiny dostupnosti. |
| související obsah | Obsahuje seznam relevantních prostředků, které jsou externí pro SQL Server Books Online. |
Skupiny dostupnosti AlwaysOn nejsou povolené.
Funkce Skupiny dostupnosti AlwaysOn musí být povolena na všech instancích SQL Serveru.
Pokud funkce Skupiny dostupnosti AlwaysOn není povolená, zobrazí se tato chybová zpráva při pokusu o vytvoření skupiny dostupnosti na SQL Serveru.
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)
Chybová zpráva jasně ukazuje, že funkce skupiny dostupnosti (AG) není povolena, a poskytuje pokyny, jak ji povolit. Existují dva scénáře, kdy se můžete dostat do tohoto stavu kromě zřejmé situace, kdy AG nebyla původně povolena.
- Pokud byl SQL Server nainstalován a funkce Skupiny dostupnosti AlwaysOn byla povolena před instalací funkce clusteringu s podporou převzetí služeb při selhání systému Windows, může se tato chyba zobrazit při pokusu o vytvoření skupiny dostupnosti AlwaysOn.
- Pokud odeberete existující funkci clusteringu s podporou převzetí služeb při selhání systému Windows a znovu ji sestavíte, zatímco SQL Server stále má nakonfigurovanou funkci Always On, může při pokusu o opětovné použití skupiny dostupnosti dojít k této chybě.
V takových případech ho můžete vyřešit následujícím postupem:
- Zakázání funkce AG
- Restartujte službu SQL Serveru
- Povolit funkci AG znovu
- Znovu restartujte službu SQL.
Další informace najdete v tématu Povolení a zakázání skupin dostupnosti AlwaysOn (SQL Server).
Accounts
Účty, na kterých běží SQL Server, musí být správně nakonfigurované.
Mají účty správná oprávnění?
Pokud partneři běží pod stejným účtem domény, existují správná přihlášení uživatelů v obou hlavních databázích automaticky. To zjednodušuje konfiguraci zabezpečení a doporučuje se.
Pokud dvě instance serveru běží pod různými účty, musí být každý účet vytvořen v master na vzdálené instanci serveru a tomuto server principalu musí být udělena oprávnění CONNECT pro připojení ke koncovému bodu zrcadlení databáze této instance serveru. Další informace najdete v tématu Nastavení přihlašovacích účtů pro zrcadlení databáze nebo skupiny dostupnosti AlwaysOn (SQL Server). Pomocí následujícího dotazu na každou instanci můžete zkontrolovat, jestli mají přihlášení oprávnění CONNECT:
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 = 4Pokud sql Server běží pod předdefinovaný účet, jako je místní systém, místní služba nebo síťová služba nebo nedoménový účet, musíte použít certifikáty pro ověření koncového bodu. Pokud účty služeb používají doménové účty ve stejné doméně, můžete u každého účtu služby udělit přístup CONNECT pro každý účet služby ve všech umístěních replik nebo můžete použít certifikáty. Další informace najdete v tématu Použití certifikátů pro koncový bod zrcadlení databáze (Transact-SQL).
Endpoints
Koncové body musí být správně nakonfigurované.
Ujistěte se, že každá instance SQL Serveru, která bude hostovat repliku dostupnosti (každé umístění repliky), má koncový bod zrcadlení databáze. Pokud chcete zjistit, jestli v dané instanci serveru existuje koncový bod zrcadlení databáze, použijte zobrazení katalogu sys.database_mirroring_endpoints :
SELECT name, state_desc FROM sys.database_mirroring_endpointsDalší informace o vytváření koncových bodů najdete v tématu Vytvoření koncového bodu zrcadlení databáze pro ověřování systému Windows (Transact-SQL) nebo Povolení použití certifikátů koncového bodu zrcadlení databáze pro odchozí připojení (Transact-SQL).
Zkontrolujte správnost čísel portů.
K identifikaci portu aktuálně přidruženého ke koncovému bodu zrcadlení databáze instance serveru použijte následující příkaz Transact-SQL:
SELECT type_desc, port FROM sys.tcp_endpoints; GOV případě problémů s nastavením skupin dostupnosti AlwaysOn, které je obtížné vysvětlit, doporučujeme zkontrolovat každou instanci serveru a zjistit, jestli naslouchá na správných portech.
Ujistěte se, že koncové body jsou spuštěné (STATE=STARTED). V každé instanci serveru použijte následující příkaz Transact-SQL:
SELECT state_desc FROM sys.database_mirroring_endpointsDalší informace o sloupci state_desc najdete v tématu sys.database_mirroring_endpoints (Transact-SQL).
Ke spuštění koncového bodu použijte následující příkaz Transact-SQL:
ALTER ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = <port_number>) FOR database_mirroring (ROLE = ALL); GODalší informace naleznete v tématu ALTER ENDPOINT (Transact-SQL).
Poznámka:
V některých případech, když se koncový bod spustí, ale repliky v rámci AG nekomunikují, zkuste tento koncový bod zastavit a znovu spustit. Můžete použít FUNKCI ALTER ENDPOINT [Endpoint_Mirroring] STATE = ZASTAVENO a potom ALTER ENDPOINT [Endpoint_Mirroring] STATE = STARTED
Ujistěte se, že přihlášení z druhého serveru má oprávnění CONNECT. Pokud chcete zjistit, kdo má oprávnění CONNECT pro koncový bod, použijte v každé instanci serveru následující příkaz Transact-SQL:
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;Ujistěte se, že se v adrese URL koncového bodu používá správný název serveru.
Pro název serveru v adrese URL koncového bodu se doporučuje použít plně kvalifikovaný název domény (FQDN), i když můžete použít libovolný název, který počítač jednoznačně identifikuje. Adresa serveru může být název Netbios (pokud jsou systémy ve stejné doméně), plně kvalifikovaný název domény (FQDN) nebo IP adresu (pokud možno statickou IP adresu). Použití plně kvalifikovaného názvu domény je doporučená možnost.
Pokud jste už definovali adresu URL koncového bodu, můžete ji dotazovat pomocí:
select endpoint_url from sys.availability_replicasPotom porovnejte výstup endpoint_url s názvem serveru (název NetBIOS nebo plně kvalifikovaný název domény). Pokud chcete zadat dotaz na název serveru, spusťte v místním prostředí PowerShell na replice následující příkazy:
$env:COMPUTERNAME [System.Net.Dns]::GetHostEntry([string]$env:computername).HostNamePokud chcete ověřit název serveru na vzdáleném počítači, spusťte tento příkaz z PowerShellu.
$servername_from_endpoint_url = "server_from_endpoint_url_output" Test-NetConnection -ComputerName $servername_from_endpoint_urlDalší informace najdete v tématu Určení adresy URL koncového bodu při přidávání nebo úpravě repliky dostupnosti (SQL Server).
Poznámka:
Pokud chcete použít ověřování protokolem Kerberos pro komunikaci mezi koncovými body skupiny dostupnosti (AG), zaregistrujte název hlavní služby pro připojení Kerberos pro koncové body zrcadlení databáze používané skupinou dostupnosti.
Síťový přístup
Každá instance serveru, která je hostitelem repliky dostupnosti, musí mít přístup k portu každé z ostatních instancí serveru přes protokol TCP. To je zvlášť důležité, pokud jsou instance serveru v různých doménách, které navzájem nedůvěřují (nedůvěryhodné domény). Pomocí následujícího postupu zkontrolujte, jestli se můžete připojit ke koncovým bodům:
K ověření připojení použijte Test-NetConnection (ekvivalent ke službě Telnet). Tady jsou příklady příkazů, které můžete použít:
$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_numberPokud koncový bod naslouchá a připojení je úspěšné, zobrazí se "TcpTestSucceeded : True". Pokud ne, obdržíte hodnotu TcpTestSucceeded : False.
Pokud připojení Test-NetConnection (Telnet) k IP adrese funguje, ale na název serveru nikoliv, pravděpodobně dojde k problému s vyhodnocením jmen nebo DNS.
Pokud připojení funguje podle názvu serveru a nikoli IP adresy, může být na tomto serveru definováno více než jeden koncový bod (možná jiná instance SQL), který na tomto portu naslouchá. I když stav koncového bodu na uvedené instanci ukazuje "SPUŠTĚNO", může mít jiná instance ve skutečnosti svázaný port a zabránit té správné instanci v naslouchání a navazování připojení TCP.
Pokud se Test-NetConnection nedokáže připojit, zkontrolujte nastavení firewallu a/nebo antivirového softwaru, které mohou blokovat daný port koncového bodu. Zkontrolujte nastavení brány firewall a zjistěte, jestli umožňuje komunikaci portu koncového bodu mezi instancemi serveru, které hostují primární repliku a sekundární repliku (ve výchozím nastavení port 5022). Spuštěním následujícího skriptu PowerShellu zkontrolujte zakázaná pravidla příchozího provozu.
Pokud používáte SQL Server na virtuálním počítači Azure, musíte také zajistit, aby skupina zabezpečení sítě (NSG) umožňovala provoz na port koncového bodu. Zkontrolujte nastavení brány firewall (a skupiny zabezpečení sítě pro virtuální počítač Azure) a zjistěte, jestli umožňuje komunikaci portu koncového bodu mezi instancemi serveru, které hostují primární repliku a sekundární repliku (ve výchozím nastavení port 5022).
Get-NetFirewallRule -Action Block -Enabled True -Direction Inbound |Format-TableZachyťte výstup z rutin Get-NetTCPConnection (ekvivalent NETSTAT -a) a ověřte, že stav je 'Listening' nebo 'Established' na IP:Port zadaného koncového bodu.
Get-NetTCPConnection
Listener
Pro správnou konfiguraci posluchače skupiny dostupnosti postupujte podle "Konfigurace posluchače pro skupinu dostupnosti Always On".
Jakmile je naslouchací proces nakonfigurovaný, můžete pomocí následujícího dotazu ověřit IP adresu a port, na které naslouchá:
$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"Pomocí tohoto dotazu můžete také najít informace o naslouchacích službách společně s porty SQL Serveru.
$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")Pokud potřebujete navázat připojení k naslouchacímu procesu a máte podezření, že je port zablokovaný, můžete provést test pomocí rutiny powershellu Test-NetConnection (ekvivalentní rutině 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_numberNakonec zkontrolujte, jestli naslouchá na zadaném portu.
$port_number = "your_port_number" Get-NetTCPConnection -LocalPort $port_number -State Listen
Přístup ke koncovému bodu (chyba SQL Serveru 1418)
Tato zpráva SYSTÉMU SQL Server označuje, že síťová adresa serveru zadaná v adrese URL koncového bodu není dostupná nebo neexistuje, a navrhuje, abyste ověřili název síťové adresy a příkaz znovu zadali.
Selhání připojení k databázi (chyba SQL Serveru 35250)
Tato část popisuje možné příčiny a řešení selhání připojení sekundárních databází ke skupině dostupnosti, protože připojení k primární replice není aktivní. Toto je úplná chybová zpráva:
Msg 35250 The connection to the primary replica is not active. The command cannot be processed.
Řešení:
Níže je uveden souhrn kroků.
Podrobné pokyny najdete v tématu Chyba modulu MSSQLSERVER_35250
- Ujistěte se, že koncový bod je vytvořený a spuštěný.
- Zkontrolujte, jestli se ke koncovému bodu můžete připojit přes Telnet, a ujistěte se, že neblokují připojení žádná pravidla brány firewall.
- Zkontrolujte chyby v systému. Můžete se dotazovat na sys.dm_hadr_availability_replica_states na last_connect_error_number, které vám může pomoct s diagnostikou problému s připojením.
- Ujistěte se, že je koncový bod definovaný tak, aby správně odpovídal IP/portu, který AG (Availability Group) používá.
- Zkontrolujte, jestli má účet síťové služby oprávnění CONNECT ke koncovému bodu.
- Kontrola možných problémů s řešením názvů
- Ujistěte se, že SQL Server používá aktuální verzi buildu (pokud možno nejnovější build), abyste se vyhnuli problémům, které již byly opraveny.
Routování pouze pro čtení nefunguje správně
Ujistěte se, že jste nastavili směrování jen pro čtení podle dokumentu Konfigurace směrování jen pro čtení.
Zajištění podpory klientských ovladačů
Klientská aplikace musí používat zprostředkovatele klienta, který podporuje
ApplicationIntentparametr. Viz Podpora připojení pro ovladače a klienty ve skupinách dostupnostiPoznámka:
Pokud se připojujete k Listeneru DNN (Distributed Network Name), musí poskytovatel také podporovat parametr
MultiSubnetFailover.Ujistěte se, že jsou správně nastavené vlastnosti připojovacího řetězce.
Aby směrování jen pro čtení fungovalo správně, musí klientská aplikace používat tyto vlastnosti v připojovacím řetězci:
- Název databáze, který patří k AG
- Název posluchače skupiny dostupnosti
- Pokud používáte síť DNN, musíte zadat název naslouchacího procesu DNN a číslo portu DNN.
<DNN name,DNN port>
- Pokud používáte síť DNN, musíte zadat název naslouchacího procesu DNN a číslo portu DNN.
- ApplicationIntent nastavený na Jen pro čtení
- Pro název distribuované sítě (DNN) je vyžadováno nastavení MultiSubnetFailover na true.
Příklady
Tento příklad ukazuje připojovací řetězec pro .NET
Microsoft.Data.SqlClientneboSystem.Data.SqlClientposkytovatele pro naslouchací proces názvu virtuální sítě (VNN):Server=tcp:VNN_AgListener,1433;Database=AgDb1;ApplicationIntent=ReadOnly;MultiSubnetFailover=TrueTento příklad ilustruje připojovací řetězec pro .NET
Microsoft.Data.SqlClientneboSystem.Data.SqlClientposkytovatele pro posluchače názvu distribuované sítě (DNN):Server=tcp:DNN_AgListener,DNN_Port;Database=AgDb1;ApplicationIntent=ReadOnly;MultiSubnetFailover=TruePoznámka:
Pokud používáte programy příkazového řádku, jako je SQLCMD, ujistěte se, že jste zadali správné přepínače pro název serveru. Například v SQLCMD musíte použít přepínač s velkým písmenem -S, který určuje název serveru, nikoli přepínač s malým písmenem -s, který se používá pro oddělovač sloupců.
Příklad:sqlcmd -S AG_Listener,port -E -d AgDb1 -K ReadOnly -MUjistěte se, že je naslouchací služba skupiny pro dostupnost online. Pokud chcete zajistit, aby naslouchací proces skupiny dostupnosti byl online, spusťte na primární replice následující dotaz:
SELECT * FROM sys.dm_tcp_listener_states;Pokud zjistíte, že je naslouchací proces offline, můžete se ho pokusit přenést do režimu online pomocí následujícího příkazu:
ALTER AVAILABILITY GROUP myAG RESTART LISTENER 'AG_Listener';Ujistěte se, že READ_ONLY_ROUTING_LIST je správně vyplněný. Na primární replice se ujistěte, že READ_ONLY_ROUTING_LIST obsahuje pouze instance serveru, které hostují čitelné sekundární repliky.
Pokud chcete zobrazit vlastnosti každé repliky, můžete spustit tento dotaz a prozkoumat koncový bod připojení (URL) repliky jen pro čtení.
SELECT replica_id, replica_server_name, secondary_role_allow_connections_desc, read_only_routing_url FROM sys.availability_replicas;Zobrazení seznamu směrování jen pro čtení a porovnání s adresou URL koncového bodu:
SELECT * FROM sys.availability_read_only_routing_lists;Pokud chcete změnit seznam směrování jen pro čtení, můžete použít dotaz podobný tomuto:
ALTER AVAILABILITY GROUP [AG1] MODIFY REPLICA ON N'COMPUTER02' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));Další informace naleznete v tématu Konfigurace směrování jen pro čtení pro skupinu dostupnosti – SQL Server AlwaysOn
Zkontrolujte, jestli je otevřený READ_ONLY_ROUTING_URL port. Ujistěte se, že brána Windows Firewall neblokuje READ_ONLY_ROUTING_URL port. Nakonfigurujte bránu firewallu systému Windows pro přístup k databázovému enginu na všech replikách v read_only_routing_list a pro všechny klienty, kteří se k těmto replikám připojují.
Poznámka:
Pokud používáte SQL Server na virtuálním počítači Azure, musíte provést další kroky konfigurace. Ujistěte se, že síťová bezpečnostní skupina (NSG) každého virtuálního počítače repliky umožňuje provoz na port koncového bodu a port DNN, pokud používáte DNN posluchač. Pokud používáte naslouchací službu VNN, musíte zajistit, aby byl vyrovnávač zatížení správně nakonfigurovaný.
Ujistěte se, že READ_ONLY_ROUTING_URL (TCP://system-address:port) obsahuje správný plně kvalifikovaný název domény (FQDN) a číslo portu. Viz:
Zajistěte správnou konfiguraci sítě SQL Serveru v nástroji SQL Server Configuration Manager.
Ověřte na každé replice v read_only_routing_list, že:
- Je povolené vzdálené připojení SQL Serveru.
- Je povolen protokol TCP/IP.
- IP adresy jsou správně nakonfigurované.
Poznámka:
Všechny tyto možnosti můžete rychle ověřit, jestli jsou správně nakonfigurované, pokud se můžete připojit ze vzdáleného počítače ke názvu instance SQL Serveru cílové sekundární repliky pomocí
TCP:SQL_Instancesyntaxe.
Viz: Konfigurace serveru pro naslouchání na konkrétním portu TCP (SQL Server Configuration Manager) a zobrazení nebo změna vlastností serveru (SQL Server)
Související úkoly
Vytvoření koncového bodu zrcadlení databáze pro ověřování systému Windows (Transact-SQL)
Zadání adresy URL koncového bodu při přidávání nebo úpravě repliky dostupnosti (SQL Server)
Ruční Příprava Sekundární Databáze pro Dostupnostní Skupinu (SQL Server)
Řešení potíží s neúspěšnou operací Add-File (skupiny dostupnosti Always On)
Správa přístupových údajů a úloh pro databáze skupiny dostupnosti (SQL Server)
spravovat metadata při zpřístupnění databáze v jiné instanci serveru (SQL Server)
Související obsah
- Zobrazení událostí a protokolů pro cluster s podporou převzetí služeb při selhání
- cmdlet clusteru s podporou převzetí služeb při selhání Get-ClusterLog
- SQL Server AlwaysOn Team Blog: oficiální týmový blog SQL Serveru AlwaysOn
- Zabezpečení přenosu pro zrcadlení databáze a skupiny dostupnosti AlwaysOn (SQL Server)
- Konfigurace klientské sítě
- Požadavky, omezení a doporučení pro skupiny dostupnosti Always On (SQL Server)