Ripristino di emergenza in Azure Service FabricDisaster recovery in Azure Service Fabric

Una parte fondamentale della distribuzione a disponibilità elevata consiste nel garantire la resistenza dei servizi a tutti i tipi di errori.A critical part of delivering high-availability is ensuring that services can survive all different types of failures. Ciò è particolarmente importante per gli errori imprevisti e incontrollabili.This is especially important for failures that are unplanned and outside of your control. Questo articolo descrive alcune modalità di errore comuni che possono generare situazioni di emergenza se non organizzate e gestite correttamente.This article describes some common failure modes that could be disasters if not modeled and managed correctly. Illustra anche le mitigazioni e le azioni da intraprendere in presenza di un'emergenza.It also discuss mitigations and actions to take if a disaster happened anyway. L'obiettivo consiste nel limitare o eliminare il rischio di tempi di inattività o di perdita di dati quando si verificano errori, pianificati o imprevisti.The goal is to limit or eliminate the risk of downtime or data loss when they occur failures, planned or otherwise, occur.

Evitare situazioni di emergenzaAvoiding disaster

L'obiettivo principale di Service Fabric è di aiutare a organizzare sia l'ambiente che i servizi in modo che gli errori comuni non generino situazioni di emergenza.Service Fabric's primary goal is to help you model both your environment and your services in such a way that common failure types are not disasters.

Esistono, in generale, due tipi di scenari di emergenza/errore:In general there are two types of disaster/failure scenarios:

  1. Errori hardware o softwareHardware or software faults
  2. Errori operativiOperational faults

Errori hardware e softwareHardware and software faults

Gli errori hardware e software sono imprevedibili.Hardware and software faults are unpredictable. Il modo più semplice per resistere a questi errori è eseguire più copie del servizio estese oltre i limiti dell'errore hardware o software.The easiest way to survive faults is running more copies of the service spanned across hardware or software fault boundaries. Se ad esempio il servizio è in esecuzione solo in un computer specifico, l'errore di quel computer determina una situazione di emergenza per il servizio.For example, if your service is running only on one particular machine, then the failure of that one machine is a disaster for that service. Questo tipo di emergenza può essere evitato semplicemente eseguendo il servizio in più computer.The simple way to avoid this disaster is to ensure that the service is actually running on multiple machines. Anche i test sono necessari per garantire che l'errore in un unico computer non interrompa l'esecuzione del servizio.Testing is also necessary to ensure the failure of one machine doesn't disrupt the running service. La pianificazione della capacità offre la possibilità di creare un'istanza sostitutiva in un'altra posizione ed evita che la riduzione della capacità sovraccarichi i servizi restanti.Capacity planning ensures a replacement instance can be created elsewhere and that reduction in capacity doesn't overload the remaining services. Lo stesso criterio funziona indipendentemente dall'errore che si sta tentando di evitare.The same pattern works regardless of what you're trying to avoid the failure of. Ad esempio,For example. se si teme il guasto di una rete SAN, si può eseguire i servizi in più reti SAN.if you're concerned about the failure of a SAN, you run across multiple SANs. Se si teme la perdita di un rack di server, si può eseguire il servizio su più rack.If you're concerned about the loss of a rack of servers, you run across multiple racks. Se si teme la perdita di dati nei data center, è consigliabile eseguire il servizio in più data center o aree di Azure.If you're worried about the loss of datacenters, your service should run across multiple Azure regions or datacenters.

Quando si esegue il servizio con questo tipo di modalità estesa, il rischio che si verifichino alcuni tipi di errori simultanei è ancora presente, tuttavia i singoli errori e anche quelli multipli di un determinato tipo (ad esempio un errore in una VM o un collegamento di rete) vengono gestiti automaticamente, di conseguenza non generano più una situazione di emergenza.When running in this type of spanned mode, you're still subject to some types of simultaneous failures, but single and even multiple failures of a particular type (ex: a single VM or network link failing) are automatically handled (and so no longer a "disaster"). Service Fabric prevede molti meccanismi per espandere il cluster e far tornare disponibili i nodi e i servizi.Service Fabric provides many mechanisms for expanding the cluster and handles bringing failed nodes and services back. Service Fabric consente anche di eseguire molte istanze dei servizi per evitare che questi tipi di errori imprevisti si trasformino in vere e proprie emergenze.Service Fabric also allows running many instances of your services in order to avoid these types of unplanned failures from turning into real disasters.

Esistono alcuni motivi per cui l'esecuzione di una distribuzione sufficientemente grande da coprire gli errori potrebbe non essere fattibile.There may be reasons why running a deployment large enough to span over failures is not feasible. Potrebbe, ad esempio, richiedere l'implementazione di risorse hardware aggiuntive il cui costo sarebbe sproporzionato rispetto alla possibilità che si verifichi un errore.For example, it may take more hardware resources than you're willing to pay for relative to the chance of failure. Quando si lavora con le applicazioni distribuite, è possibile che gli hop di comunicazione o i costi di replica di stato aggiuntivi su distanze geografiche causino una latenza inaccettabile.When dealing with distributed applications, it could be that additional communication hops or state replication costs across geographic distances causes unacceptable latency. La posizione di questa linea di confine varia per ogni applicazione.Where this line is drawn differs for each application. Per gli errori software, in particolare, l'errore potrebbe risiedere nel servizio che si sta tentando di scalare.For software faults specifically, the fault could be in the service that you are trying to scale. La creazione di più copie, in questo caso, non previene la situazione di emergenza perché la condizione di errore è correlata a tutte le istanze.In this case more copies don't prevent the disaster, since the failure condition is correlated across all the instances.

Errori operativiOperational faults

Anche se il servizio è esteso in tutto il mondo con molte ridondanze, può comunque essere soggetto a eventi di emergenza,Even if your service is spanned across the globe with many redundancies, it can still experience disastrous events. ad esempio se qualcuno riconfigura accidentalmente il nome DNS per il servizio o lo elimina definitivamente.For example, if someone accidentally reconfigures the dns name for the service, or deletes it outright. Si supponga, ad esempio, di disporre di un servizio di Service Fabric con stato e che un utente lo abbia eliminato inavvertitamente.As an example, let's say you had a stateful Service Fabric service, and someone deleted that service accidentally. A meno che non esistano altre mitigazioni, il servizio e il relativo stato sono ormai eliminati.Unless there's some other mitigation, that service and all of the state it had is now gone. Questi tipi di emergenze operative ("errori") richiedono mitigazioni e procedure per il ripristino diverse rispetto ai normali errori imprevisti.These types of operational disasters ("oops") require different mitigations and steps for recovery than regular unplanned failures.

I modi migliori per evitare questi tipi di errori operativi consistono nelThe best ways to avoid these types of operational faults are to

  1. limitare l'accesso operativo all'ambienterestrict operational access to the environment
  2. controllare rigorosamente le operazioni pericolosestrictly audit dangerous operations
  3. favorire l'automazione, impedire le modifiche manuali o fuori banda e convalidare le modifiche specifiche nell'ambiente effettivo prima di applicarleimpose automation, prevent manual or out of band changes, and validate specific changes against the actual environment before enacting them
  4. assicurarsi che le operazioni distruttive siano "soft".ensure that destructive operations are "soft". Le operazioni soft non hanno effetto immediato o possono essere annullate entro un intervallo di tempo.Soft operations don't take effect immediately or can be undone within some time window

Per evitare gli errori operativi, Service Fabric offre alcuni meccanismi come il controllo degli accessi in base al ruolo per le operazioni nel cluster.Service Fabric provides some mechanisms to prevent operational faults, such as providing role-based access control for cluster operations. La maggior parte di questi errori operativi richiede tuttavia attività organizzative e altri sistemi.However, most of these operational faults require organizational efforts and other systems. Service Fabric offre alcuni meccanismi per resistere agli errori operativi, i più noti dei quali sono il backup e il ripristino per i servizi con stato.Service Fabric does provide some mechanism for surviving operational faults, most notably backup and restore for stateful services.

Gestione degli erroriManaging failures

Lo scopo di Service Fabric è quasi sempre la gestione automatica degli errori.The goal of Service Fabric is almost always automatic management of failures. Per gestire alcuni tipi di errori, tuttavia, i servizi devono essere dotati di codice aggiuntivo.However, in order to handle some types of failures, services must have additional code. Altri tipi di errori non devono essere risolti automaticamente per motivi di continuità e sicurezza aziendali.Other types of failures should not be automatically addressed because of safety and business continuity reasons.

Gestione di errori singoliHandling single failures

I computer singoli possono essere soggetti a errori per ogni genere di motivo.Single machines can fail for all sorts of reasons. Alcuni di questi sono causati dall'hardware, ad esempio i guasti agli alimentatori e all'hardware di rete.Some of these are hardware causes, like power supplies and networking hardware failures. Altri errori sono nel software.Other failures are in software. Questi errori includono quelli del sistema operativo effettivo e del servizio stesso.These include failures of the actual operating system and the service itself. Service Fabric rileva automaticamente questi tipi di errori, inclusi i casi in cui il computer viene isolato dagli altri computer a causa di problemi di rete.Service Fabric automatically detects these types of failures, including cases where the machine becomes isolated from other machines due to network issues.

Indipendentemente dal tipo di servizio, l'esecuzione di una sola istanza provoca tempi di inattività del servizio se per qualche motivo l'unica copia del codice genera un errore.Regardless of the type of service, running a single instance results in downtime for that service if that single copy of the code fails for any reason.

Per gestire qualsiasi errore singolo, la soluzione più semplice è assicurarsi di eseguire i servizi in più nodi come impostazione predefinita.In order to handle any single failure, the simplest thing you can do is to ensure that your services run on more than one node by default. Per i servizi senza stato questo risultato si ottiene con un InstanceCount maggiore di 1.For stateless services, this can be accomplished by having an InstanceCount greater than 1. Per i servizi con stato il requisito minimo è sempre un TargetReplicaSetSize e un MinReplicaSetSize di almeno 3.For stateful services, the minimum recommendation is always a TargetReplicaSetSize and MinReplicaSetSize of at least 3. L'esecuzione di più copie del codice del servizio assicura al servizio la capacità di gestire qualsiasi errore automaticamente.Running more copies of your service code ensures that your service can handle any single failure automatically.

Gestione di errori coordinatiHandling coordinated failures

Gli errori coordinati possono verificarsi in un cluster a causa di modifiche ed errori nell'infrastruttura pianificati o imprevisti di o modifiche software pianificate.Coordinated failures can happen in a cluster due to either planned or unplanned infrastructure failures and changes, or planned software changes. Service Fabric crea le zone di infrastruttura che sperimentano errori coordinati come domini di errore.Service Fabric models infrastructure zones that experience coordinated failures as Fault Domains. Le aree che sperimentano le modifiche software coordinate vengono modellate come domini di aggiornamento.Areas that will experience coordinated software changes are modeled as Upgrade Domains. Altre informazioni sui domini di errore e di aggiornamento sono disponibili in questo documento che descrive la definizione e la topologia del cluster.More information about fault and upgrade domains is in this document that describes cluster topology and definition.

Per impostazione predefinita, Service Fabric considera i domini di errore e di aggiornamento quando si pianificano le posizioni di esecuzione dei servizi.By default Service Fabric considers fault and upgrade domains when planning where your services should run. Per impostazione predefinita, Service Fabric tenta di assicurarsi che i servizi vengano eseguiti in diversi domini di errore e di aggiornamento in modo che, se si verificano modifiche pianificate o impreviste, i servizi rimangano disponibili.By default, Service Fabric tries to ensure that your services run across several fault and upgrade domains so if planned or unplanned changes happen your services remain available.

Si supponga, ad esempio, che un guasto all'alimentazione determini un errore in un rack di computer.For example, let's say that failure of a power source causes a rack of machines to fail simultaneously. Se sono in esecuzione più copie del servizio, la perdita di molti computer per l'errore del dominio di errore si trasforma in un altro semplice esempio di errore singolo per un determinato servizio.With multiple copies of the service running the loss of many machines in fault domain failure turns into just another example of single failure for a given service. Questo perché la gestione dei domini di errore è essenziale per garantire la disponibilità elevata dei servizi.This is why managing fault domains is critical to ensuring high availability of your services. Quando si esegue Azure Service Fabric, i domini di errore vengono gestiti automaticamente.When running Service Fabric in Azure, fault domains are managed automatically. In altri ambienti potrebbero non esserlo.In other environments they may not be. Se si creano cluster in locale, assicurarsi di eseguire il mapping e di pianificare il layout del dominio di errore correttamente.If you're building your own clusters on premises, be sure to map and plan your fault domain layout correctly.

I domini di aggiornamento sono utili per la creazione di aree in cui il software viene aggiornato nello stesso momento.Upgrade Domains are useful for modeling areas where software is going to be upgraded at the same time. Per questo motivo, i domini di aggiornamento spesso definiscono anche i limiti in cui software viene disattivato durante gli aggiornamenti pianificati.Because of this, Upgrade Domains also often define the boundaries where software is taken down during planned upgrades. Gli aggiornamenti sia di Service Fabric che dei servizi seguono lo stesso modello.Upgrades of both Service Fabric and your services follow the same model. Per altre informazioni sulla distribuzione degli aggiornamenti, i domini di aggiornamento e il modello di integrità di Service Fabric che aiuta a impedire che eventuali modifiche accidentali abbiano ripercussioni sul cluster e sul servizio, vedere questi documenti:For more on rolling upgrades, upgrade domains, and the Service Fabric health model that helps prevent unintended changes from impacting the cluster and your service, see these documents:

È possibile visualizzare il layout del cluster usando la mappa del cluster disponibile in Service Fabric Explorer:You can visualize the layout of your cluster using the cluster map provided in Service Fabric Explorer:

Nodi distribuiti nei domini di errore in Service Fabric Explorer
Nodes spread across fault domains in Service Fabric Explorer

Nota

La creazione di aree di errore, la distribuzione di aggiornamenti, l'esecuzione di molte istanze del codice e dello stato del servizio, le regole di posizionamento che garantiscono l'esecuzione dei servizi nei domini di errore e di aggiornamento e il monitoraggio dell'integrità incorporato sono solo alcune delle funzionalità che Service Fabric offre per evitare che normali errori e problemi operativi si trasformino in situazioni di emergenza.Modeling areas of failure, rolling upgrades, running many instances of your service code and state, placement rules to ensure your services run across fault and upgrade domains, and built-in health monitoring are just some of the features that Service Fabric provides in order to keep normal operational issues and failures from turning into disasters.

Gestione di errori hardware o software simultaneiHandling simultaneous hardware or software failures

Si è parlato finora degli errori singoli.Above we talked about single failures. Come si può vedere, questi errori possono essere facilmente gestiti sia per i servizi senza stato che per quelli con stato semplicemente mantenendo più copie del codice (e dello stato) in esecuzione in domini di errore e di aggiornamento.As you can see, are easy to handle for both stateless and stateful services just by keeping more copies of the code (and state) running across fault and upgrade domains. I servizi possono essere interessati anche da più errori casuali simultanei.Multiple simultaneous random failures can also happen. Questi errori hanno più probabilità di generare un'emergenza effettiva.These are more likely to lead to an actual disaster.

Errori casuali che portano a errori del servizioRandom failures leading to service failures

Si supponga che il servizio abbia un InstanceCount di 5 e che diversi nodi in cui sono in esecuzione tali istanze generino tutti un errore nello stesso momento.Let's say that the service had an InstanceCount of 5, and several nodes running those instances all failed at the same time. Service Fabric risponde creando automaticamente istanze sostitutive in altri nodi.Service Fabric responds by automatically creating replacement instances on other nodes. Continuerà a creare sostituzioni fino a quando il servizio non avrà raggiunto di nuovo il numero di istanze desiderato.It will continue creating replacements until the service is back to its desired instance count. Si supponga come altro esempio che sia presente un servizio senza stato con un InstanceCount di -1, vale a dire che il servizio viene eseguito in tutti i nodi validi del cluster.As another example, let's say there was a stateless service with an InstanceCountof -1, meaning it runs on all valid nodes in the cluster. In alcune di queste istanze si verifica un errore.Let's say that some of those instances were to fail. In questo caso Service Fabric nota che il servizio non è nello stato desiderato e tenta di creare le istanze nei nodi in cui mancano.In this case, Service Fabric notices that the service is not in its desired state, and tries to create the instances on the nodes where they are missing.

Per i servizi con stato la situazione varia a seconda che il servizio abbia uno stato persistente o meno.For stateful services the situation depends on whether the service has persisted state or not. Dipende inoltre dal numero di repliche del servizio e dal numero di quelle che hanno generato un errore.It also depends on how many replicas the service had and how many failed. La determinazione di una situazione di emergenza per un servizio con stato e la relativa gestione seguono tre fasi:Determining whether a disaster occurred for a stateful service and managing it follows three stages:

  1. Determinazione di una eventuale perdita del quorumDetermining if there has been quorum loss or not
    • Si ha una perdita del quorum ogni volta che la maggioranza delle repliche di un servizio con stato è inattiva nello stesso momento, inclusa la replica primaria.A quorum loss is any time a majority of the replicas of a stateful service are down at the same time, including the Primary.
  2. Determinazione se la perdita del quorum è permanente o menoDetermining if the quorum loss is permanent or not
    • Nella maggior parte dei casi gli errori sono temporanei.Most of the time, failures are transient. I processi, i nodi e le VM vengono riavviati e le partizioni di rete vengono corrette.Processes are restarted, nodes are restarted, VMs are relaunched, network partitions heal. In alcuni casi invece gli errori sono permanenti.Sometimes though, failures are permanent.
      • Per i servizi senza stato persistente, un errore di uno o più quorum di repliche determina immediatamente una perdita del quorum permanente.For services without persisted state, a failure of a quorum or more of replicas results immediately in permanent quorum loss. Quando Service Fabric rileva la perdita del quorum in un servizio non persistente con stato, passa immediatamente alla fase 3 dichiarando una (potenziale) perdita di dati.When Service Fabric detects quorum loss in a stateful non-persistent service, it immediately proceeds to step 3 by declaring (potential) dataloss. La dichiarazione di una perdita di dati è motivata dal fatto che Service Fabric sa che non ha senso attendere che le repliche tornino disponibili, perché sarebbero comunque vuote.Proceeding to dataloss makes sense because Service Fabric knows that there's no point in waiting for the replicas to come back, because even if they were recovered they would be empty.
      • Per i servizi permanenti con stato, un errore di uno o più quorum di repliche fa sì che Service Fabric inizi ad attendere che le repliche tornino disponibili e il quorum venga ripristinato.For stateful persistent services, a failure of a quorum or more of replicas causes Service Fabric to start waiting for the replicas to come back and restore quorum. Si verifica di conseguenza un'interruzione del servizio per tutte le operazioni di scrittura alla partizione interessata (o "set di repliche") del servizio.This results in a service outage for any writes to the affected partition (or "replica set") of the service. Le operazioni di lettura restano invece ancora possibili con una minore garanzia di coerenza.However, reads may still be possible with reduced consistency guarantees. La quantità di tempo predefinita in cui Service Fabric attende il ripristino del quorum è infinita, poiché il passaggio successivo è un evento di perdita di dati (potenziale) e comporta altri rischi.The default amount of time that Service Fabric waits for quorum to be restored is infinite, since proceeding is a (potential) dataloss event and carries other risks. È possibile ignorare il valore predefinito di QuorumLossWaitDuration ma non è consigliato.Overriding the default QuorumLossWaitDuration value is possible but is not recommended. In questa fase tutti gli sforzi dovrebbero invece essere rivolti a ripristinare le repliche interrotte.Instead at this time, all efforts should be made to restore the down replicas. Questa operazione comporta il ripristino dei nodi interrotti e la garanzia che possano montare nuovamente le unità in cui hanno archiviato lo stato persistente locale.This requires bringing the nodes that are down back up, and ensuring that they can remount the drives where they stored the local persistent state. Se la perdita del quorum è causata da un errore di processo, Service Fabric tenta automaticamente di ricreare i processi e di riavviare le repliche in essi contenute.If the quorum loss is caused by process failure, Service Fabric automatically tries to recreate the processes and restart the replicas inside them. Se l'operazione non riesce, Service Fabric segnala errori di integrità.If this fails, Service Fabric reports health errors. Se questi errori possono essere risolti, le repliche tornano in genere disponibili.If these can be resolved then the replicas usually come back. In alcuni casi invece non possono tornare disponibili,Sometimes, though, the replicas can't be brought back. ad esempio perché tutte le unità hanno generato errori o perché i computer sono rimasti in qualche modo fisicamente danneggiati.For example, the drives may all have failed, or the machines physically destroyed somehow. In questi casi ci si trova in presenza di un evento di perdita del quorum permanente.In these cases, we now have a permanent quorum loss event. Per indicare a Service Fabric di smettere di attendere che le repliche tornino disponibili, un amministratore di cluster deve determinare quali partizioni di quali servizi sono interessate e chiamare l'API Repair-ServiceFabricPartition -PartitionId o System.Fabric.FabricClient.ClusterManagementClient.RecoverPartitionAsync(Guid partitionId).To tell Service Fabric to stop waiting for the down replicas to come back, a cluster administrator must determine which partitions of which services are affected and call the Repair-ServiceFabricPartition -PartitionId or System.Fabric.FabricClient.ClusterManagementClient.RecoverPartitionAsync(Guid partitionId) API. Questa API consente di specificare l'ID della partizione da spostare fuori dalla perdita del quorum e inserirla nella perdita di dati potenziale.This API allows specifying the ID of the partition to move out of QuorumLoss and into potential dataloss.

Nota

Non è mai sicuro usare questa API diversamente dal modo per cui è stata studiata quando si ha a che fare con partizioni specifiche.It is never safe to use this API other than in a targeted way against specific partitions.

  1. Determinazione se vi è stata una effettiva perdita di dati e ripristino da backupDetermining if there has been actual data loss, and restoring from backups
    • Quando Service Fabric chiama il metodo OnDataLossAsync, è sempre a causa di una sospetta perdita di dati.When Service Fabric calls the OnDataLossAsync method it is always because of suspected dataloss. Service Fabric assicura che la chiamata venga inviata alla migliore replica rimanente,Service Fabric ensures that this call is delivered to the best remaining replica. vale a dire quella che ha fatto i maggiori progressi.This is whichever replica has made the most progress. Il motivo per cui si parla di sospetta perdita di dati è che è possibile che la replica rimanente abbia in realtà lo stesso stato della replica primaria quando si è interrotta l'esecuzione.The reason we always say suspected dataloss is that it is possible that the remaining replica actually has all same state as the Primary did when it went down. Senza quello stato con cui fare il confronto, tuttavia, non esiste un modo utile che dica a Service Fabric o agli operatori l'effettivo stato.However, without that state to compare it to, there's no good way for Service Fabric or operators to know for sure. A questo punto Service Fabric sa che anche le altre repliche non torneranno disponibili.At this point, Service Fabric also knows the other replicas are not coming back. Si arriva così alla decisione di smettere di attendere che la perdita del quorum si risolva da sola.That was the decision made when we stopped waiting for the quorum loss to resolve itself. La migliore linea di azione per il servizio è in genere bloccare la situazione e attendere un intervento specifico da parte dell'amministratore.The best course of action for the service is usually to freeze and wait for specific administrative intervention. Cosa fa quindi una tipica implementazione del metodo OnDataLossAsync?So what does a typical implementation of the OnDataLossAsync method do?
    • Registra prima di tutto che è stato generato un evento OnDataLossAsync e genera tutti i necessari avvisi amministrativi.First, log that OnDataLossAsync has been triggered, and fire off any necessary administrative alerts.
    • A questo punto di solito sospende l'esecuzione e attende ulteriori decisioni e interventi manuali.Usually at this point, to pause and wait for further decisions and manual actions to be taken. Questo perché, anche se sono disponibili backup, può essere necessario prepararli.This is because even if backups are available they may need to be prepared. Se, ad esempio, due servizi diversi coordinano le informazioni, i backup potrebbero dover essere modificati per garantire che dopo il ripristino le informazioni di cui si occupano i due servizi siano coerenti.For example, if two different services coordinate information, those backups may need to be modified in order to ensure that once the restore happens that the information those two services care about is consistent.
    • Sono spesso presenti anche alcuni dati di telemetria e di scarico dal servizio.Often there is also some other telemetry or exhaust from the service. Questi metadati possono essere contenuti in altri servizi o in registri.This metadata may be contained in other services or in logs. Queste informazioni possono essere usate per determinare se sono state ricevute ed elaborate chiamate nella replica primaria che non erano presenti nel backup o replicate in questa replica specifica.This information can be used needed to determine if there were any calls received and processed at the primary that were not present in the backup or replicated to this particular replica. Queste chiamate devono essere riprodotte o aggiunte al backup prima che sia fattibile il ripristino.These may need to be replayed or added to the backup before restoration is feasible.
    • Confronta lo stato della replica rimanente con quello contenuto in tutti i backup disponibili.Comparisons of the remaining replica's state to that contained in any backups that are available. Se si usano le raccolte affidabili di Service Fabric, sono disponibili strumenti e processi per questa operazione, descritti in questo articolo.If using the Service Fabric reliable collections then there are tools and processes available for doing so, described in this article. L'obiettivo consiste nel vedere se lo stato all'interno della replica è sufficiente o anche cosa potrebbe mancare nel backup.The goal is to see if the state within the replica is sufficient, or also what the backup may be missing.
    • Dopo che è stato eseguito il confronto ed è stato completato l'eventuale ripristino necessario, il codice del servizio dovrebbe restituire true se sono state apportate modifiche allo stato.Once the comparison is done, and if necessary the restore completed, the service code should return true if any state changes were made. Se la replica ha determinato che era la migliore copia disponibile dello stato e che non state apportate modifiche, restituisce false.If the replica determined that it was the best available copy of the state and made no changes, then return false. True indica che qualsiasi altra replica rimanente potrebbe ora essere incoerente con questa.True indicates that any other remaining replicas may now be inconsistent with this one. Le repliche rimanenti verranno eliminate e ricreate da questa replica.They will be dropped and rebuilt from this replica. False indica che non sono state apportate modifiche allo stato, pertanto le altre repliche possono conservare le informazioni che includono.False indicates that no state changes were made, so the other replicas can keep what they have.

È estremamente importante che gli autori del servizio applichino gli scenari di errore e di potenziale perdita di dati prima che i servizi vengano distribuiti nell'ambiente di produzione.It is critically important that service authors practice potential dataloss and failure scenarios before services are ever deployed in production. Per evitare la possibilità di perdere i dati, è importante eseguire periodicamente il backup dello stato di tutti i servizi con stato in un archivio con ridondanza geografica.To protect against the possibility of dataloss, it is important to periodically back up the state of any of your stateful services to a geo-redundant store. È inoltre necessario assicurarsi di poterlo ripristinare.You must also ensure that you have the ability to restore it. Poiché i backup di numerosi servizi diversi vengono eseguiti in momenti diversi, è necessario assicurarsi che dopo un ripristino i servizi abbiano una visione coerente tra loro.Since backups of many different services are taken at different times, you need to ensure that after a restore your services have a consistent view of each other. Si consideri, ad esempio, una situazione in cui un servizio genera un numero e lo archivia, quindi lo invia a un altro servizio che lo archivia a sua volta.For example, consider a situation where one service generates a number and stores it, then sends it to another service that also stores it. Dopo un ripristino, potrebbe accadere che il secondo servizio abbia conservato il numero mentre il primo servizio non lo conservi più perché il relativo backup non includeva tale operazione.After a restore, you might discover that the second service has the number but the first does not, because it's backup didn't include that operation.

Se si scopre che le repliche rimanenti non sono sufficienti per continuare in uno scenario di perdita di dati e non è possibile ricostruire lo stato del servizio dai dati di telemetria o di scarico, la frequenza dei backup determina il migliore obiettivo del punto di ripristino (RPO) possibile.If you find out that the remaining replicas are insufficient to continue from in a dataloss scenario, and you can't reconstruct service state from telemetry or exhaust, the frequency of your backups determines your best possible recovery point objective (RPO). Service Fabric include molti strumenti per testare vari scenari di errore, tra cui il quorum permanente e la perdita di dati che richiede il ripristino da un backup.Service Fabric provides many tools for testing various failure scenarios, including permanent quorum and dataloss requiring restoration from a backup. Questi scenari sono inclusi nell'ambito degli strumenti di testabilità di Service Fabric, gestiti dal servizio di analisi degli errori.These scenarios are included as a part of Service Fabric's testability tools, managed by the Fault Analysis Service. Altre informazioni su questi strumenti e criteri sono disponibili qui.More info on those tools and patterns is available here.

Nota

Anche i servizi di sistema possono subire la perdita del quorum, con un impatto commisurato al servizio in questione.System services can also suffer quorum loss, with the impact being specific to the service in question. La perdita del quorum nel servizio di denominazione, ad esempio, incide sulla risoluzione dei nomi, mentre la perdita del quorum nel servizio di gestione failover blocca la creazione e i failover di nuovi servizi.For instance, quorum loss in the naming service impacts name resolution, whereas quorum loss in the failover manager service blocks new service creation and failovers. Mentre i servizi di sistema di Service Fabric seguono lo stesso criterio dei servizi per la gestione dello stato, non è consigliabile tentare di spostarli dalla perdita del quorum alla potenziale perdita di dati.While the Service Fabric system services follow the same pattern as your services for state management, it is not recommended that you should attempt to move them out of Quorum Loss and into potential dataloss. È invece consigliabile cercare supporto per determinare una soluzione che sia mirata alla situazione specifica.The recommendation is instead to seek support to determine a solution that is targeted to your specific situation. È di solito preferibile attendere semplicemente che le repliche tornino disponibili.Usually it is preferable to simply wait until the down replicas return.

Disponibilità del cluster di Service FabricAvailability of the Service Fabric cluster

In linea generale, il cluster di Service Fabric è un ambiente altamente distribuito senza singoli punti di errore.Generally speaking, the Service Fabric cluster itself is a highly distributed environment with no single points of failure. Un errore di un qualsiasi nodo non comporta problemi di disponibilità o di affidabilità per il cluster, principalmente perché i servizi di sistema di Service Fabric seguono le stesse linee guida indicate in precedenza: vengono sempre eseguiti con tre o più repliche per impostazione predefinita e i servizi di sistema che sono senza stato vengono eseguiti in tutti i nodi.A failure of any one node will not cause availability or reliability issues for the cluster, primarily because the Service Fabric system services follow the same guidelines provided earlier: they always run with three or more replicas by default, and those system services that are stateless run on all nodes. I livelli di rete e di rilevamento degli errori di Service Fabric sono completamente distribuiti.The underlying Service Fabric networking and failure detection layers are fully distributed. La maggior parte dei servizi di sistema può essere ricreata dai metadati del cluster o sa come risincronizzare il proprio stato da altre posizioni.Most system services can be rebuilt from metadata in the cluster, or know how to resynchronize their state from other places. La disponibilità del cluster può venire compromessa se i servizi di sistema incorrono in situazioni di perdita del quorum come quelle descritte sopra.The availability of the cluster can become compromised if system services get into quorum loss situations like those described above. In questi casi potrebbe non essere possibile eseguire determinate operazioni in un cluster, come avviare un aggiornamento o distribuire nuovi servizi, ma il cluster resterebbe attivo.In these cases you may not be able to perform certain operations on the cluster like starting an upgrade or deploying new services, but the cluster itself is still up. I servizi attivi già in esecuzione rimarranno in esecuzione in queste condizioni a meno che non richiedano operazioni di scrittura per i servizi di sistema per continuare a funzionare.Services on already running will remain running in these conditions unless they require writes to the system services to continue functioning. Se ad esempio Gestione failover è incluso nella perdita del quorum, tutti i servizi continueranno l'esecuzione, ma quelli che genereranno un errore non saranno in grado di riavviarsi automaticamente, poiché il riavvio prevede il coinvolgimento del servizio Gestione failover.For example, if the Failover Manager is in quorum loss all services will continue to run, but any services that fail will not be able to automatically restart, since this requires the involvement of the Failover Manager.

Errori di un data center o un'area di AzureFailures of a datacenter or Azure region

In casi rari è possibile che un data center fisico diventi temporaneamente non disponibile a causa di un'interruzione dell'alimentazione o della perdita della connettività di rete.In rare cases, a physical data center can become temporarily unavailable due to loss of power or network connectivity. In questi casi i cluster e i servizi di Service Fabric presenti nel data center o nell'area di Azure non saranno disponibili.In these cases, your Service Fabric clusters and services in that datacenter or Azure region will be unavailable. I dati saranno tuttavia preservati.However, your data is preserved. Per i cluster in esecuzione in Azure, è possibile visualizzare gli aggiornamenti sulle interruzioni del servizio nella pagina Stato di Azure.For clusters running in Azure, you can view updates on outages on the Azure status page. Nell'improbabile caso in cui un data center fisico venga danneggiato parzialmente o completamente, tutti i cluster di Service Fabric in esso ospitati o i servizi presenti nei cluster potrebbero andare persi.In the highly unlikely event that a physical data center is partially or fully destroyed, any Service Fabric clusters hosted there or the services inside them could be lost. Sono inclusi tutti gli stati di cui non è stato eseguito il backup al di fuori del data center o dell'area.This includes any state not backed up outside of that datacenter or region.

Esistono due diverse strategie per superare un errore permanente o prolungato di un singolo data center o di un'area.There's two different strategies for surviving the permanent or sustained failure of a single datacenter or region.

  1. Eseguire cluster di Service Fabric distinti in più aree e usare un qualche sistema per il failover e il failback tra questi ambienti.Run separate Service Fabric clusters in multiple such regions, and utilize some mechanism for failover and fail-back between these environments. Questo tipo di modello multi-cluster attivo-attivo o attivo-passivo richiede codice di gestione e operativo aggiuntivo.This sort of multi-cluster active-active or active-passive model requires additional management and operations code. Richiede anche il coordinamento di backup dai servizi in un unico data center o un'unica area in modo che siano disponibili in altri data center o altre aree quando uno di loro genera un errore.This also requires coordination of backups from the services in one datacenter or region so that they are available in other datacenters or regions when one fails.
  2. Eseguire un singolo cluster di Service Fabric che si estende su più data center o più aree.Run a single Service Fabric cluster that spans multiple datacenters or regions. La configurazione minima supportata per questo modello è tre data center o aree.The minimum supported configuration for this is three datacenters or regions. Il numero consigliato di aree o data center è cinque.The recommended number of regions or datacenters is five. Questo modello richiede una topologia di cluster più complessa.This requires a more complex cluster topology. Il vantaggio che offre, tuttavia, è che l'errore di un data center o di un'area viene convertito da emergenza in errore normale.However, the benefit of this model is that failure of one datacenter or region is converted from a disaster into a normal failure. Questi errori possono essere gestiti dai meccanismi usati per i cluster in una singola area.These failures can be handled by the mechanisms that work for clusters within a single region. I domini di errore, i domini di aggiornamento e le regole di posizionamento di Service Fabric assicurano che i carichi di lavoro vengano distribuiti in modo da essere in grado di tollerare gli errori normali.Fault domains, upgrade domains, and Service Fabric's placement rules ensure workloads are distributed so that they tolerate normal failures. Per altre informazioni sui criteri che aiutano a far funzionare i servizi in questo tipo di cluster, leggere l'articolo relativo ai criteri di posizionamento.For more information on policies that can help operate services in this type of cluster, read up on placement policies

Errori casuali che generano errori del clusterRandom failures leading to cluster failures

In Service Fabric è presente il concetto di nodi di inizializzazione.Service Fabric has the concept of Seed Nodes. Si tratta di nodi che gestiscono la disponibilità del cluster sottostante.These are nodes that maintain the availability of the underlying cluster. Questi nodi aiutano a garantire che il cluster rimanga attivo stabilendo lease con altri nodi e servendo da tiebreaker durante determinati tipi di errori di rete.These nodes help to ensure the cluster remains up by establishing leases with other nodes and serving as tiebreakers during certain kinds of network failures. Se si verificano errori casuali che rimuovono la maggior parte dei nodi di inizializzazione nel cluster e i nodi non vengono ripristinati, il cluster si arresta automaticamente.If random failures remove a majority of the seed nodes in the cluster and they are not brought back, the cluster automatically shuts down. In Azure i nodi di inizializzazione vengono gestiti automaticamente: vengono distribuiti nei domini di errore e di aggiornamento disponibili e, se dal cluster viene rimosso un singolo nodo di inizializzazione, ne verrà creato un altro al suo posto.In Azure, Seed Nodes are automatically managed: they are distributed over the available fault and upgrade domains, and if a single seed node is removed from the cluster another one will be created in its place.

Sia nei cluster di Service Fabric autonomi che in Azure il "tipo di nodo primario" è quello che esegue il seeding.In both standalone Service Fabric clusters and Azure, the "Primary Node Type" is the one that runs the seeds. Quando si definisce un tipo di nodo primario, Service Fabric sfrutta automaticamente il numero di nodi forniti creando fino a 9 nodi di inizializzazione e 9 repliche di ognuno dei servizi di sistema.When defining a primary node type, Service Fabric will automatically take advantage of the number of nodes provided by creating up to 9 seed nodes and 9 replicas of each of the system services. Se un set di errori casuali interrompe l'esecuzione contemporaneamente della maggior parte delle repliche dei servizi di sistema, i servizi del sistema saranno coinvolti nella perdita del quorum, come descritto sopra.If a set of random failures takes out a majority of those system service replicas simultaneously, the system services will enter quorum loss, as we described above. Se la maggior parte dei nodi di inizializzazione viene persa, il cluster si arresta subito dopo.If a majority of the seed nodes are lost, the cluster will shut down soon after.

Passaggi successiviNext steps