Continuità aziendale e database di ripristino, SQL Server in LinuxBusiness continuity and database recovery - SQL Server on Linux

Questo articolo offre una panoramica delle soluzioni di continuità aziendale per la disponibilità elevata e il ripristino di emergenza in SQL Server.This article provides an overview of business continuity solutions for high availability and disaster recovery in SQL Server.

Un'attività comune di cui deve tenere conto chiunque esegua una distribuzione di SQL Server è verificare se tutte le istanze cruciali di SQL Server e i database all'interno delle stesse sono disponibili quando gli utenti finali e aziendali ne hanno bisogno, ovvero in orario di ufficio o 24 ore su 24.One common task everyone deploying SQL Server has to account for is making sure that all mission critical SQL Server instances and the databases within them are available when the business and end users need them, whether that is 9 to 5 or around the clock. L'obiettivo è fare in modo che le interruzioni delle attività aziendali siano minime o inesistenti.The goal is to keep the business up and running with minimal or no interruption. Questo concetto è noto anche come continuità aziendale.This concept is also known as business continuity.

SQL Server 2017 introduce molte nuove funzionalità o miglioramenti di quelle già esistenti, alcune delle quali riguardano la disponibilità.SQL Server 2017 introduces many new features or enhancements to existing ones, some of which are for availability. L'elemento più importante aggiunto a SQL Server 2017 è il supporto per SQL Server nelle distribuzioni di Linux.The biggest addition to SQL Server 2017 is the support for SQL Server on Linux distributions. Per un elenco completo delle nuove funzionalità in SQL Server 2017, vedere l'argomento Novità di SQL Server.For a full list of the new features in SQL Server 2017, see the topic What's new in SQL Server.

Questo articolo descrive in particolare gli scenari di disponibilità in SQL Server 2017, nonché le funzionalità di disponibilità, sia nuove che ottimizzate, offerte da SQL Server 2017.This article is focused on covering the availability scenarios in SQL Server 2017 as well as the new and enhanced availability features in SQL Server 2017. Gli scenari includono soluzioni ibride in grado di coprire le distribuzioni di SQL Server sia in Windows Server che in Linux, nonché le soluzioni che consentono di aumentare il numero di copie leggibili di un database.The scenarios include hybrid ones that will be able to span SQL Server deployments on both Windows Server and Linux, as well as ones that can increase the number of readable copies of a database. L'articolo non tratta le opzioni di disponibilità esterne a SQL Server, ad esempio quelle offerte dalla virtualizzazione, ma tutti gli argomenti trattati qui riguardano le installazioni di SQL Server in una macchina virtuale guest sia nel cloud pubblico, sia in hosting in un server hypervisor locale.While this article does not cover availability options external to SQL Server, such as those provided by virtualization, everything discussed here applies to SQL Server installations inside a guest virtual machine whether in the public cloud or hosted by anon premises hypervisor server.

Scenari di SQL Server 2017 che usano le funzionalità di disponibilitàSQL Server 2017 scenarios using the availability features

Gruppi di disponibilità, FCI e log shipping possono essere usati in molti modi e non necessariamente solo ai fini della disponibilità.Availability groups, FCIs, and log shipping can be used in a variety of ways, and not necessarily just for availability purposes. Le funzionalità di disponibilità possono essere usate sostanzialmente in quattro modi:There are four main ways the availability features can be used:

  • Disponibilità elevataHigh availability
  • Ripristino di emergenzaDisaster recovery
  • Migrazioni e aggiornamentiMigrations and upgrades
  • Scalabilità orizzontale delle copie leggibili di uno o più databaseScaling out readable copies of one or more databases

Ogni sezione descrive le funzionalità rilevanti che possono essere usate in uno scenario specifico.Each section will discuss the relevant features that can be used for that particular scenario. L'unica funzionalità non coperta è la replica di SQL Server.The one feature not covered is SQL Server replication. Benché non sia ufficialmente designata come funzionalità di disponibilità dell'ambiente Always On, viene spesso usata per rendere ridondanti i dati in determinati scenari.While not officially designated as an availability feature under the Always On umbrella, it is often used for making data redundant in certain scenarios. La replica verrà aggiunta a SQL Server in Linux in una versione futura.Replication will be added to SQL Server on Linux in a future release.

Importante

Le funzionalità di disponibilità di SQL Server non sostituiscono la necessità di adottare una strategia efficace e adeguatamente testata per il backup e il ripristino, aspetto imprescindibile di qualsiasi soluzione di disponibilità.The SQL Server availability features do not replace the requirement to have a robust, well tested backup and restore strategy, the most fundamental building block of any availability solution.

Disponibilità elevataHigh availability

È importante verificare che il database o le istanze di SQL Server siano disponibili nel caso in cui si riscontri un problema a livello locale in un data center o una singola area del cloud.Ensuring that SQL Server instances or database are available in the case of a problem that is local to a data center or single region in the cloud region is important. Questa sezione spiega in che modo le funzionalità di disponibilità di SQL Server possono essere utili per svolgere tale attività.This section will cover how the SQL Server availability features can assist in that task. Tutte le funzionalità descritte sono disponibili sia in Windows Server che in Linux.All of the features described are available both on Windows Server as well as on Linux.

Gruppi di disponibilità Always OnAlways on availability groups

Introdotti in SQL Server 2012, i gruppi di disponibilità Always On offrono una protezione a livello di database in cui ogni transazione di un database viene inviata a un'altra istanza, nota come replica, che contiene una copia di quel database in uno stato speciale.Introduced in SQL Server 2012, Always On Availability Groups (availability groups) provide database-level protection by sending each transaction of a database to another instance, known as a replica, that contains a copy of that database in a special state. Un gruppo di disponibilità può essere distribuito in Standard o Enterprise Edition.An availability group can be deployed on Standard or Enterprise Editions. Le istanze che fanno parte di un gruppo di disponibilità possono essere autonome o istanze del cluster di failover Always On (FCI), descritte nella sezione successiva.The instances participating in an availability group can be either standalone or Always On Failover Cluster Instances (FCIs, described in the next section). Poiché le transazioni vengono inviate a una replica in tempo reale, i gruppi di disponibilità sono consigliati in situazioni che richiedono valori inferiori per il punto di recupero e gli obiettivi del tempo di recupero.Since the transactions are sent to a replica as they happen, availability groups are recommended where there are requirements for lower recovery point and recovery time objectives. Lo spostamento dei dati tra le repliche può essere sincrono o asincrono. Enterprise Edition consente fino a tre repliche, inclusa quella primaria, sincrone.Data movement between replicas can be synchronous or asynchronous, with Enterprise Edition allowing up to three replicas (including the primary) as synchronous. Un gruppo di disponibilità ha una copia del database con funzioni di lettura/scrittura complete nella replica primaria, mentre tutte le repliche secondarie non ricevono le transazioni direttamente da utenti finali o applicazioni.An availability group has one fully read/write copy of the database which is on the primary replica, while all secondary replicas cannot receive transactions directly from end users or applications.

Nota

Always On è un termine generico per le funzionalità di disponibilità in SQL Server e si riferisce sia ai gruppi di disponibilità che alle istanze del cluster di failover.Always On is an umbrella term for the availability features in SQL Server and covers both availability groups and FCIs. Always On non è il nome della funzionalità gruppo di disponibilità.Always On is not the name of the availability group feature.

Poiché i gruppi di disponibilità assicurano la protezione solo a livello di database e non a livello di istanza, tutto ciò che non viene acquisito nel log delle transazioni o configurato nel database dovrà essere sincronizzato manualmente per ogni replica secondaria.Because availability groups only provide database-level, and not instance-level, protection, anything not captured in the transaction log or configured in the database will need to manually synchronized for each secondary replica. Alcuni esempi di oggetti che devono essere sincronizzati manualmente sono gli accessi a livello di istanza, i server collegati e SQL Server Agent - processi.Some examples of objects that must be synchronized manually are logins at the instance level, linked servers, and SQL Server Agent jobs.

Un gruppo di disponibilità ha anche un altro componente denominato listener, che consente alle applicazioni e agli utenti finali di connettersi senza dover sapere quale istanza di SQL Server ospita la replica primaria.An availability group also has another component called the listener, which allows applications and end users to connect without needing to know which SQL Server instance is hosting the primary replica. Ogni gruppo di disponibilità ha il proprio listener.Each availability group would have its own listener. Le implementazioni del listener sono leggermente diverse in Windows Server rispetto a Linux, ma la funzionalità e la modalità di utilizzo sono le stesse.While the implementations of the listener are slightly different on Windows Server versus Linux, the functionality it provides and how it is used is the same. L'immagine seguente illustra un gruppo di disponibilità basato su Windows Server che usa Windows Server Failover Cluster (WSFC).The picture below shows a Windows Server-based availability group which is using a Windows Server Failover Cluster (WSFC). Sia in Linux che in Windows Server è necessario un cluster sottostante a livello di sistema operativo per la disponibilità.An underlying cluster at the OS layer is required for availability whether it is on Linux or Windows Server. Nell'esempio viene illustrata una configurazione semplice a due server, o nodi, in cui un cluster WSFC è il cluster sottostante.The example shows a simple two server, or node, configuration where a WSFC is the underlying cluster.

Gruppo di disponibilità semplice

Standard Edition ed Enterprise Edition hanno valori massimi diversi per quanto riguarda le repliche.Standard and Enterprise Edition have different maximums when it comes to replicas. Un gruppo di disponibilità in Standard Edition, noto come gruppo di disponibilità di base, supporta due repliche, una primaria e una secondaria, con un singolo database nel gruppo di disponibilità.An availability group in Standard Edition, known as a Basic Availability Group, supports two replicas (one primary and one secondary) with only a single database in the availability group. Enterprise Edition non solo consente la configurazione di più database in un unico gruppo di disponibilità, ma può anche avere fino a nove repliche in totale, una primaria e otto secondarie.Enterprise Edition not only allows multiple databases to be configured in a single availability group, but also can have up to nine total replicas (one primary, eight secondary). Enterprise Edition offre anche altri vantaggi facoltativi, ad esempio le repliche secondarie leggibili, la possibilità di eseguire copie di backup da una replica secondaria e altro ancora.Enterprise edition also provides other optional benefits such as readable secondary replicas, the ability to make backups off of a secondary replica, and more.

Nota

Il mirroring del database, deprecato in SQL Server 2012, non è disponibile nella versione di SQL Server per Linux e non verrà aggiunto.Database mirroring, which was deprecated in SQL Server 2012, is not available on the Linux version of SQL Server nor will it be added. I clienti che usano ancora il mirroring del database devono iniziare a pianificare la migrazione ai gruppi di disponibilità, che sostituiscono il mirroring del database.Customers still using database mirroring should start planning to migrate to availability groups, which is the replacement for database mirroring.

Rispetto alla disponibilità, i gruppi di disponibilità possono offrire il failover automatico o manuale.When it comes to availability, availability groups can provide either automatic or manual failover. Il failover automatico può verificarsi se è configurato lo spostamento sincrono dei dati e i database nella replica primaria e secondaria sono in uno stato sincronizzato.Automatic failover can occur if synchronous data movement is configured and the database on the primary and secondary replica are in a synchronized state. Purché venga usato il listener e l'applicazione usi una versione successiva di .NET (3.5 con un aggiornamento o 4.0 e versioni successive), il failover viene gestito in modo da non incidere, o avere un impatto minimo, sugli utenti finali se si usa un listener.As long as the listener is used and the application uses a later version of .NET (3.5 with an update, or 4.0 and above), the failover should be handled with minimal to no impact to end users if a listener is utilized. Il failover per trasformare una replica secondaria nella nuova replica primaria può essere configurato in modo da essere automatico o manuale e in genere viene misurato in secondi.Failover to make a secondary replica the new primary replica can be configured to be automatic or manual, and generally is measured in seconds.

Nell'elenco che segue sono evidenziate alcune differenze tra Windows Server e Linux rispetto ai gruppi di disponibilità:The list below highlights some differences with availability groups on Windows Server versus Linux:

  • A causa delle differenze di funzionamento del cluster sottostante tra Linux e Windows Server, tutti i failover, manuali o automatici, dei gruppi di disponibilità vengono eseguiti usando il cluster di Linux.Due to differences in the way the underlying cluster works on Linux and Windows Server, all failovers (manual or automatic) of availability groups are done via the cluster on Linux. Nelle distribuzioni dei gruppi di disponibilità basati su Windows Server i failover manuali devono essere eseguiti usando SQL Server.On Windows Server-based availability group deployments, manual failovers must be done via SQL Server. I failover automatici vengono gestiti dal cluster sottostante sia in Windows Server che in Linux.Automatic failovers are handled by the underlying cluster on both Windows Server and Linux.
  • In SQL Server 2017 la configurazione consigliata per i gruppi di disponibilità in Linux sarà un minimo di tre repliche.In SQL Server 2017, the recommended configuration for availability groups on Linux will be a minimum of three replicas. Ciò è dovuto il modo in cui funziona il cluster sottostante.This is due to the way that the underlying clustering works. Una soluzione ottimizzata per una configurazione a due repliche sarà disponibile dopo il rilascio.An improved solution for a two replica configuration will come post-release.
  • In Linux il nome comune usato da ogni listener è definito in DNS e non nel cluster come in Windows Server.On Linux, the common name used by each listener is defined in DNS and not in the cluster like it is on Windows Server.

In SQL Server 2017 sono disponibili alcune nuove funzionalità e miglioramenti ai gruppi di disponibilità:In SQL Server 2017, there are some new features and enhancements to availability groups:

  • Tipi di clusterCluster types
  • REQUIRED_SECONDARIES_TO_COMMITREQUIRED_SECONDARIES_TO_COMMIT
  • Supporto ottimizzato di Microsoft Distributed Transaction Coordinator (DTC) per le configurazioni basate su Windows ServerEnhanced Microsoft Distributor Transaction Coordinator (DTC) support for Windows Server-based configurations
  • Scenari di scalabilità orizzontale aggiuntivi per i database di sola lettura (descritti più avanti in questo articolo)Additional scale out scenarios for read only databases (described later in this article)
Tipi di cluster del gruppo di disponibilità Always OnAlways on availability group cluster types

Il modulo di disponibilità predefinito del clustering in Windows Server è abilitato da una funzionalità nota come clustering di failover.The built-in availability form of clustering in Windows Server is enabled via a feature named Failover Clustering. Consente di creare un cluster WSFC da usare con un gruppo di disponibilità o un'istanza FCI.It allows you to build a WSFC to be used with an availability group or FCI. L'integrazione per i gruppi di disponibilità e le istanze FCI è gestita da DLL delle risorse compatibili con i cluster presenti in SQL Server.Integration for availability groups and FCIs is provided by a cluster-aware resource DLLs shipped by SQL Server.

Ogni distribuzione di Linux supportata ha una propria versione della soluzione cluster Pacemaker.Each supported Linux distribution ships its own version of the Pacemaker cluster solution. SQL Server 2017 in Linux supporta l'uso di Pacemaker.SQL Server 2017 on Linux supports the use of Pacemaker. Pacemaker è una soluzione in stack aperta che ogni distribuzione può quindi integrare con il proprio stack.Pacemaker is an open stack solution that each distribution can then integrate with their stack. Benché le distribuzioni includano Pacemaker, la soluzione non è integrata come la funzionalità Clustering di failover in Windows Server.While the distributions ship Pacemaker, it is not as integrated as the Failover Clustering feature in Windows Server.

Un cluster di failover di Windows Server e una soluzione Pacemaker sono più simili che differenti.A WSFC and Pacemaker are more similar than different. Entrambi consentono di prendere singoli server e combinarli in una configurazione per garantire la disponibilità e si basano su concetti come risorse, vincoli (anche se implementati in modo diverso), failover e così via.Both provide a way to take individual servers and combine them in a configuration to provide availability, and have concepts of things like resources, constraints (even if implemented differently), failover, and so on. Per supportare Pacemaker sia per i gruppi di disponibilità, sia per le configurazioni di istanze FCI, incluso ad esempio il failover automatico, Microsoft offre il pacchetto mssql-server-ha, che è simile, ma non esattamente identico, alle DLL delle risorse in un cluster WSFC, per Pacemaker.To support Pacemaker for both availability group and FCI configurations including things like automatic failover, Microsoft provides the mssql-server-ha package, which is similar to, but not exactly the same as, the resource DLLs in a WSFC, for Pacemaker. Una delle differenze tra un cluster WSFC e Pacemaker è che non esistono risorse nome di rete in Pacemaker, ovvero il componente che consente di astrarre il nome del listener (o il nome dell'istanza FCI) per un cluster WSFC.One of the differences between a WSFC and Pacemaker is that there is no network name resource in Pacemaker, which is the component that helps to abstract the name of the listener (or the name of the FCI) on a WSFC. DNS offre la risoluzione dei nomi in Linux.DNS provides that name resolution on Linux.

A causa della differenza nello stack di cluster, è necessario apportare alcune modifiche per i gruppi di disponibilità, poiché SQL Server deve gestire alcuni dei metadati gestiti in modo nativo da un cluster WSFC.Because of the difference in the cluster stack, some changes needed to be made for availability groups because SQL Server has to handle some of the metadata that is natively handled by a WSFC. La modifica più [!IMPORTANT] è l'introduzione di un tipo di cluster per un gruppo di disponibilità.The most [!IMPORTANT] change is the introduction of a cluster type for an availability group. È archiviato in sys.availability_groups nelle colonne cluster_type e cluster_type_desc.This is stored in sys.availability_groups in the cluster_type and cluster_type_desc columns. Esistono tre tipi di cluster:There are three cluster types:

  • WSFCWSFC
  • ExternalExternal
  • NessunoNone

Tutti i gruppi di disponibilità che richiedono la disponibilità devono usare un cluster sottostante, che nel caso di SQL Server 2017 significa un cluster WSFC o Pacemaker.All availability groups that require availability must use an underlying cluster, which in the case of SQL Server 2017 means a WSFC or Pacemaker. Per i gruppi di disponibilità basati su Windows Server che usano un cluster WSFC sottostante, il tipo di cluster predefinito è WSFC e non è necessario impostarlo.For Windows Server-based availability groups that use an underlying WSFC, the default cluster type is WSFC and does not need to be set. Per i gruppi di disponibilità basati su Linux, quando si crea il gruppo di disponibilità, il tipo di cluster deve essere impostato su External.For Linux-based availability groups, when creating the availability group, the cluster type must be set to External. L'integrazione con Pacemaker viene configurata dopo la creazione del gruppo di disponibilità, mentre per un cluster WSFC, si esegue al momento della creazione.The integration with Pacemaker is configured after the availability group is created, whereas on a WSFC, it is done at creation time.

Un tipo di cluster None può essere usato con gruppi di disponibilità sia di Windows Server che di Linux.A cluster type of None can be used with both Windows Server and Linux availability groups. Impostare il tipo di cluster su None indica che il gruppo di disponibilità non richiede un cluster sottostante.Setting the cluster type to None means that the availability group does not require an underlying cluster. Ciò significa che SQL Server 2017 è la prima versione di SQL Server che supporta i gruppi di disponibilità senza un cluster, ma questo vantaggio è controbilanciato dal fatto che questa configurazione non è supportata come soluzione a disponibilità elevata.This means SQL Server 2017 is the first version of SQL Server to support availability groups without a cluster, but the tradeoff is that this configuration is not supported as a high availability solution.

Importante

SQL Server 2017 non consente di modificare un tipo di cluster per un gruppo di disponibilità dopo che è stato creato.SQL Server 2017 does not allow the ability to change a cluster type for an availability group after it is created. Non è quindi possibile trasformare un gruppo di disponibilità di tipo None in External o WSFC o viceversa.This means that an availability group cannot be switched from None to External or WSFC, or vice versa.

Per gli utenti che vogliono semplicemente aggiungere altre copie di sola lettura di un database o apprezzano le funzionalità offerte dai gruppi di disponibilità per la migrazione o gli aggiornamenti ma non vogliono essere vincolati all'ulteriore complessità di un cluster sottostante o alla replica, un gruppo di disponibilità con un tipo di cluster None è una soluzione ideale.For those who are only looking to just add additional read only copies of a database, or like what an availability group provides for migration/upgrades but do not want to be tied to the additional complexity of an underlying cluster or even the replication, an availability group with a cluster type of None is a perfect solution. Per altre informazioni, vedere le sezioni Migrazioni e aggiornamenti e Scalabilità orizzontale in lettura.For more information, see the sections Migrations and Upgrades and Read Scale-out.

La schermata riportata di seguito illustra il supporto per i diversi tipi di cluster in SSMS.The screenshot below shows the support for the different kinds of cluster types in SSMS. È necessario che sia in esecuzione la versione 17.1 o successiva.You must be running version 17.1 or later. La schermata seguente è tratta dalla versione 17.2.The screenshot below is from version 17.2.

Opzioni del gruppo di disponibilità SSMS

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITREQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

SQL Server 2016 ha incrementato il supporto per il numero di repliche sincrone da due a tre in Enterprise Edition.SQL Server 2016 increased support for the number of synchronous replicas from two to three in Enterprise Edition. Tuttavia, se una replica secondaria viene sincronizzata ma nell'altra si verifica un problema, non esiste un modo per controllare il comportamento in modo da indicare alla replica primaria di attendere la replica che si comporta in modo errato o consentirle di continuare.However, if one secondary replica was synchronized but the other was having a problem, there was no way to control the behavior to tell the primary to either wait for the misbehaving replica or to allow it to move on. Ciò significa che la replica primaria a un certo punto continuerebbe a ricevere traffico in scrittura anche se la replica secondaria non è in uno stato sincronizzato, ovvero si ha una perdita di dati nella replica secondaria.This means that the primary replica at some point would continue to receive write traffic even though the secondary replica would not be in a synchronized state, which means that there is data loss on the secondary replica. In SQL Server 2017 ora è disponibile un'opzione in grado di controllare il comportamento dell'azione che si verifica quando sono presenti repliche sincrone denominate REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT.In SQL Server 2017, there is now an option to be able to control the behavior of what happens when there are synchronous replicas named REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT. L'opzione funziona come indicato di seguito:The option works as follows:

  • Esistono tre valori possibili: 0, 1 e 2There are three possible values: 0, 1, and 2
  • Il valore è il numero di repliche secondarie che devono essere sincronizzate, con implicazioni per la perdita di dati, la disponibilità di gruppo di disponibilità e il failoverThe value is the number of secondary replicas that must be synchronized, which has implications for data loss, availability group availability, and failover
  • Per i cluster WSFC e il tipo di cluster None il valore predefinito è 0 e può essere impostato manualmente su 1 o 2For WSFCs and a cluster type of None, the default value is 0, and can be manually set to 1 or 2
  • Per il tipo di cluster External, per impostazione predefinita, il meccanismo di cluster imposta il valore, che può essere sostituito manualmente.For a cluster type of External, by default, the cluster mechanism will set this and it can be overridden manually. Per tre repliche sincrone, il valore predefinito sarà 1.For three synchronous replicas, the default value will be 1. In Linux, il valore per REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT è impostato sulla risorsa gruppo di disponibilità nel cluster.On Linux, the value for REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT is configured on the availability group resource in the cluster. In Windows viene impostato con Transact-SQL.On Windows, it is set via Transact-SQL.

Un valore superiore a 0 garantisce una maggiore protezione dei dati, poiché se il numero di repliche secondarie richiesto non è disponibile, la replica primaria non sarà disponibile finché non viene risolto.A value that is higher than 0 ensures higher data protection because if the required number of secondary replicas is not available, the primary will not be available until that is resolved. REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT influisce anche sul comportamento del failover, poiché il failover automatico non può verificarsi se il numero corretto di repliche secondarie non è nello stato appropriato.REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT also affects failover behavior since automatic failover could not occur if the right number of secondary replicas were not in the proper state. In Linux il valore 0 non consente il failover automatico, quindi in Linux, quando si usano repliche sincrone con failover automatico, il valore impostato deve essere superiore a 0 per ottenere il failover automatico.On Linux, a value of 0 will not allow automatic failover, so on Linux, when using synchronous with automatic failover, the value must be set higher than 0 to achieve automatic failover. 0 in Windows Server è il comportamento di SQL Server 2016 e versioni precedenti.0 on Windows Server is the SQL Server 2016 and earlier behavior.

Supporto avanzato per Microsoft Distributed Transaction CoordinatorEnhanced Microsoft distributed transaction coordinator support

Prima di SQL Server 2016, distribuire istanze FCI era l'unico modo per ottenere la disponibilità in SQL Server per le applicazioni che richiedono transazioni distribuite che usano automaticamente DTC.Before SQL Server 2016, the only way to get availability in SQL Server for applications that require distributed transactions which use DTC underneath the covers was to deploy FCIs. Una transazione distribuita può essere eseguita in due modi:A distributed transaction can be done in one of two ways:

  • Una transazione che si estende su più database nella stessa istanza di SQL ServerA transaction that spans more than one database in the same SQL Server instance
  • Una transazione che si estende su più di un'istanza di SQL Server o può implicare un'origine dati non di SQL ServerA transaction that spans more than one SQL Server instance or possibly involves a non-SQL Server data source

SQL Server 2016 ha introdotto un supporto parziale per DTC con i gruppi di disponibilità tipici del secondo scenario.SQL Server 2016 introduced partial support for DTC with availability groups that covered the latter scenario. SQL Server 2017 rappresenta un ulteriore passo avanti poiché supporta entrambi gli scenari con DTC.SQL Server 2017 completes the story by supporting both scenarios with DTC.

Un altro miglioramento apportato al supporto DTC per i gruppi di disponibilità consiste nel fatto che in SQL Server 2016 il supporto per DTC può essere abilitato per un gruppo di disponibilità solo quando si crea il gruppo e non si può aggiungere in un secondo momento.Another enhancement to DTC support for availability groups is that in SQL Server 2016, enabling support for DTC to an availability group could only be done when the availability group was created, and could not be added later. In SQL Server 2017 il supporto per DTC può essere aggiunto a un gruppo di disponibilità anche dopo la creazione del gruppo.In SQL Server 2017, DTC support can also be added to an availability group after it is created.

Nota

Il supporto per DTC può essere configurato solo per i database in istanze di SQL Server basate su Windows Server.DTC support can only be configured for databases in Windows Server-based SQL Server instances. Se DTC è un requisito per l'applicazione, è necessario usare Windows Server come sistema operativo per la distribuzione di SQL Server e non è possibile usare Linux.If DTC is an requirement for your application, you must use Windows Server as the OS for your SQL Server deployment, and cannot use Linux.

Istanze del cluster di failover Always OnAlways on failover cluster instances

Le installazioni in cluster sono una funzionalità di SQL Server a partire dalla versione 6.5.Clustered installations have been a feature of SQL Server since version 6.5. Le istanze FCI sono un metodo efficace per garantire la disponibilità per l'intera installazione di SQL Server, nota come istanza.FCIs are a proven method of providing availability for the entire installation of SQL Server, known as an instance. Ciò significa che tutti gli elementi all'interno dell'istanza, tra cui database, SQL Server Agent - processi, server collegati e così via, verranno spostati in un altro server nel caso in cui si verifichi un problema con il server sottostante.This means that everything inside the instance, including databases, SQL Server Agent jobs, linked servers, et al., will move to another server should the underlying server encounter a problem. Tutte le istanze FCI richiedono un'archiviazione condivisa, anche se disponibile attraverso la rete.All FCIs require some sort of shared storage, even if it is provided via networking. Le risorse dell'istanza FCI possono essere eseguite da, e di proprietà di, un solo nodo alla volta.The FCI’s resources can only be running and owned by one node at any given time. Nell'immagine seguente il primo nodo del cluster è proprietario dell'istanza FCI, quindi è anche proprietario delle risorse di archiviazione condivise associate, come indica la linea continua tra il nodo e la risorsa di archiviazione.In the picture below, the first node of the cluster owns the FCI, which also means it owns the shared storage resources associated with it denoted by the solid line to the storage.

Istanza del cluster di failover

Dopo un failover la proprietà cambia come illustra l'immagine seguente.After a failover, ownership changes as is seen in the picture below.

Dopo il failover

La perdita di dati è zero con un'istanza FCI, ma l'archiviazione condivisa sottostante è un singolo punto di errore poiché è presente una sola copia dei dati.There is zero data loss with an FCI, but the underlying shared storage is a single point of failure since there is one copy of the data. Le istanze FCI vengono spesso combinate con un altro metodo di disponibilità, ad esempio un gruppo di disponibilità o il log shipping, per avere copie ridondanti dei database.FCIs are often combined with another availability method, such as an availability group or log shipping, to have redundant copies of databases. Il metodo aggiuntivo distribuito deve usare una risorsa di archiviazione fisicamente separata dall'istanza FCI.The additional method deployed should use physically separate storage from the FCI. Quando l'istanza FCI effettua il failover a un altro nodo, si interrompe in un nodo e inizia in un altro, come se si spegnesse e riaccendesse un server.When the FCI fails over to another node, it stops on one node and starts on another, not unlike powering a server off and turning it on. Un'istanza FCI passa attraverso il normale processo di recupero, ovvero viene eseguito il rollforward di tutte le transazioni che lo richiedono e per tutte le transazioni incomplete viene eseguito il rollback.An FCI goes through the normal recovery process, meaning any transactions that need to be rolled forward will be, and any transactions that are incomplete will be rolled back. Di conseguenza, il database è coerente da un punto dati al momento dell'errore o del failover manuale, quindi non vi è perdita di dati.Therefore, the database is consistent from a data point to the time of the failure or manual failover, hence no data loss. I database sono disponibili solo al termine del recupero, quindi il tempo di recupero dipende da molti fattori ed è in genere più lungo del failover effettuato in un gruppo di disponibilità.Databases are only available after recovery is complete, so recovery time will depend on many factors, and will generally be longer than failing over an availability group. Lo svantaggio è che quando si esegue il failover in un gruppo di disponibilità, può essere necessario eseguire ulteriori operazioni per poter usare un database, ad esempio abilitare un processo di SQL Server Agent.The tradeoff is that when you fail over an availability group, there may be additional tasks required to make a database usable, such as enabling a SQL Server Agent jobs job.

Come il gruppo di disponibilità, le istanze FCI estrapolano il nodo del cluster sottostante in cui sono ospitate.Like an availability group, FCIs abstract which node of the underlying cluster is hosting it. Un'istanza FCI mantiene sempre lo stesso nome.An FCI always retains the same name. Le applicazioni e gli utenti finali non si connettono mai ai nodi e viene usato il nome univoco assegnato all'istanza FCI.Applications and end users never connect to the nodes; the unique name assigned to the FCI is used. Un'istanza FCI può far parte di un gruppo di disponibilità come una delle istanze in cui viene ospitata una replica primaria o secondaria.An FCI can participate in an availability group as one of the instances hosing either a primary or secondary replica.

Nell'elenco che segue sono evidenziate alcune differenze tra Windows Server e Linux rispetto alle istanze FCI:The list below highlights some differences with FCIs on Windows Server versus Linux:

  • In Windows Server un'istanza FCI è parte del processo di installazione.On Windows Server, an FCI is part of the installation process. Un'istanza FCI in Linux viene configurata dopo l'installazione di SQL Server.An FCI on Linux is configured after installing SQL Server.
  • Linux supporta solo una singola installazione di SQL Server per ogni host, in modo che tutte le istanze FCI siano un'istanza predefinita.Linux only supports a single installation of SQL Server per host, so all FCIs will be a default instance. Windows Server supporta fino a 25 istanze FCI per ogni WSFC.Windows Server supports up to 25 FCIs per WSFC.
  • Il nome comune usato dalle istanze FCI in Linux è definito in DNS e deve essere lo stesso della risorsa creata per l'istanza FCI.The common name used by FCIs in Linux is defined in DNS, and should be the same as the resource created for the FCI.

Log shippingLog shipping

Se il punto di recupero e gli obiettivi del tempo di recupero sono più flessibili o se i database non sono considerati cruciali, il log shipping è un'altra funzionalità di disponibilità collaudata in SQL Server.If recovery point and recovery time objectives are more flexible, or databases are not considered to be highly mission critical, log shipping is another proven availability feature in SQL Server. In base ai backup nativi di SQL Server, il processo per il log shipping genera automaticamente i backup del log delle transazioni, li copia in una o più istanze, note come warm standby e applica automaticamente i backup del log delle transazioni a tale standby.Based on SQL Server’s native backups, the process for log shipping automatically generates transaction log backups, copies them to one or more instances known as a warm standby, and automatically applies the transaction log backups to that standby. Il log shipping usa SQL Server Agent - processi per automatizzare il processo di backup, copia e applicazione dei backup del log delle transazioni.Log shipping uses SQL Server Agent jobs to automate the process of backing up, copying, and applying the transaction log backups.

Importante

In Linux SQL Server Agent - processi non è incluso come parte dell'installazione di SQL Server.On Linux, SQL Server Agent jobs is not included as part of the installation of SQL Server itself. È disponibile nel pacchetto mssql-server-Agent - processi, che deve a sua volta essere installato per usare il log shipping.It is available in the package mssql-server-Agent jobs which must also be installed to use log shipping.

Log shipping

Senza dubbio il principale vantaggio offerto dal log shipping in alcune capacità è che prende in considerazione l'errore umano.Arguably the biggest advantage of using log shipping in some capacity is that it accounts for human error. L'applicazione dei log delle transazioni può subire un ritardo.The application of transaction logs can be delayed. Quindi, se ad esempio qualcuno rilascia un oggetto UPDATE senza una clausola WHERE, lo standby può non contenere la modifica ed è quindi possibile usarlo mentre si ripara il sistema primario.Therefore, if someone issues something like an UPDATE without a WHERE clause, the standby may not have the change so you could switch to that while you repair the primary system. Benché il log shipping sia facile da configurare, il passaggio dall'istanza primaria al warm standby, noto come modifica del ruolo, è sempre manuale.While log shipping is easy to configure, switching from the primary to a warm standby, known as a role change, is always manual. Una modifica del ruolo viene avviata attraverso Transact-SQL e, come per un gruppo di disponibilità, tutti gli oggetti non acquisiti nel log delle transazioni devono essere sincronizzati manualmente.A role change is initiated via Transact-SQL, and like an availability group, all objects not captured in the transaction log must be manually synchronized. Il log shipping deve inoltre essere configurato per ogni database, mentre un singolo gruppo di disponibilità può contenere più database.Log shipping also needs to be configured per database, whereas a single availability group can contain multiple databases. A differenza di un gruppo di disponibilità o un'istanza FCI, il log shipping non è in grado di astrarre le modifiche di ruolo.Unlike an availability group or FCI, log shipping has no abstraction for a role change. Le applicazioni devono essere in grado di gestire questa situazione.Applications must be able to handle this. È possibile ricorrere a tecniche come l'alias DNS (CNAME), ma esistono pro e contro, ad esempio il tempo necessario per l'aggiornamento di DNS dopo il passaggio.Techniques such as a DNS alias (CNAME) could be employed, but there are pros and cons, such as the time it takes for DNS to refresh after the switch.

Ripristino di emergenzaDisaster recovery

Quando la località di disponibilità primaria è interessata da un evento catastrofico come un terremoto o un'inondazione, l'azienda deve essere pronta a portare i propri sistemi online in altre località.When your primary availability location experiences a catastrophic event like an earthquake or flood, the business must be prepared to have its systems come online elsewhere. Questa sezione spiega in che modo le funzionalità di disponibilità di SQL Server possono contribuire alla continuità delle attività.This section will cover how the SQL Server availability features can assist with business continuity.

Gruppi di disponibilità Always OnAlways on availability groups

Uno dei vantaggi offerti dai gruppi di disponibilità è che sia la disponibilità elevata che il ripristino di emergenza possono essere configurati usando una sola funzionalità.One of the benefits of availability groups is that both high availability and disaster recovery can be configured using a single feature. Se non è necessario garantire la disponibilità elevata anche per l'archiviazione condivisa, è molto più semplice avere repliche che sono locali in un data center per la disponibilità elevata e remote in altri data center per il ripristino di emergenza, ognuna con archiviazione separata.Without the requirement for ensuring that shared storage is also highly available, it is much easier to have replicas that are local in one data center for high availability, and remote ones in other data centers for disaster recovery each with separate storage. Avere copie aggiuntive del database è il compromesso per garantire la ridondanza.Having additional copies of the database is the tradeoff for ensuring redundancy. Di seguito è riportato un esempio di gruppo di disponibilità che si estende in più data center.An example of an availability group that spans multiple data centers is shown below. Una sola replica primaria è responsabile della sincronizzazione costante di tutte le repliche secondarie.One primary replica is responsible for keeping all secondary replicas synchronized.

Gruppo di disponibilità

All'esterno di un gruppo di disponibilità con tipo di cluster None, un gruppo di disponibilità richiede che tutte le repliche siano parte dello stesso cluster sottostante, sia che si tratti di WSFC o Pacemaker.Outside of an availability group with a cluster type of none, an availability group requires that all replicas are part of the same underlying cluster whether it is a WSFC or Pacemaker. Ciò significa che nell'immagine precedente il cluster WSFC viene esteso per lavorare in due diversi data center e questo accresce la complessità,This means that in the picture above, the WSFC is stretched to work in two different data centers which adds complexity. indipendentemente dalla piattaforma (Windows Server o Linux).regardless of the platform (Windows Server or Linux). L'estensione dei cluster oltre una certa distanza aggiunge complessità.Stretching clusters across distance adds complexity. Introdotto in SQL Server 2016, un gruppo di disponibilità distribuito consente a un gruppo di disponibilità di estendersi su gruppi di disponibilità configurati in cluster diversi.Introduced in SQL Server 2016, a distributed availability group allows an availability group to span availability groups configured on different clusters. In questo modo si disaccoppia il requisito in base al quale tutti i nodi devono far parte dello stesso cluster e si semplifica notevolmente la configurazione del ripristino di emergenza.This decouples the requirement to have the nodes all participate in the same cluster, which makes configuring disaster recovery much easier. Per altre informazioni sui gruppi di disponibilità distribuiti, vedere Gruppi di disponibilità distribuiti.For more information on distributed availability groups, see Distributed availability groups.

Gruppo di disponibilità distribuito

Istanze del cluster di failover Always OnAlways on failover cluster instances

Le istanze FCI possono essere usate per il ripristino di emergenza.FCIs can be used for disaster recovery. Come con un normale gruppo di disponibilità, il meccanismo di cluster sottostante deve essere esteso anche a tutte le posizioni e questo aggiunge complessità.As with a normal availability group, the underlying cluster mechanism must also be extended to all locations which adds complexity. C'è un'altra considerazione da fare per le istanze FCI: l'archiviazione condivisa.There is an additional consideration for FCIs: the shared storage. Gli stessi dischi devono essere disponibili nei siti primari e secondari, quindi è necessario un metodo esterno, ad esempio una funzionalità offerta dal produttore della risorsa di archiviazione a livello di hardware o l'uso di Replica di archiviazione in Windows Server, per garantire che i dischi utilizzati dall'istanza FCI esistano altrove.The same disks need to be available in the primary and secondary sites, so an external method such as functionality provided by the storage vendor at the hardware layer or using storage Replica in Windows Server, is required to ensure that the disks used by the FCI exist elsewhere.

FCI Always On

Log shippingLog shipping

Il log shipping è uno dei metodi usati da più tempo per il ripristino di emergenza dei database di SQL Server.Log shipping is one of the oldest methods of providing disaster recovery for SQL Server databases. Il log shipping viene spesso usato in combinazione con i gruppi di disponibilità e le istanze FCI per offrire un ripristino di emergenza semplice ed economico in situazioni che possono essere complesse a causa dell'ambiente, delle competenze amministrative o del budget.Log shipping is often used in conjunction with availability groups and FCIs to provide cost-effective and simpler disaster recovery where other options may be challenging due to environment, administrative skills, or budget. Analogamente alla disponibilità elevata per il log shipping, molti ambienti ritardano il caricamento di un log delle transazioni per tenere conto dell'errore umano.Similar to the high availability story for log shipping, many environments will delay the loading of a transaction log to account for human error.

Migrazioni e aggiornamenti Migrations and upgrades

Quando in un'azienda si distribuiscono nuove istanze o si aggiornano quelle meno recenti, non si possono tollerare interruzioni prolungate.When deploying new instances or upgrading old ones, a business cannot tolerate long outage. Questa sezione spiega come usare le funzionalità di disponibilità di SQL Server per ridurre al minimo il tempo di inattività durante processi pianificati come la modifica dell'architettura, il passaggio da un server a un altro, la modifica della piattaforma (ad esempio da Windows Server a Linux o viceversa) o durante l'applicazione di patch.This section will discuss how the availability features of SQL Server can be used to minimize the downtime in a planned architecture change, server switch, platform change (such as Windows Server to Linux or vice versa), or during patching.

Nota

Si possono usare anche altri metodi, ad esempio l'uso dei backup e il ripristino degli stessi in altre posizioni, per le migrazioni e gli aggiornamenti.Other methods, such as using backups and restoring them elsewhere, can also be used for migrations and upgrades. Tali metodi non sono trattati in questo documento.They are not discussed in this paper.

Gruppi di disponibilità Always OnAlways on availability groups

Un'istanza esistente che contiene uno o più gruppi di disponibilità può essere aggiornata sul posto a SQL Server 2017.An existing instance containing one or more availability groups can be upgraded in place to SQL Server 2017. L'operazione richiederà un certo tempo di inattività, che però si può ridurre al minimo con una corretta pianificazione.While this will require some amount of downtime, with the right amount of planning, it can be minimized.

Se l'obiettivo è la migrazione a nuovi server e non la modifica della configurazione (incluso il sistema operativo o la versione di SQL Server), tali server possono essere aggiunti come nodi al cluster sottostante esistente e aggiunti al gruppo di disponibilità.If the goal is to migrate to new servers and not change the configuration (including the operating system or SQL Server version), those servers could be added as nodes to the existing underlying cluster and added to the availability group. Quando la replica o le repliche sono nello stato corretto, si può eseguire un failover manuale in un nuovo server, quindi i server meno recenti possono essere rimossi dal gruppo di disponibilità e, infine, ritirati.Once the replica or replicas are in the right state, a manual failover could occur to a new server, and then the old ones could be removed from the availability group, and ultimately, decommissioned.

I gruppi di disponibilità distribuiti sono anche un altro metodo per eseguire la migrazione a una nuova configurazione o l'aggiornamento di SQL Server.Distributed AGs are also another method to migrate to a new configuration or upgrade SQL Server. Poiché un gruppo di disponibilità distribuito supporta diversi gruppi di disponibilità sottostanti in architetture diverse, è possibile ad esempio passare da SQL Server 2016 in esecuzione in Windows Server 2012 R2 a SQL Server 2017 in esecuzione in Windows Server 2016.Because a distributed AG supports different underlying AGs on different architectures, for example, you could change from SQL Server 2016 running on Windows Server 2012 R2 to SQL Server 2017 running on Windows Sever 2016.

Gruppo di disponibilità distribuito

Infine, i gruppi di disponibilità con un tipo di cluster None possono essere usati anche per la migrazione o l'aggiornamento.Finally, availability groups with a cluster type of None can also be used for migration or upgrading. Non è possibile combinare e far corrispondere i tipi di cluster in una configurazione tipica di gruppi di disponibilità, quindi tutte le repliche devono essere di tipo None.You cannot mix and match cluster types in a typical availability group configuration, so all replicas would need to be a type of None. Un gruppo di disponibilità distribuito può essere usato per estendere gruppi di disponibilità configurati con diversi tipi di cluster.A distributed availability group can be used to span availability groups configured with different cluster types. Questo metodo è supportato anche in piattaforme diverse del sistema operativo.This method is also supported across the different OS platforms.

Tutte le varianti dei gruppi di disponibilità per le migrazioni e gli aggiornamenti consentono di eseguire nel tempo la sincronizzazione dei dati, ovvero la parte del lavoro più dispendiosa in termini di tempo.All variants of availability groups for migrations and upgrades allow the most time consuming portion of the work to be done over time – data synchronization. Al momento di avviare il passaggio alla nuova configurazione, il trasferimento comporterà una breve interruzione e non un lungo periodo di inattività in cui devono essere completate tutte le operazioni, inclusa la sincronizzazione dei dati.When it comes time to initiate the switch to the new configuration, the cutover will be a brief outage versus one long period of downtime where all the work, including data synchronization, would need to be completed.

I gruppi di disponibilità possono ridurre i tempi di inattività durante l'applicazione di patch del sistema operativo sottostante eseguendo manualmente il failover dalla replica primaria a una replica secondaria mentre viene completata l'applicazione di patch.Availability groups can provide minimal downtime during patching of the underlying OS by manually failing over the primary to a secondary replica while the patching is being completed. Dal punto di vista del sistema operativo, questa procedura è più comune in Windows Server poiché spesso, ma non sempre, la manutenzione del sistema operativo sottostante può richiedere un riavvio.From an operating system perspective, doing this would be more common on Windows Server since often, but not always, servicing the underlying OS may require a reboot. L'applicazione di patch in Linux a volte richiede un riavvio, ma questo avviene raramente.Patching Linux sometimes needs a reboot, but it can be infrequent.

L'applicazione di patch alle istanze di SQL Server che fanno parte di un gruppo di disponibilità può anche ridurre al minimo i tempi di inattività in base alla complessità dell'architettura del gruppo di disponibilità.Patching SQL Server instances participating in an availability group can also minimize downtime depending on how complex the availability group architecture is. Per applicare patch ai server che fanno parte di un gruppo di disponibilità, le patch devono essere applicate prima a una replica secondaria.To patch servers participating in an availability group, a secondary replica is patched first. Applicate le patch al numero corretto di repliche, viene effettuato manualmente il failover della replica primaria in un altro nodo per eseguire l'aggiornamento.Once the right number of replicas are patched, the primary replica is manually failed over to another node to do the upgrade. A questo punto si possono aggiornare anche tutte le repliche secondarie rimanenti.Any remaining secondary replicas at that point can be upgraded, too.

Istanze del cluster di failover Always OnAlways on failover cluster instances

Le istanze FCI da sole non sono in grado di offrire un supporto per una migrazione o un aggiornamento tradizionale. È necessario configurare un gruppo di disponibilità o log shipping per i database nell'istanza FCI e tutti gli altri oggetti interessati.FCIs on their own cannot assist with a traditional migration or upgrade; an availability group or log shipping would have to be configured for the databases in the FCI and all other objects accounted for. Tuttavia, le istanze FCI in Windows Server sono ancora un'opzione diffusa per l'applicazione di patch alle istanze di Windows Server sottostanti.However, FCIs under Windows Server are still a popular option for when the underlying Windows Servers need to be patched. Può essere avviato un failover manuale, che consente di interrompere brevemente l'attività anziché rendere l'istanza non disponibile per tutto il tempo richiesto dall'applicazione delle patch a Windows Server.A manual failover can be initiated, which means a brief outage instead of having the instance completely unavailable for the entire time Windows Server is being patched. È possibile aggiornare un'istanza FCI anziché SQL Server 2017.An FCI can be upgraded in place to SQL Server 2017. Per informazioni, vedere Eseguire l'aggiornamento di un'istanza del cluster di failover di SQL Server.For information, see Upgrade a SQL Server Failover Cluster Instance.

Log shippingLog shipping

Il log shipping è ancora un'opzione molto diffusa per eseguire sia la migrazione che l'aggiornamento dei database.Log shipping is still a popular option to both migrate and upgrade databases. Analogamente ai gruppi di disponibilità, ma questa volta usando il log delle transazioni come metodo di sincronizzazione, la propagazione dei dati può essere avviata molto prima del passaggio da un server all'altro.Similar to availability groups, but this time using the transaction log as the synchronization method, the data propagation can be started well in advance of the server switch. Al momento del passaggio, dopo che tutto il traffico è stato interrotto in corrispondenza dell'origine, è necessario estrarre, copiare e applicare un log delle transazioni finale alla nuova configurazione.At the time of the switch, once all traffic is stopped at the source, a final transaction log would need to be taken, copied, and applied to the new configuration. A questo punto, il database può essere portato online.At that point, the database can be brought online. Il log shipping in genere è più tollerante rispetto alle reti più lente e, anche se il passaggio può avere una durata leggermente maggiore rispetto al passaggio eseguito usando un gruppo di disponibilità o un gruppo di disponibilità distribuito, normalmente viene misurato in minuti, non in ore, giorni o settimane.Log shipping is often more tolerant of slower networks, and while the switch may be slightly longer than one done using an availability group or a distributed availability group, it is usually measured in minutes – not hours, days, or weeks.

Analogamente ai gruppi di disponibilità, il log shipping offre la possibilità di passare a un altro server in caso di applicazione di patch.Similar to availability groups, log shipping can provide a way to switch to another server in the event of patching.

Altri metodi di distribuzione di SQL Server e disponibilitàOther SQL Server deployment methods and availability

Esistono altri due metodi di distribuzione per SQL Server in Linux: contenitori e uso di Azure (o un altro provider di cloud pubblico).There are two other deployment methods for SQL Server on Linux: containers and using Azure (or another public cloud provider). L'esigenza generale di disponibilità presentata in questo documento esiste indipendentemente dalla modalità di distribuzione di SQL Server.The general need for availability as presented throughout this paper exists regardless of how SQL Server is deployed. Questi due metodi richiedono alcune considerazioni speciali per quanto riguarda la disponibilità elevata di SQL Server.These two methods have some special considerations when it comes to making SQL Server highly available.

I contenitori con Docker rappresentano una nuova modalità di distribuzione di SQL Server, per Windows Server o Linux.Containers using Docker are a new way of deploying SQL Server, either for Windows Server or Linux. Un contenitore è un'immagine completa di SQL Server pronta per l'esecuzione.A container is a complete image of SQL Server that is ready to run. Tuttavia, attualmente non esiste un supporto nativo per il clustering, quindi nemmeno per la disponibilità elevata diretta o il ripristino di emergenza.However, there is currently no native support for clustering, and thus, direct high availability or disaster recovery. Al momento le opzioni che consentono di rendere disponibili i database di SQL Server usando i contenitori sono log shipping e backup e ripristino.Currently, the options to make SQL Server databases available using containers would be log shipping and backup and restore. Benché si possa configurare un gruppo di disponibilità con tipo di cluster None, come indicato in precedenza, questa soluzione non è una reale configurazione di disponibilità.While an availability group with a cluster type of None can be configured, as noted earlier, it is not considered a true availability configuration. Microsoft è alla ricerca di soluzioni per abilitare i gruppi di disponibilità o le istanze FCI usando i contenitori.Microsoft is looking at ways to enable availability groups or FCIs using containers.

Se si stanno usando i contenitori e si perde un contenitore, in base alla piattaforma del contenitore, è possibile distribuirlo di nuovo e associarlo all'archiviazione condivisa usata.If you are using containers today, if the container is lost, depending on the container platform, it can be deployed again and attached to the shared storage that was used. Parte di questo meccanismo viene messa a disposizione dall'agente di orchestrazione del contenitore.Some of this mechanism is provided by the container orchestrator. Benché si produca una certa resilienza, si avrà un periodo di inattività associato al recupero del database e la disponibilità non è realmente elevata come sarebbe usando un gruppo di disponibilità o un'istanza FCI.While this does provide some resiliency, there will be some downtime associated with database recovery and is not truly highly available as it would be if using an availability group or FCI.

Le macchine virtuali IaaS Linux possono essere distribuite con SQL Server installato con Azure.Linux IaaS virtual machines can be deployed with SQL Server installed using Azure. Analogamente alle installazioni locali, un'installazione supportata richiede l'uso di STONITH (Shoot the Other Node in the Head), che è esterno a Pacemaker.As with on premises-based installations, a supported installation requires the use of STONITH (Shoot the Other Node in the Head) which is external to Pacemaker itself. STONITH è disponibile attraverso agenti di fencing della disponibilità.STONITH is provided via fencing availability agents. Alcune distribuzioni li includono come parte della piattaforma, altri si affidano a fornitori esterni di hardware e software.Some distributions ship them as part of the platform, others rely on external hardware and software vendors. Controllare la distribuzione di Linux preferita per vedere quali moduli di STONITH sono disponibili in modo da poter distribuire una soluzione supportata nel cloud pubblico.Check with your preferred Linux distribution to see what forms of STONITH are provided so that a supported solution can be deployed in the public cloud.

Interoperabilità della distribuzione Linux e multipiattaformaCross-platform and Linux distribution interoperability

Con SQL Server supportato sia in Windows Server che in Linux, questa sezione illustra gli scenari in cui le piattaforme possono essere usate insieme ai fini della disponibilità e per altri scopi, nonché la situazione in cui le soluzioni incorporano più di una distribuzione Linux.With SQL Server now supported on both Windows Server and Linux, this section covers the scenarios of how they can work together for availability in addition to other purposes, as well as the story for solutions that will incorporate more than one Linux distribution.

Prima di analizzare gli scenari multipiattaforma e di interoperabilità, è necessario indicare due aspetti:Before covering the cross-platform and interoperability scenarios, two facts need to be stated:

  • Non esistono scenari in cui un'istanza FCI o un gruppo di disponibilità basati su WSFC funzionano direttamente con un'istanza FCI o un gruppo di disponibilità basati su Linux.There are no scenarios where a WSFC-based FCI or availability group will work with a Linux-based FCI or availability group directly. Un cluster WSFC non può essere esteso da un nodo Pacemaker e viceversa.A WSFC cannot be extended by a Pacemaker node and vice versa.
  • La combinazione delle distribuzioni Linux non è supportata con le istanze FCI o un gruppo di disponibilità con tipo di cluster External.Mixing Linux distributions is not supported with FCIs or an availability group that has a cluster type of External. Tutte le repliche del gruppo di disponibilità in tale scenario devono essere configurate non solo per la stessa distribuzione Linux, ma anche per la stessa versione.All availability group replicas in that scenario must be configured not only the same Linux distribution, but also the same version. Le due modalità che consentono il funzionamento di SQL Server tra le due piattaforme o più distribuzioni di Linux sono i gruppi di disponibilità e il log shipping.The two supported ways that SQL Server can operate across the two platforms or multiple distributions of Linux are availability groups and log shipping.

Gruppi di disponibilità distribuitiDistributed availability groups

I gruppi di disponibilità distribuiti sono progettati in modo da estendere le configurazioni con gruppi di disponibilità e i due cluster sottostanti ai gruppi di disponibilità possono essere due cluster WSFC, o distribuzioni Linux, diversi o essere uno in un cluster WSFC e l'altro in Linux.Distributed availability groups are designed to span availability group configurations, whether those two underlying clusters underneath the availability groups are two different WSFCs, Linux distributions, or one on a WSFC and the other on Linux. Un gruppo di disponibilità distribuito sarà il metodo principale per ottenere una soluzione multipiattaforma.A distributed availability group will be the primary method of having a cross platform solution. Un gruppo di disponibilità distribuito è anche la soluzione principale per le migrazioni, ad esempio la conversione di un'infrastruttura SQL Server basata su Windows Server in un'infrastruttura basata su Linux, se questo è l'obiettivo dell'azienda.A distributed availability group is also the primary solution for migrations such as converting from a Windows Server-based SQL Server infrastructure to a Linux-based one if that is what your company wants to do. Come indicato in precedenza, i gruppi di disponibilità, e in particolare i gruppi di disponibilità distribuiti, consentono di ridurre il periodo di tempo in cui un'applicazione non è disponibile per l'uso.As noted above, availability groups, and especially distributed availability groups, would minimize the time that an application would be unavailable for use. Un esempio di gruppo di disponibilità distribuito che si estende in un cluster WSFC e Pacemaker è illustrato di seguito.An example of a distributed availability group that spans a WSFC and Pacemaker is shown below.

Gruppo di disponibilità distribuito

Se un gruppo di disponibilità è configurato con un tipo di cluster None, è in grado di estendere Windows Server e Linux, nonché più distribuzioni Linux.If an availability group is configured with a cluster type of None, it can span Windows Server and Linux as well as multiple Linux distributions. Poiché non si tratta di una configurazione con disponibilità elevata reale, non deve essere usata per le distribuzioni cruciali, ma per gli scenari di scalabilità in lettura o di migrazione/aggiornamento.Since this is not a true high availability configuration, it should not be used for mission critical deployments, but for read-scale or migration/upgrade scenarios.

Log shippingLog shipping

Poiché il log shipping si basa essenzialmente su backup e ripristino, non esistono differenze nei database, nelle strutture di file e così via tra SQL Server in Windows Server e SQL Server in Linux.Since log shipping is just based on backup and restore, and there are no differences in the databases, file structures, etc., for SQL Server on Windows Server versus SQL Server on Linux. Ciò significa che è possibile configurare il log shipping tra un'installazione di SQL Server basata su Windows Server e una di Linux nonché tra le distribuzioni Linux.This means that log shipping can be configured between a Windows Server-based SQL Server installation and a Linux one as well as between distributions of Linux. Tutti gli altri elementi rimangono invariati.Everything else remains the same. L'unico problema è che il log shipping, proprio come un gruppo di disponibilità, non funziona se la versione principale di SQL Server dell'origine è successiva alla versione di SQL Server della destinazione.The only caveat is that log shipping, just like an availability group, cannot work when the source is at a higher SQL Server major version against a target that is at a lower version of SQL Server.

Scalabilità orizzontale in lettura Read scale-out

Da quando sono state introdotte in SQL Server 2012, le repliche secondarie possono essere usate per le query di sola lettura.Since their introduction in SQL Server 2012, secondary replicas have had the ability to be used for read-only queries. L'operazione può essere eseguita in due modi con un gruppo di disponibilità: consentendo l'accesso diretto alla replica secondaria e configurando il routing di sola lettura, che richiede l'uso del listener.There are two ways that can be achieved with an availability group: by allowing direct access to the secondary as well as configuring read only routing which requires the use of the listener. SQL Server 2016 ha introdotto la possibilità di bilanciare il carico delle connessioni di sola lettura attraverso il listener usando un algoritmo round robin, che consente la diffusione delle richieste di sola lettura in tutte le repliche leggibili.SQL Server 2016 introduced the ability to load balance read-only connections via the listener using a round robin algorithm, allowing read-only requests to be spread across all readable replicas.

Nota

Le repliche secondarie leggibili sono una funzionalità presente solo in Enterprise Edition e ogni istanza che ospita una replica leggibile deve avere una licenza di SQL Server.Readable secondary replicas is a feature only in Enterprise Edition, and each instance hosting a readable replica would need a SQL Server license.

Il ridimensionamento delle copie leggibili di un database usando i gruppi di disponibilità è stato introdotto con i gruppi di disponibilità distribuiti in SQL Server 2016.Scaling readable copies of a database via availability groups was first introduced with distributed availability groups in SQL Server 2016. Questo consente alle aziende di avere copie di sola lettura del database non solo a livello locale, ma anche a livello regionale e globale con esigenze minime in termini di configurazione e di ridurre il traffico di rete e la latenza grazie all'esecuzione locale delle query.This would allow companies to have read-only copies of the database not only locally, but regionally and globally with a minimal amount of configuration and reduce network traffic and latency by having queries executed locally. Ogni replica primaria di un gruppo di disponibilità può inizializzare altri due gruppi di disponibilità anche se non è la copia con funzioni di lettura/scrittura complete, quindi ogni gruppo di disponibilità distribuito può supportare fino a 27 copie dei dati leggibili.Each primary replica of an availability group can seed two other availability groups even if it is not the fully read/write copy, so each distributed availability group can support up to 27 copies of the data that are readable.

Gruppo di disponibilità distribuito

A partire da SQL Server 2017, è possibile creare una soluzione di sola lettura near real time con i gruppi di disponibilità configurati con un cluster di tipo None.Starting with SQL Server 2017, It is possible to create a near-real time, read-only solution with availability groups configured with a cluster type of None. Se l'obiettivo è usare i gruppi di disponibilità per le repliche secondarie leggibili e non per la disponibilità, questa operazione elimina la complessità dell'uso di un cluster WSFC o Pacemaker e offre i vantaggi in termini di leggibilità di un gruppo di disponibilità in un metodo di distribuzione più semplice.If the goal is to use availability groups for readable secondary replicas and not availability, doing this removes the complexity of using a WSFC or Pacemaker, and gives the readable benefits of an availability group in a simpler deployment method.

L'unico problema di una certa entità è che non essendo presente un cluster sottostante con tipo di cluster None, la configurazione del routing di sola lettura è un po' diversa.The only major caveat is that due to no underlying cluster with a cluster type of None, configuring read only routing is a little different. Dalla prospettiva di SQL Server, è comunque necessario un listener per il routing delle richieste anche se non è presente un cluster.From a SQL Server perspective, a listener is still required to route the requests even though there is no cluster. Anziché configurare un listener tradizionale, viene usato l'indirizzo IP o il nome della replica primaria.Instead of configuring a traditional listener, the IP address or name of the primary replica is used. La replica primaria viene quindi usata per il routing delle richieste di sola lettura.The primary replica is then used to route the read only requests.

Un warm standby del log shipping può essere tecnicamente configurato per l'uso dei dati leggibili ripristinando il database con STANDBY.A log shipping warm standby can technically be configured for readable usage by restoring the database WITH STANDBY. Tuttavia, poiché i log delle transazioni richiedono l'uso esclusivo del database per il ripristino, che gli utenti non possono accedere al database durante tale attività.However, because the transaction logs require exclusive use of the database for restoration, it means that users cannot be accessing the database while that happens. Per questo motivo il log shipping non è affatto la soluzione ideale, soprattutto se sono richiesti dati near real time.This makes log shipping a less than ideal solution – especially if near real-time data is required.

Un aspetto da considerare per tutti gli scenari di scalabilità orizzontale in lettura con gruppi di disponibilità è che, a differenza della replica transazionale in cui tutti i dati sono live, ogni replica secondaria non è in uno stato in cui è possibile applicare indici univoci e la replica è una copia esatta di quella primaria.One thing that should be noted for all read scale-out scenarios with availability groups is that unlike using transactional replication where all of the data is live, each secondary replica is not in a state where unique indexes can be applied, the replica is an exact copy of the primary. Ciò significa che se gli indici sono necessari per la creazione di report o i dati devono essere modificati, l'operazione deve essere eseguita nei database della replica primaria.This means that if any indexes are required for reporting or data needs to be manipulated, it must be done on the database(s) on the primary replica. Se è necessaria questa flessibilità, la replica è una soluzione migliore per i dati leggibili.If you need that flexibility, replication is a better solution for readable data.

RiepilogoSummary

Le istanze e i database di SQL Server 2017 possono essere resi altamente disponibili usando le stesse funzionalità sia in Windows Server che in Linux.Instances and databases of SQL Server 2017 can be made highly available using the same features on both Windows Server and Linux. Oltre ai normali scenari di disponibilità per disponibilità elevata e ripristino di emergenza a livello locale, è possibile ridurre i tempi di inattività associati gli aggiornamenti e alle migrazioni con le funzionalità di disponibilità di SQL Server.Besides standard availability scenarios of local high availability and disaster recovery, downtime associated with upgrades and migrations can be minimized with the availability features in SQL Server. I gruppi di disponibilità consentono inoltre di avere a disposizione copie aggiuntive di un database come parte della stessa architettura per scalare orizzontalmente le copie leggibili.Availability groups can also provide additional copies of a database as part of the same architecture to scale out readable copies. Se si distribuisce una nuova soluzione usando SQL Server 2017 o si prevede di eseguire un aggiornamento, SQL Server 2017 offre la disponibilità e l'affidabilità necessarie.Whether you are deploying a new solution using SQL Server 2017 or considering an upgrade, SQL Server 2017 has the availability and reliability you require.