Domanda

Qualcuno sa di eventuali migliori prassi consolidate per l'esecuzione dei servizi di Windows (nel mio caso, sviluppate in .NET), in modo tale che lo faranno (automaticamente) il failover correttamente a un altro server, a fini di alta disponibilità?

I principali modi in cui posso vedere questo essere fatto sono o avviare il server secondario quando richiesto (nel qual caso ci deve essere qualcosa di monitorare l'altro server), o avere entrambi i servizi in esecuzione insieme (in questo caso di cui hanno bisogno per la sincronizzazione il loro lavoro in modo da non cercare di fare le stesse cose).

C'è un modello o un modello per questo tipo di problema? So che la situazione esatta farà una grande differenza, ma sembra come un problema abbastanza comune.

Grazie

Giovanni

È stato utile?

Soluzione

Ecco cosa ha funzionato per me.

da un punto di un'infrastruttura avrete bisogno di avere 2 server Windows che vengono raggruppati. (2 scatole standard di Windows Server farà, il pezzo Clustering possono essere installati e configurati, la maggior parte delle sys amministratori dovrebbero sapere come fare questo.) Quindi, installare il servizio su entrambi i nodi del cluster e li hanno entrambi spenti e impostato su manuale avviare. Successivamente, aggiungere una risorsa cluster per l'amministratore di Windows Cluster per il vostro servizio che gestirà accendere e spegnere il vostro servizio su qualunque nodo è attivo. Lasciate che il cluster Windows gestire quando il servizio è in esecuzione e sul quale nodo. Questa è la parte più facile del vostro servizio di clustering.

Dal punto cavalletto di servizio, si vuole progettare il servizio in modo che possa essere il più possibile senza stato. Questa è una specie di consiglio zoppo ma in realtà dipende da ciò che il servizio sta facendo. Nella progettazione, solo supporre che al somepoint durante la vita del codice si fermerà nel momento peggiore possibile. Come sarà il servizio sul nodo 2 sapere dove pick-up in cui node1 lasciato? Questa è la parte più difficile che avete bisogno di progettare per. A seconda di cosa il vostro servizio sta facendo è possibile lasciare l'ultima operazione completata in una tabella db o un file di dati condivisi. Si potrebbe anche avere inizio fin dall'inizio e doppio controllo se tale attività è stata completata o meno prima di agire su di esso.

Anche in questo caso, è davvero andando a dipendere da ciò che il servizio deve compiere. Spero che questo aiuti.

Altri suggerimenti

avere sia in esecuzione tutto il tempo è probabilmente la soluzione più semplice, ma è necessario per garantire che non si va al di sopra di carico del 50%, altrimenti quando uno non riesce, l'altro viene sovraccaricata e forse riuscire anche.

Per sincronizzare, utilizzare un database transazionale. Cercando di scrivere il proprio sincronizzazione di solito causare bug.

Se è possibile avere entrambi i servizi di lavoro - è meglio. è necessario assicurarsi che essi sono apolidi o sanno come gestire questione di stato, e la Banca dati saranno sincronizzati tra di loro. In un no single point of failure - si spingerà il problema al DB, e non ci si può avere un cluster attivo attiva 2 nodi, e lasciare che la produzione DB gestire i problemi di sincronizzazione

.

Credo che il modo migliore per trattare con failover a livello di rete, ove possibile. Virtual IPS affacciati ambienti con bilanciamento del carico o failover / primaria è un buon modo per evitare di dover scrivere il codice per scenari di failover.

Nei casi in cui è necessario gestire il failover in codice:

  1. Verifica connessione / chiamata di servizio
  2. Se test fallisce, inviare avvisi
  3. failover su next "registrata" endpoint del servizio

Ci sono due approcci di base.

  1. clienti sono consapevoli di indirizzo differente endpoint e l'interruttore come necessario o come indicato da un altro meccanismo di servizi o configurazione. (Come ad esempio la applicazione Stocktrader demo fa questo.)

  2. I clienti non sono a conoscenza, e si utilizza un approccio di bilanciamento del carico di rete standard che può anche fornire il failover. F5 è un prodotto. Ci sono molti altri. Si tratta essenzialmente come un NAT per i servizi di tutte le richieste passano per la NLB ed e li invia a un server e inoltra la risposta al chiamante. Questi prodotti monitorare i Servizi e utilizzare solo quelli che sono in su. Inoltre spesso è possibile personalizzarlo con le regole di averlo assegnare nuove richieste ai server basati sui carichi di lavoro dei server. server Windows ha questa funzionalità built-in una certa misura.

In entrambi i casi lo si fa, è molto molto più facile se le chiamate di servizio sono "senza stato".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top