Il blog di Sandro Rizzetto

Sql Server Mirroring problemi con certificati

 

Probabilmente questo post non lo leggerà nessuno, in quanto il Mirroring in Sql Server è già deprecated da un paio di versioni e difficilmente qualcuno lo andrà a implementare su una nuova installazione. Comunque sia, per mia reference, segnalo causa e risoluzione di una issue avuta oggi su una configurazione Principal-Mirror a cui volevo aggiungere un nodo Witness.

Premessa: tutto funzionava bene (e come è noto, non si sarebbe dovuto toccare ciò che funziona !) ma tentando di infilare il terzo nodo, non solo  non andava la nuova configurazione, ma ha smesso di funzionare anche la precedente!

L'errore che compariva era il fatidico 1418 che può avere una moltitudine di cause:

The server network address "TCP://srv-xxx:portnumber" can not be reached or does not exist. Check the network address name and that the ports for the local and remote endpoints are operational. (Microsoft SQL Server, Error: 1418)

Dapprima ho perso tempo a capire se un Sql Server Express (su Win10) fosse un partner giusto per il ruolo witness, e poi ho ricominciato a fare tutta la configurazione di Master Key, Certificati, Login, User, Endpoint sui 3 server scambiando le informazioni (ovviamente non avevo un dominio, cosa che avrebbe facilitato molto la cosa!)

Senza entrare nei dettagli dei passi fatti, il succo di mezza giornata di improperi è stato risolto quando ho dato un'occhiata all'EventiViewer  (da pessimo sistemista quale sono lo avrei dovuto fare subito) e ho visto un:

Database mirroring connection error 5 'Connection handshake failed. The certificate used by the peer is invalid due to the following reason: Certificate not found. State 89.' for 'TCP://srv-f3-02:5026'.

La causa era duplice:

- Creando i certificati da Management Studio questi venivano scritti sul disco con una ACL molto strana: Owner unknow, diritti incoerenti; bisogna come Adminstrator prendersi l'ownership e dare i diritti all'account sotto il quale gira il servizio MSSQLSERVER (perché voi fate un account specifico vero ??? non è che mi usate LocalSystem o Network Service??)

- I 3 nuovi certificati è meglio se vengono creati con uno Start_Date inferiore a "now"; il witness_server infatti aveva la regional setting diversa (quindi GMT +x diversa) e gli altri due server lo vedevano come "futuro"

Restava da capire perché la vecchia configurazione avesse smesso di funzionare: i certificati creati a suo tempo, probabilmente erano scaduti e cercando di rifare la partnership non funzionavano più!!

Morale quando si crea un certificato meglio specificare le due date:

CREATE CERTIFICATE Mirror_Certificate
WITH SUBJECT = 'Mirror Certificate',
START_DATE = '2017-01-01',    -- basta un giorno prima di oggi
EXPIRY_DATE = '2035-12-31'    -- l'INPS dice che sarò in pensione…. forse!!
GO

Commenti (1) -

  • Tito Boeri

    10/03/2017 21:32:03 | Rispondi

    Corcazzo che sei in pensione nel 2035!
    Tito (Boeri)

Aggiungi Commento

Copyright © 1997-2017 Sandro Rizzetto | All Rights Reserved | Riproduzione delle fotografie vietata | Powered by me