Forstå tilkoblingsproblemer med databasespeiling
Databasespeiling er en viktig strategi for å sikre høy tilgjengelighet og redundans i SQL Server-miljøer. Konfigurering av speiling kan imidlertid noen ganger føre til frustrerende feil, for eksempel feil 1418, som sier at servernettverksadressen ikke kan nås eller ikke eksisterer.
Denne spesielle feilen oppstår ofte når du prøver å sette opp en speilingsøkt mellom to SQL Server-forekomster, selv om begge databasene er tilgjengelige individuelt. Problemet oppstår når speilende endepunktene ikke klarer å kommunisere med hverandre.
I det aktuelle tilfellet er en lokal stasjonær (192.168.0.80) og en mini-PC (192.168.0.85) involvert i speilprosessen. Mini-PC-en er ment å tjene som en skrivebeskyttet kopi for en mobilapplikasjon, ved å bruke "High Performance"-modus for speiling.
Til tross for korrekt portkonfigurasjon og brannmurjusteringer, støter brukeren på feil 1418 når han prøver å starte speilingsøkten. Denne artikkelen vil utforske potensielle årsaker og løsninger for å løse dette problemet.
Kommando | Eksempel på bruk |
---|---|
ALTER ENDPOINT | Denne kommandoen brukes til å endre tilstanden til et databasespeilende endepunkt i SQL Server. I forbindelse med å løse feil 1418, sikrer den at endepunktet er riktig startet og lytter på den angitte porten. Eksempel: ALTER ENDPOINT [Speiling] STATE = STARTET; |
GRANT CONNECT ON ENDPOINT | Lar en spesifikk pålogging koble til et speilende endepunkt. Dette er avgjørende for å tillate SQL Server-forekomster å kommunisere sikkert under databasespeiling. Eksempel: GIV TILKOBLING PÅ ENDEPUNKT::[Speiling_Endpunkt] TIL [DOMENEBrukerkonto]; |
SET PARTNER | Konfigurerer én SQL Server-forekomst som partner i en databasespeilingøkt. Denne kommandoen etablerer nettverksadressen for partnerserveren. Eksempel: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Oppretter et speilende endepunkt som lytter på en bestemt port og administrerer databasespeilingsøkter. Den spesifiserer kommunikasjonsrollen (f.eks. PARTNER). Eksempel: CREATE ENDPOINT [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING (ROLE = PARTNER); |
netsh advfirewall firewall add rule | Brukes til å konfigurere brannmurregler for å tillate trafikk gjennom spesifikke porter som kreves for SQL Server og speiling (f.eks. 1433 og 5022). Dette er avgjørende for å muliggjøre kommunikasjon mellom speilpartnere. Eksempel: netsh advfirewall brannmur legg til regelnavn="SQLPort" dir=in action=allow protocol=TCP lokalport=1433 |
socket.create_connection | En Python-kommando som brukes til å etablere en TCP-tilkobling til en spesifisert server og port. I denne sammenhengen brukes den til å sjekke om SQL Server-forekomsten er tilgjengelig over nettverket. Eksempel: socket.create_connection((server, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | En PowerShell-kommando som brukes til å lage en TCP-klient for å teste porttilkobling. Det hjelper med å verifisere om de nødvendige speilingsportene er åpne og tilgjengelige mellom servere. Eksempel: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | Denne SQL-kommandoen henter statusen til databasespeilingsøkten, og hjelper til med å diagnostisere om speiloppsettet er riktig etablert eller har problemer. Eksempel: SELECT * FROM sys.database_mirroring; |
Detaljert oversikt over skriptene for speiling av feiloppløsning
Det første skriptet gitt i de tidligere eksemplene bruker Transact-SQL (T-SQL) kommandoer for å konfigurere og løse speilfeilen i SQL Server. Den mest kritiske delen av manuset er opprettelsen og konfigurasjonen av speilende endepunkter. Disse endepunktene er nettverksgrensesnittene som SQL Server-forekomstene kommuniserer gjennom under speiling. Kommandoen ENDRE ENDEPUNKT sikrer at endepunktene på begge serverne er i "STARTED"-tilstanden, slik at kommunikasjon kan skje. De SET PARTNER kommandoen brukes deretter til å koble sammen databasene, og spesifisere nettverksadressen til partnerserveren, som lar de to SQL-forekomstene speile data på tvers av nettverket.
Det andre skriptet er en PowerShell-løsning designet for å teste nettverkstilkoblingen mellom de to serverne. PowerShell bruker New-Object System.Net.Sockets.TcpClient kommando for å opprette en TCP-klient som prøver å koble til den angitte IP-adressen og porten. Dette er en effektiv måte å bekrefte at de nødvendige portene (1433 for SQL Server og 5022 for speiling) er åpne og tilgjengelige. Dette skriptet er spesielt nyttig for å diagnostisere brannmur- eller nettverksproblemer som kan hindre de to SQL-forekomstene i å kommunisere, og dermed forårsake Feil 1418.
Det tredje skriptet bruker Windows-kommandoer for å administrere brannmurinnstillinger. Nærmere bestemt netsh advfirewall brannmur legge til regel kommandoen brukes til å åpne de nødvendige portene for SQL Server og speiling. Dette sikrer at både databasetrafikken (port 1433) og speilingstrafikken (port 5022) kan flyte fritt mellom de to serverne. Ved å midlertidig deaktivere brannmuren med netsh advfirewall deaktiverte alle profiler kommandoen, kan skriptet bekrefte om brannmuren er årsaken til problemet med nettverkstilgang. Denne løsningen er spesielt viktig ved feilsøking av serverkommunikasjonsproblemer i et sikkert miljø.
Til slutt bruker Python-skriptet socket.create_connection funksjon for å utføre en nettverkssjekk mellom de to serverne. Dette skriptet gir en rask og effektiv måte å validere om serverne kan nå hverandre over de nødvendige TCP-portene. Den forsøker å opprette en tilkobling, og hvis den lykkes, bekrefter den at nettverksoppsettet er riktig. Pythons enkelhet i å håndtere nettverksrelaterte problemer gjør det til et godt valg for å teste tilkobling, spesielt i miljøer der andre verktøy er utilgjengelige eller tungvinte å bruke. Sammen tilbyr disse skriptene en omfattende tilnærming til å løse problemet databasespeiling feil og sikre jevn kommunikasjon mellom SQL Server-forekomster.
Løsning 1: Retting av feil 1418 i SQL Server Database Mirroring (T-SQL-tilnærming)
Denne løsningen bruker Transact-SQL (T-SQL) for å løse problemer med databasespeiling ved å konfigurere endepunkter, autentisere tilkoblinger og validere serveradresser.
-- 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
Løsning 2: PowerShell-skript for å teste SQL Server-porttilgjengelighet
Denne løsningen bruker PowerShell til å teste porttilkoblingen mellom serverne, for å sikre at de nødvendige portene er åpne og lytter.
# 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
Løsning 3: SQL Server Error 1418 Fix (brannmurkonfigurasjon)
Denne tilnærmingen bruker Windows Ledetekst for å sjekke brannmurkonfigurasjoner, og sikre at nødvendige porter (1433, 5022) er åpne på begge serverne.
-- 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
Løsning 4: Python-skript for å validere TCP-tilkobling mellom servere
Denne løsningen bruker Python til å validere om SQL Server-forekomstene kan kommunisere over nettverket ved å sjekke TCP-tilkoblinger.
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)
Løsning 5: SQL Server Management Studio (SSMS) GUI-konfigurasjon
Denne løsningen går gjennom å sette opp speiling ved hjelp av SSMS GUI for brukere som foretrekker å ikke bruke kommandolinjegrensesnitt.
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.
Utforske nettverks- og sikkerhetsutfordringer i SQL Server-speiling
Ved oppsett SQL Server-databasespeiling, et aspekt som ofte overses er rollen til nettverkskonfigurasjon og sikkerhetsinnstillinger. Feil 1418, som indikerer at servernettverksadressen ikke kan nås, er ofte forårsaket av underliggende nettverksproblemer. Selv når de riktige portene (1433 og 5022) er åpnet og brannmurer er deaktivert, kan andre nettverkselementer som ruting og DNS-konfigurasjon forårsake kommunikasjonsfeil. Det er viktig å sikre at begge serverne løser hverandres IP-adresser riktig, spesielt i miljøer med flere undernettverk.
En annen utfordring innebærer SQL Server-autentisering innstillinger under speiloppsettet. Databasespeiling krever at både hoved- og speilserveren autentiserer hverandre via sertifikater eller domenebasert autentisering (Kerberos). Hvis dette oppsettet ikke er riktig konfigurert, eller hvis det er feil i sikkerhetsprotokollene mellom de to serverne, kan feil 1418 oppstå. I tillegg må SQL Server-tjenestekontoer ha de riktige tillatelsene på begge maskinene, spesielt tilgang til speilende endepunkter.
Til slutt kan valg av operativsystem også påvirke hvordan speiling oppfører seg. Ulike Windows-versjoner kan håndtere TCP-tilkoblinger forskjellig, spesielt når det gjelder hvordan de administrerer brannmurregler og nettverkstrafikkruting. Hvis operativsystemet til en av serverne har utdaterte eller feilaktige nettverksdrivere, kan kommunikasjonen mellom serverne mislykkes. Å sikre at operativsystemet er oppdatert med de nyeste oppdateringene og at de riktige tjenestene kjører er avgjørende for å løse tilkoblingsproblemer som Feil 1418.
Vanlige spørsmål om SQL Server Mirroring Setup og Error 1418
- Hva forårsaker Feil 1418 i SQL Server-speiling?
- Feil 1418 er vanligvis forårsaket av en kommunikasjonsfeil mellom de to serverne. Dette kan skyldes brannmurinnstillinger, feil mirroring endpointseller problemer med nettverkstilkobling.
- Hvordan kan jeg sjekke om portene mine er åpne for SQL Server-speiling?
- Bruk telnet kommando eller et skript som f.eks New-Object System.Net.Sockets.TcpClient i PowerShell for å teste om portene 1433 og 5022 er åpne.
- Må begge serverne være i samme domene for speiling?
- Nei, men domeneautentisering kan forenkle prosessen. Ellers må du bruke sertifikatbasert autentisering for å sikre mirroring endpoints.
- Hva er rollen til endepunktet i databasespeiling?
- De CREATE ENDPOINT kommandoen oppretter nettverksgrensesnittet som lar SQL Server-forekomster kommunisere under speiling. Hver server må ha et fungerende speilende endepunkt.
- Kan jeg speile databaser på forskjellige SQL Server-versjoner?
- Nei, databasespeiling krever at begge SQL Server-forekomstene er på samme versjon og utgave for å fungere ordentlig.
Siste tanker om å løse databasespeilingsfeil 1418
Databasespeilingsfeil som Feil 1418 er ofte forårsaket av nettverksproblemer mellom servere. Å sikre at de riktige portene er åpne, brannmurer er konfigurert og endepunkter er riktig konfigurert, kan løse dette problemet.
I tillegg vil validering av nettverkstilgang med verktøy som PowerShell og sikre at autentiseringsprotokoller er konsistente mellom servere forbedre sjansene for suksess. Å følge disse trinnene kan bidra til å oppnå pålitelig SQL Server-speiling for operasjoner med høy ytelse.
Referanser og ressurser for databasespeilingsløsninger
- Detaljer om konfigurasjon og feilsøking av SQL Server-speiling, inkludert feil 1418 og endepunktinnstillinger, finner du på Microsoft SQL-dokumentasjon .
- En omfattende veiledning for konfigurering av brannmurregler og nettverksfeilsøking for SQL Server-speiling er tilgjengelig på Windows-brannmurkonfigurasjon .
- PowerShell-skript for porttesting og nettverksverifisering mellom SQL Server-forekomster er tilgjengelige på PowerShell-dokumentasjon .
- For Python-socket-programmeringsteknikker som brukes til å teste servertilkobling, besøk Python Socket Module .