Configurare l'istanza del cluster di failover, SQL Server in Linux (RHEL)Configure failover cluster instance - SQL Server on Linux (RHEL)

In questo argomento si applica a: SìSQL Server (solo Linux)nonDatabase SQL di AzurenonAzure SQL Data WarehousenonParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

Un'istanza cluster di failover di SQL Server nel disco condiviso due nodi fornisce la ridondanza a livello di server per la disponibilità elevata.A SQL Server two-node shared disk failover cluster instance provides server-level redundancy for high availability. In questa esercitazione imparare a creare un'istanza del cluster di failover a due nodi di SQL Server in Linux.In this tutorial, you learn how to create a two-node failover cluster instance of SQL Server on Linux. I passaggi specifici che si completeranno includono:The specific steps that you will complete include:

  • Installare e configurare LinuxSet up and configure Linux
  • Installare e configurare SQL ServerInstall and configure SQL Server
  • Configurare il file hostsConfigure the hosts file
  • Configurare l'archiviazione condivisa e spostare i file di databaseConfigure shared storage and move the database files
  • Installare e configurare Pacemaker su ogni nodo del clusterInstall and configure Pacemaker on each cluster node
  • Configurare l'istanza del cluster di failoverConfigure the failover cluster instance

In questo articolo viene illustrato come creare un'istanza di cluster di failover (FCI) disco condiviso a due nodi per SQL Server.This article explains how to create a two-node shared disk failover cluster instance (FCI) for SQL Server. L'articolo include istruzioni ed esempi di script per Red Hat Enterprise Linux (RHEL).The article includes instructions and script examples for Red Hat Enterprise Linux (RHEL). Ubuntu distribuzioni sono simili a RHEL pertanto gli esempi di script in genere funzionano anche in Ubuntu.Ubuntu distributions are similar to RHEL so the script examples will normally also work on Ubuntu.

Per ulteriori informazioni, vedere istanza SQL Server Failover Cluster (FCI) in Linux.For conceptual information, see SQL Server Failover Cluster Instance (FCI) on Linux.

PrerequisitiPrerequisites

Per completare lo scenario end-to-end seguente devono essere presenti due macchine per distribuire il cluster a due nodi e un altro server per l'archiviazione.To complete the end-to-end scenario below you need two machines to deploy the two nodes cluster and another server for storage. Passaggi seguenti viene descritto come questi server verranno configurati.Below steps outline how these servers will be configured.

Installare e configurare LinuxSet up and configure Linux

Il primo passaggio consiste nel configurare il sistema operativo nei nodi del cluster.The first step is to configure the operating system on the cluster nodes. In ogni nodo del cluster, configurare una distribuzione di linux.On each node in the cluster, configure a linux distribution. Utilizzare la stessa distribuzione e la versione in entrambi i nodi.Use the same distribution and version on both nodes. Utilizzare uno o l'altra le seguenti distribuzioni:Use either one or the other of the following distributions:

  • RHEL con una sottoscrizione valida per il componente aggiuntivo a disponibilità elevataRHEL with a valid subscription for the HA add-on

Installare e configurare SQL ServerInstall and configure SQL Server

  1. Installare e configurare SQL Server in entrambi i nodi.Install and set up SQL Server on both nodes. Per informazioni dettagliate vedere installazione di SQL Server in Linux.For detailed instructions see Install SQL Server on Linux.
  2. Specificare un nodo primario e l'altro come secondario, ai fini di configurazione.Designate one node as primary and the other as secondary, for purposes of configuration. Utilizzare questi termini per le operazioni seguenti in questa Guida.Use these terms for the following this guide.
  3. Nel nodo secondario, arrestare e disabilitare il Server SQL.On the secondary node, stop and disable SQL Server. Nell'esempio seguente arresta e disattiva SQL Server:The following example stops and disables SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

    Nota

    Intervalli di tempo, viene generato per l'istanza di SQL Server e inserito in una chiave Master del Server var/opt/mssql/secrets/machine-key.At set up time, a Server Master Key is generated for the SQL Server instance and placed at var/opt/mssql/secrets/machine-key. In Linux, SQL Server viene sempre eseguito come un account locale denominato mssql.On Linux, SQL Server always runs as a local account called mssql. Poiché si tratta di un account locale, l'identità non è condivise tra i nodi.Because it’s a local account, its identity isn’t shared across nodes. Pertanto, è necessario copiare la chiave di crittografia dal nodo primario a ogni nodo secondario in modo che ogni account locale mssql possono accedervi per decrittografare la chiave Master del Server.Therefore, you need to copy the encryption key from primary node to each secondary node so each local mssql account can access it to decrypt the Server Master Key.

  4. Nel nodo primario, creare un account di accesso SQL server per Pacemaker e concedere l'autorizzazione di accesso per l'esecuzione sp_server_diagnostics.On the primary node, create a SQL server login for Pacemaker and grant the login permission to run sp_server_diagnostics. Pacemaker utilizzerà questo account per verificare quale sia il nodo è in esecuzione SQL Server.Pacemaker will use this account to verify which node is running SQL Server.

    sudo systemctl start mssql-server
    

    Connettersi a SQL Server master con l'account sa di database ed eseguire le operazioni seguenti:Connect to the SQL Server master database with the sa account and run the following:

    USE [master]
    GO
    CREATE LOGIN [<loginName>] with PASSWORD= N'<loginPassword>'
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>]
    

    In alternativa, è possibile impostare le autorizzazioni a un livello più granulare.Alternatively, you can set the permissions at a more granular level. Richiede l'account di accesso Pacemaker VIEW SERVER STATE per query sullo stato di integrità con sp_server_diagnostics, setupadmin e ALTER ANY LINKED SERVER per aggiornare il nome dell'istanza FCI con il nome della risorsa eseguendo sp_dropserver e sp_addserver.The Pacemaker login requires VIEW SERVER STATE to query health status with sp_server_diagnostics, setupadmin and ALTER ANY LINKED SERVER to update the FCI instance name with the resource name by running sp_dropserver and sp_addserver.

  5. Nel nodo primario, arrestare e disabilitare il Server SQL.On the primary node, stop and disable SQL Server.

Configurare il file hostsConfigure the hosts file

In ogni nodo del cluster, configurare il file hosts.On each cluster node, configure the hosts file. Il file hosts deve includere l'indirizzo IP e nome di ogni nodo del cluster.The hosts file must include the IP address and name of every cluster node.

  1. Controllare l'indirizzo IP per ogni nodo.Check the IP address for each node. Lo script seguente viene illustrato l'indirizzo IP del nodo corrente.The following script shows the IP address of your current node.

    sudo ip addr show
    
  2. Impostare il nome del computer in ogni nodo.Set the computer name on each node. Assegnare a ogni nodo un nome univoco che è di 15 caratteri o meno.Give each node a unique name that is 15 characters or less. Impostare il nome del computer, aggiungerlo al /etc/hosts.Set the computer name by adding it to /etc/hosts. Lo script seguente consente di modificare /etc/hosts con vi.The following script lets you edit /etc/hosts with vi.

    sudo vi /etc/hosts
    

    Nell'esempio seguente /etc/hosts aggiunte due nodi denominati sqlfcivm1 e sqlfcivm2.The following example shows /etc/hosts with additions for two nodes named sqlfcivm1 and sqlfcivm2.

    127.0.0.1   localhost localhost4 localhost4.localdomain4
    ::1       localhost localhost6 localhost6.localdomain6
    10.128.18.128 sqlfcivm1
    10.128.16.77 sqlfcivm2
    

Configurare l'archiviazione e spostare i file di databaseConfigure storage & move database files

È necessario fornire spazio di archiviazione accessibili a entrambi i nodi.You need to provide storage that both nodes can access. È possibile utilizzare iSCSI o NFS, SMB.You can use iSCSI, NFS, or SMB. Configurare l'archiviazione, presentare l'archiviazione per i nodi del cluster e quindi spostare i file di database nella nuova risorsa di archiviazione.Configure storage, present the storage to the cluster nodes, and then move the database files to the new storage. Gli articoli seguenti vengono illustrati i passaggi per ogni tipo di archiviazione:The following articles explain the steps for each storage type:

Installare e configurare Pacemaker su ogni nodo del clusterInstall and configure Pacemaker on each cluster node

  1. In entrambi i nodi del cluster creare un file per archiviare nome utente e password di SQL Server per l'accesso a Pacemaker.On both cluster nodes, create a file to store the SQL Server username and password for the Pacemaker login.

    Il comando seguente crea e popola questo file:The following command creates and populates this file:

    sudo touch /var/opt/mssql/secrets/passwd
    sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
    sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd 
    sudo chmod 600 /var/opt/mssql/secrets/passwd    
    
  2. In entrambi i nodi del cluster aprire le porte del firewall di Pacemaker.On both cluster nodes, open the Pacemaker firewall ports. Per aprire queste porte con firewalld, eseguire il comando seguente:To open these ports with firewalld, run the following command:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Se si sta usando un altro firewall che non ha una configurazione a disponibilità elevata predefinita, è necessario aprire le porte seguenti per consentire a Pacemaker di comunicare con altri nodi del clusterIf you’re using another firewall that doesn’t have a built-in high-availability configuration, the following ports need to be opened for Pacemaker to be able to communicate with other nodes in the cluster

    • TCP: porte 2224, 3121, 21064TCP: Ports 2224, 3121, 21064
    • UDP: porta 5405UDP: Port 5405
  3. Installare i pacchetti Pacemaker in ogni nodo.Install Pacemaker packages on each node.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. Impostare la password per l'utente predefinito creato durante l'installazione dei pacchetti Corosync e Pacemaker.Set the password for for the default user that is created when installing Pacemaker and Corosync packages. Usare la stessa password in entrambi i nodi.Use the same password on both nodes.

    sudo passwd hacluster
    
  5. Abilitare e avviare il servizio pcsd e Pacemaker.Enable and start pcsd service and Pacemaker. In questo modo, i nodi potranno unirsi nuovamente in join con il cluster dopo il riavvio.This will allow nodes to rejoin the cluster after the reboot. Eseguire il comando seguente in entrambi i nodi.Run the following command on both nodes.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Installare l'agente delle risorse FCI per SQL Server.Install the FCI resource agent for SQL Server. Eseguire i comandi seguenti in entrambi i nodi.Run the following commands on both nodes.

    sudo yum install mssql-server-ha
    

Configurare l'istanza del cluster di failoverConfigure the failover cluster instance

Verrà creata l'istanza cluster di failover in un gruppo di risorse.The FCI will be created in a resource group. Questo è un po' più semplice perché il gruppo di risorse riduce la necessità di vincoli.This is a little bit easier since the resource group alleviates the need for constraints. Tuttavia, è possibile aggiungere le risorse nel gruppo di risorse nell'ordine in che cui deve iniziare.However, add the resources into the resource group in the order they should start. L'ordine che devono avviare è:The order they should start is:

  1. Risorsa di archiviazioneStorage resource
  2. Risorsa di reteNetwork resource
  3. Risorsa dell'applicazioneApplication resource

In questo esempio creerà un'istanza cluster di failover del gruppo NewLinFCIGrp.This example will create an FCI in the group NewLinFCIGrp. Il nome del gruppo di risorse deve essere univoco rispetto a qualsiasi risorsa creata mediante Pacemaker.The name of the resource group must be unique from any resource created in Pacemaker.

  1. Creare la risorsa disco.Create the disk resource. Se non si verifica un problema, non si otterrà alcuna risposta.You will get no response back if there is not a problem. Il modo per creare la risorsa disco dipende dal tipo di archiviazione.The way to create the disk resource depends on the storage type. Di seguito è riportato un esempio per ogni tipo di archiviazione.The following is an example for each storage type. Utilizzare l'esempio in cui si applica al tipo di archiviazione per l'archiviazione in cluster.Use the example that applies to the storage type for your clustered storage.

    iSCSIiSCSI

    sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group RGName
    

    <iSCSIDIskResourceName > è il nome della risorsa associato al disco iSCSI<iSCSIDIskResourceName> is the name of the resource associated with the iSCSI disk

    <VolumeGroupName > è il nome del gruppo di volumi<VolumeGroupName> is the name of the volume group

    <LogicalVolumeName > è il nome del volume logico che è stato creato<LogicalVolumeName> is the name of the logical volume that was created

    <FolderToMountiSCSIDIsk > è la cartella per montare il disco (per i database di sistema e il percorso predefinito, sarebbe /var/opt/mssql/data)<FolderToMountiSCSIDIsk> is the folder to mount the disk (for system databases and the default location, it would be /var/opt/mssql/data)

    <FileSystemType > sarebbe EXT4 o XFS a seconda della modalità di formattazione delle operazioni e supporta quali la distribuzione.<FileSystemType> would be EXT4 or XFS depending on how things were formatted and what the distribution supports.

    NFSNFS

    sudo pcs resource create <NFSDiskResourceName> Filesystem device="<IPAddressOfNFSServer>:<FolderOnNFSServer>" directory="<FolderToMountNFSShare>" fstype=nfs4 options=" nfsvers=4.2,timeo=14,intr" --group RGName
    mount -t nfs4 IPAddressOfNFSServer:FolderOnNFSServer /var/opt/mssql/data -o 
    

    <NFSDIskResourceName > è il nome della risorsa associato alla condivisione NFS<NFSDIskResourceName> is the name of the resource associated with the NFS share

    <IPAddressOfNFSServer > è l'indirizzo IP del server NFS che si desidera utilizzare<IPAddressOfNFSServer> is the IP address of the NFS server that you are going to use

    <FolderOnNFSServer > è il nome della condivisione NFS<FolderOnNFSServer> is the name of the NFS share

    <FolderToMountNFSShare > è la cartella per montare il disco (per i database di sistema e il percorso predefinito, sarebbe /var/opt/mssql/data)<FolderToMountNFSShare> is the folder to mount the disk (for system databases and the default location, it would be /var/opt/mssql/data)

    Un esempio è illustrato di seguito:An example is shown below:

    mount -t nfs4 200.201.202.63:/var/nfs/fci1 /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
    

    SMBSMB

    sudo pcs resource create SMBDiskResourceName Filesystem device="//<ServerName>/<ShareName>" directory="<FolderName>" fstype=cifs options="vers=3.0,username=<UserName>,password=<Password>,domain=<ADDomain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777" --group <RGName>
    

    <NomeServer > è il nome del server con la condivisione SMB<ServerName> is the name of the server with the SMB share

    <Nomecondivisione > è il nome della condivisione<ShareName> is the name of the share

    <Nome cartella > è il nome della cartella creata nel passaggio precedente<FolderName> is the name of the folder created in the last step

    <Nome utente > è il nome dell'utente per accedere alla condivisione<UserName> is the name of the user to access the share

    <Password > è la password per l'utente<Password> is the password for the user

    <ADDomain > è il dominio di Active Directory (se applicabile quando si utilizza una condivisione SMB basate su Windows Server)<ADDomain> is the AD DS domain (if applicable when using a Windows Server-based SMB share)

    <mssqlUID > è l'UID dell'utente mssql<mssqlUID> is the UID of the mssql user

    <mssqlGID > è GID dell'utente mssql<mssqlGID> is the GID of the mssql user

    <RGName > è il nome del gruppo di risorse<RGName> is the name of the resource group

  2. Creare l'indirizzo IP che verrà utilizzato dall'istanza FCI.Create the IP address that will be used by the FCI. Se non si verifica un problema, non si otterrà alcuna risposta.You will get no response back if there is not a problem.

    sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>
    

    <IPResourceName > è il nome della risorsa associato all'indirizzo IP<IPResourceName> is the name of the resource associated with the IP address

    <Indirizzo IP > è l'indirizzo IP per l'istanza FCI<IPAddress> is the IP address for the FCI

    <NetworkCard > è la scheda di rete associata alla subnet (ad esempio eth0)<NetworkCard> is the network card associated with the subnet (i.e. eth0)

    <Subnet mask > è la subnet mask della subnet (ad esempio 24)<NetMask> is the netmask of the subnet (i.e. 24)

    <RGName > è il nome del gruppo di risorse<RGName> is the name of the resource group

  3. Creare la risorsa istanza cluster di failover.Create the FCI resource. Se non si verifica un problema, non si otterrà alcuna risposta.You will get no response back if there is not a problem.

    sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName
    

    <FCIResourceName > è il nome della risorsa non solo, ma il nome descrittivo associato con l'istanza FCI.<FCIResourceName> is not only the name of the resource, but the friendly name that is associated with the FCI. Questo è ciò che gli utenti e applicazioni userà per connettersi.This is what users and applications will use to connect.

    <RGName > è il nome del gruppo di risorse.<RGName> is the name of the resource group.

  4. Eseguire il comando sudo pcs resource.Run the command sudo pcs resource. Il failover deve essere online.The FCI should be online.

  5. Connettersi all'istanza di FCI con SQL Server Management Studio o utilizzando il nome DNS o risorse dell'istanza FCI sqlcmd.Connect to the FCI with SSMS or sqlcmd using the DNS/resource name of the FCI.

  6. Eseguire l'istruzione SELECT @@SERVERNAME.Issue the statement SELECT @@SERVERNAME. Deve restituire il nome dell'istanza FCI.It should return the name of the FCI.

  7. Eseguire l'istruzione SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS').Issue the statement SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS'). Deve restituire il nome del nodo su cui è in esecuzione l'istanza FCI.It should return the name of the node that the FCI is running on.

  8. Eseguire manualmente il failover in altri nodi.Manually fail the FCI to the other node(s). Vedere le istruzioni in istanza cluster di failover Operate: SQL Server in Linux.See the instructions under Operate failover cluster instance - SQL Server on Linux.

  9. Infine, eseguire il failover al nodo originale e rimuovere il vincolo di condivisione del percorso.Finally, fail the FCI back to the original node and remove the colocation constraint.

RiepilogoSummary

In questa esercitazione è completato le attività seguenti.In this tutorial you completed the following tasks.

  • Installare e configurare LinuxSet up and configure Linux
  • Installare e configurare SQL ServerInstall and configure SQL Server
  • Configurare il file hostsConfigure the hosts file
  • Configurare l'archiviazione condivisa e spostare i file di databaseConfigure shared storage and move the database files
  • Installare e configurare Pacemaker su ogni nodo del clusterInstall and configure Pacemaker on each cluster node
  • Configurare l'istanza del cluster di failoverConfigure the failover cluster instance

Passaggi successiviNext steps