Porozumění problémům s připojením zrcadlení databáze
Zrcadlení databáze je základní strategií pro zajištění vysoké dostupnosti a redundance v prostředích SQL Server. Konfigurace zrcadlení však může někdy vést k frustrujícím chybám, jako je chyba 1418, která uvádí, že síťová adresa serveru není dostupná nebo neexistuje.
K této konkrétní chybě často dochází při pokusu o nastavení relace zrcadlení mezi dvěma instancemi SQL Server, i když jsou obě databáze přístupné jednotlivě. Problém nastává, když zrcadlící koncové body spolu nekomunikují.
V daném případě jsou do procesu zrcadlení zapojeny místní desktop (192.168.0.80) a mini PC (192.168.0.85). Mini PC má sloužit jako replika pouze pro čtení pro mobilní aplikaci pomocí režimu zrcadlení „Vysoký výkon“.
Navzdory správné konfiguraci portu a nastavení brány firewall se uživatel při pokusu o zahájení relace zrcadlení setká s chybou 1418. Tento článek prozkoumá možné příčiny a řešení tohoto problému.
Příkaz | Příklad použití |
---|---|
ALTER ENDPOINT | Tento příkaz se používá k úpravě stavu koncového bodu zrcadlení databáze na serveru SQL Server. V kontextu řešení chyby 1418 zajišťuje, že je koncový bod správně spuštěn a naslouchá na zadaném portu. Příklad: ALTER ENDPOINT [Mirroring] STATE = STARTED; |
GRANT CONNECT ON ENDPOINT | Umožňuje konkrétnímu přihlášení připojit se ke koncovému bodu zrcadlení. To je klíčové pro umožnění bezpečné komunikace instancí SQL Server během zrcadlení databáze. Příklad: GRANT CONNECT ON ENDBOINT::[Mirroring_Endpoint] TO [DOMAINUserAccount]; |
SET PARTNER | Nakonfiguruje jednu instanci SQL Server jako partnera v relaci zrcadlení databáze. Tento příkaz stanoví síťovou adresu pro partnerský server. Příklad: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Vytvoří koncový bod zrcadlení, který naslouchá na konkrétním portu a spravuje relace zrcadlení databáze. Specifikuje komunikační roli (např. PARTNER). Příklad: CREATE ENDPOINT [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING (ROLE = PARTNER); |
netsh advfirewall firewall add rule | Používá se ke konfiguraci pravidel brány firewall tak, aby umožňovala provoz přes určité porty požadované pro SQL Server a zrcadlení (např. 1433 a 5022). To je nezbytné pro umožnění komunikace mezi zrcadlícími partnery. Příklad: netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433 |
socket.create_connection | Příkaz Pythonu používaný k navázání TCP spojení se zadaným serverem a portem. V této souvislosti se používá ke kontrole, zda je instance SQL Serveru dosažitelná přes síť. Příklad: socket.create_connection((server, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | Příkaz PowerShell používaný k vytvoření klienta TCP pro testování připojení portů. Pomáhá při ověřování, zda jsou mezi servery otevřené a dostupné potřebné zrcadlící porty. Příklad: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | Tento příkaz SQL načte stav relace zrcadlení databáze, což pomáhá při diagnostice, zda je nastavení zrcadlení správně nastaveno nebo zda se potýká s problémy. Příklad: SELECT * FROM sys.database_mirroring; |
Podrobné rozdělení skriptů pro rozlišení chyb zrcadlení
První skript uvedený v předchozích příkladech používá Transact-SQL (T-SQL) příkazy pro konfiguraci a vyřešení chyby zrcadlení na serveru SQL Server. Nejkritičtější částí skriptu je vytvoření a konfigurace zrcadlení koncových bodů. Tyto koncové body jsou síťová rozhraní, prostřednictvím kterých instance SQL Server komunikují během zrcadlení. Příkaz ZMĚNIT KONCOVÝ BOD zajišťuje, že koncové body na obou serverech jsou ve stavu "STARTED", což umožňuje komunikaci. The NASTAVIT PARTNERA Příkaz se pak použije k propojení databází, specifikuje síťovou adresu partnerského serveru, což umožňuje dvěma instancím SQL zrcadlit data v síti.
Druhý skript je řešení PowerShell navržené k testování síťové konektivity mezi dvěma servery. PowerShell používá New-Object System.Net.Sockets.TcpClient příkaz k vytvoření TCP klienta, který se pokusí připojit k zadané IP adrese a portu. Jedná se o efektivní způsob, jak ověřit, zda jsou požadované porty (1433 pro SQL Server a 5022 pro zrcadlení) otevřené a přístupné. Tento skript je zvláště užitečný pro diagnostiku problémů s firewallem nebo sítí, které mohou bránit dvěma instancím SQL v komunikaci, což způsobuje Chyba 1418.
Třetí skript využívá příkazy příkazového řádku systému Windows ke správě nastavení brány firewall. Konkrétně netsh advfirewall firewall přidat pravidlo slouží k otevření potřebných portů pro SQL Server a zrcadlení. To zajišťuje, že databázový provoz (port 1433) i zrcadlený provoz (port 5022) mohou volně proudit mezi dvěma servery. Dočasným vypnutím brány firewall pomocí netsh advfirewall vypne stav všech profilů může skript ověřit, zda je firewall hlavní příčinou problému s přístupem k síti. Toto řešení je zvláště důležité při odstraňování problémů s komunikací serveru v zabezpečeném prostředí.
Nakonec skript Python používá socket.create_connection funkci provést kontrolu sítě mezi dvěma servery. Tento skript poskytuje rychlý a efektivní způsob, jak ověřit, zda se servery mohou navzájem spojit přes požadované porty TCP. Pokusí se navázat spojení, a pokud bude úspěšné, potvrdí správnost nastavení sítě. Jednoduchost Pythonu při řešení problémů souvisejících se sítí z něj dělá dobrou volbu pro testování konektivity, zejména v prostředích, kde jsou jiné nástroje nedostupné nebo těžkopádné. Společně tyto skripty nabízejí komplexní přístup k řešení zrcadlení databáze chyba a zajištění hladké komunikace mezi instancemi SQL Serveru.
Řešení 1: Oprava chyby 1418 v zrcadlení databáze SQL Server (přístup T-SQL)
Toto řešení používá Transact-SQL (T-SQL) k řešení problémů se zrcadlením databáze konfigurací koncových bodů, ověřováním připojení a ověřováním adres serverů.
-- Enable server to listen on the specified ports
ALTER ENDPOINT [Mirroring]
STATE = STARTED;
GO
-- Ensure both databases are in FULL recovery mode
ALTER DATABASE YourDatabaseName
SET RECOVERY FULL;
GO
-- Create mirroring endpoints on both servers
CREATE ENDPOINT [Mirroring_Endpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
GO
-- Grant CONNECT permissions to the login account
GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint]
TO [DOMAIN\UserAccount];
GO
-- Set up mirroring using T-SQL command
ALTER DATABASE YourDatabaseName
SET PARTNER = 'TCP://192.168.0.85:5022';
GO
-- Verify the status of the mirroring configuration
SELECT * FROM sys.database_mirroring;
GO
Řešení 2: Skript PowerShell pro testování dostupnosti portu SQL Server
Toto řešení využívá PowerShell k testování konektivity portů mezi servery a zajišťuje, že požadované porty jsou otevřené a naslouchají.
# Define server IPs and ports
$server1 = "192.168.0.80"
$server2 = "192.168.0.85"
$port = 5022
# Function to test port connectivity
function Test-Port {
param([string]$server, [int]$port)
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port)
Write-Host "$server on port $port is reachable."
$tcpClient.Close()
} catch {
Write-Host "$server on port $port is not reachable."
}
}
# Test both servers
Test-Port -server $server1 -port $port
Test-Port -server $server2 -port $port
Řešení 3: Oprava chyby 1418 serveru SQL Server (konfigurace brány firewall)
Tento přístup využívá příkazový řádek systému Windows ke kontrole konfigurací brány firewall a zajišťuje, že požadované porty (1433, 5022) jsou otevřené na obou serverech.
-- Check if SQL Server and mirroring ports are open
netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433
netsh advfirewall firewall add rule name="MirrorPort" dir=in action=allow protocol=TCP localport=5022
-- Disable firewall temporarily for testing purposes
netsh advfirewall set allprofiles state off
-- Enable firewall again after testing
netsh advfirewall set allprofiles state on
Řešení 4: Python Script pro ověření TCP spojení mezi servery
Toto řešení používá Python k ověření, zda instance SQL Serveru mohou komunikovat přes síť kontrolou připojení TCP.
import socket
# Define server IPs and port
server1 = '192.168.0.80'
server2 = '192.168.0.85'
port = 5022
# Function to check connectivity
def check_connection(server, port):
try:
sock = socket.create_connection((server, port), timeout=5)
print(f'Connection successful to {server}:{port}')
sock.close()
except socket.error:
print(f'Cannot connect to {server}:{port}')
# Check both servers
check_connection(server1, port)
check_connection(server2, port)
Řešení 5: Konfigurace GUI SQL Server Management Studio (SSMS).
Toto řešení vás provede nastavením zrcadlení pomocí GUI SSMS pro uživatele, kteří nechtějí používat rozhraní příkazového řádku.
1. Open SQL Server Management Studio (SSMS).
2. Right-click your database -> Tasks -> Mirror...
3. Click Configure Security and follow the wizard.
4. Ensure both Principal and Mirror servers are correct.
5. Set the port for the mirroring endpoints to 5022.
6. Complete the configuration and click Start Mirroring.
7. Verify the mirroring status by checking the "Database Properties" window.
Zkoumání síťových a bezpečnostních výzev v SQL Server Mirroring
Při nastavování Zrcadlení databáze SQL ServerJedním z často opomíjených aspektů je role konfigurace sítě a nastavení zabezpečení. Chyba 1418, která označuje, že síťová adresa serveru není dostupná, je často způsobena základními problémy se sítí. I když jsou otevřeny správné porty (1433 a 5022) a firewally jsou zakázány, jiné síťové prvky, jako je směrování a konfigurace DNS, mohou způsobit selhání komunikace. Je důležité zajistit, aby si oba servery navzájem správně rozlišovaly IP adresy, zejména v prostředích s více podsítěmi.
Další výzva zahrnuje Ověření serveru SQL nastavení během nastavení zrcadlení. Zrcadlení databáze vyžaduje, aby se hlavní i zrcadlový server vzájemně ověřovaly pomocí certifikátů nebo autentizace na základě domény (Kerberos). Pokud toto nastavení není správně nakonfigurováno nebo pokud existuje neshoda v protokolech zabezpečení mezi dvěma servery, může dojít k chybě 1418. Účty služeb SQL Server navíc musí mít správná oprávnění na obou počítačích, zejména přístup ke koncovým bodům zrcadlení.
Konečně volba operačního systému může také ovlivnit, jak se zrcadlení chová. Různé verze systému Windows mohou zpracovávat připojení TCP odlišně, zejména ve způsobu správy pravidel brány firewall a směrování síťového provozu. Pokud má operační systém kteréhokoli serveru zastaralé nebo neodpovídající síťové ovladače, může selhat komunikace mezi servery. Při řešení problémů s připojením, jako je chyba 1418, je zásadní zajistit, aby byl operační systém aktuální s nejnovějšími opravami a aby byly spuštěny příslušné služby.
Běžné otázky k nastavení zrcadlení SQL Server a chyba 1418
- Co způsobuje chybu 1418 v zrcadlení SQL Server?
- Chyba 1418 je obvykle způsobena selháním komunikace mezi dvěma servery. Může to být způsobeno nesprávným nastavením brány firewall mirroring endpointsnebo problémy s připojením k síti.
- Jak mohu zkontrolovat, zda jsou mé porty otevřené pro zrcadlení SQL Server?
- Použijte telnet příkaz nebo skript jako např New-Object System.Net.Sockets.TcpClient v PowerShellu a otestujte, zda jsou otevřené porty 1433 a 5022.
- Musí být oba servery pro zrcadlení ve stejné doméně?
- Ne, ale ověřování domény může proces zjednodušit. V opačném případě musíte k zabezpečení použít autentizaci na základě certifikátu mirroring endpoints.
- Jaká je role koncového bodu při zrcadlení databáze?
- The CREATE ENDPOINT vytvoří síťové rozhraní, které umožňuje instancím SQL Server komunikovat během zrcadlení. Každý server musí mít funkční koncový bod zrcadlení.
- Mohu zrcadlit databáze na různých verzích SQL Server?
- Ne, zrcadlení databáze vyžaduje, aby obě instance SQL Server byly na stejné verzi a edici, aby správně fungovaly.
Závěrečné myšlenky na vyřešení chyby zrcadlení databáze 1418
Chyby zrcadlení databáze, jako je chyba 1418, jsou často způsobeny problémy se sítí mezi servery. Tento problém může vyřešit zajištění toho, že jsou otevřené správné porty, jsou nakonfigurovány brány firewall a správně nastaveny koncové body.
Navíc ověření přístupu k síti pomocí nástrojů, jako je PowerShell, a zajištění konzistentnosti ověřovacích protokolů mezi servery zvýší vaše šance na úspěch. Následující kroky mohou pomoci dosáhnout spolehlivého zrcadlení SQL Server pro vysoce výkonné operace.
Reference a zdroje pro řešení zrcadlení databáze
- Podrobnosti o konfiguraci zrcadlení SQL Server a řešení potíží, včetně chyby 1418 a nastavení koncového bodu, naleznete na Dokumentace Microsoft SQL .
- Komplexní průvodce konfigurací pravidel brány firewall a řešení problémů se sítí pro zrcadlení SQL Serveru je k dispozici na adrese Konfigurace brány firewall systému Windows .
- Skripty PowerShellu pro testování portů a ověření sítě mezi instancemi SQL Serveru jsou k dispozici na Dokumentace PowerShellu .
- Techniky programování soketů Pythonu používané při testování konektivity serveru naleznete na adrese Modul Python Socket .