SQL Server 2008 R2 - Installation silencieuse d'un cluster en mode failover sur Windows 2003 Server

Introduction

Un précédent article paru en novembre 2010 présente l'installation silencieuse d'une instance SQL Server 2008 R2 : Microsoft SQL Server 2008 R2 - Installation silencieuse.

Cet article s'attarde à présent sur les paramètres spécifiques aux installations silencieuses d'un cluster SQL Server 2008 R2 en mode failover sur Windows 2003 SP2 64 bits.

Le schéma du cluster SQL Server 2008 est donné ci-dessous :

schema cluster SQL Server 2008

Cet article ne s'attarde pas sur l'installation des ressources du cluster (Quorum + MSDTC), seule l'installation de MS SQL Server 2008 R2 en mode silencieux sur les 2 nœuds SRVWINFR1 et SRVWINFR2 est décrite. Les caractéristiques de l'installation sont les suivantes :

  • Les ressources du cluster Quorum et la ressource MSDTC sont déjà créées et écoutent respectivement sur les adresses logiques FRDCOR100 et COREMSDTC.
  • Le groupe de disques SAN est déjà prêt et s'appelle Group 0 dans les ressources du cluster : ce groupe contient 2 volumes. 1 volume pour les fichiers de données (E:\) et 1 volume pour les journaux de transactions (D:\).
  • L'installation est réalisée avec un compte administrateur du domaine (domain\zzsqlserver) en mesure de manipuler l'AD (Active directory LDAP) et le DNS (Domain Name System), notamment pour réserver une adresse IP et créer l'adresse logique FRDCOR101. Ce point est très discutable mais il s'agit d'une technologie Windows (...).
  • Les 2 nœuds à installer sont SRVWINFR1 et SRVWINFR2. Ces 2 machines sont installées avec Windows Server 2003 64 bits Service Pack 2 : ce point est important car avec Windows Server 2008, l'installation est quelque peu différente (utilisation des SIDs recommandée).
  • L'instance SQL Server 2008 R2 installée en mode failover n'est pas une instance nommée et seul le moteur base de données est installé. Les composants annexes Analysis Services, Reporting Services ... ne sont pas installés en mode failover dans cette architecture.
  • Le groupe domain\ad.FR.Servers.CORE.ClusterServices pour les services Cluster est déjà créé dans l'annuaire AD (Active Directory) par l'administrateur du domaine. Le compte de service domain\zzsqlserver utilisé pour l'installation et les services MS SQL Server, SQL Agent ... est ajouté dans ce groupe.
  • La nouveauté FILESTREAM de SQL Server 2008 n'est pas sélectionnée dans cette architecture.

Quelles sont les différences entre SQL Server 2008 et SQL Server 2005 sur Windows 2003 lors de l'installation d'un cluster MS SQL Server en mode failover ?

  • SQL Server 2008 n'effectue plus l'installation sur d'autre(s) nœud(s) en même temps que le nœud actif contrairement à SQL Server 2005. L'ajout d'un nœud est désormais gouverné par l'administrateur.
  • Avec SQL Server 2008, le nom logique réseau de l'instance SQL Server (FRDCOR101) ne s'appelle plus Virtual Server Name (VS) mais SQL Server Network Name (FAILOVERCLUSTERNETWORKNAME).

Caractéristiques du cluster FRDCOR100, navigation avec cluster.exe

Avant d'aborder l'installation silencieuse de SQL Server 2008 R2 en mode silencieux sur un cluster, apprenons à naviguer sommairement dans un cluster avec l'utilitaire cluster.exe. Cette introduction a pour objectif de se familiariser également avec la terminologie employée autour du cluster : groupes de ressources, ressources, etc...

En se connectant sur FRDCOR100 avec RDP (Remote Desktop Protocol), la connexion est réalisée sur le nœud actif d'un cluster. Ici, SRVWINFR1 est le noeud actif.

cluster.exe permet de lister les caractéristiques d'un cluster. Il est disponible dans une simple commande DOS. Pour connaître les options de cet utilitaire :

FRDCOR100 - C:\> cluster /?

cluster /LIST

L'option /LIST liste les clusters existants dans un domaine :

FRDCOR100 - C:\> cluster /LIST
Cluster Name
---------------
FRAPRN101
FRAPRN302
FRDCOR100
FRDMOS104
FRDMOS301
FRDMOS304

cluster NODE

L'option NODE liste les noeuds (machines physiques) dans le cluster courant (FRDCOR100) ainsi que le statut de chaque nœud :

FRDCOR100 - C:\> cluster NODE
Listing status for all available nodes:
 
Node           Node ID Status
-------------- ------- ---------------------
SRVWINFR1            1 Up
SRVWINFR2            2 Up

Le cluster FRDCOR100 contient 2 nœuds SRVWINFR1 et SRVWINFR2 et chaque nœud est "up".

cluster GROUP

L'option GROUP liste les groupes de ressources dans le cluster

FRDCOR100 - C:\> cluster GROUP
Listing status for all available resource groups:
 
Group                Node            Status
-------------------- --------------- ------
MSDTC                SRVWINFR1       Online
Cluster Group        SRVWINFR1       Online
Group 0              SRVWINFR1       Online
Group 1              SRVWINFR1       Online

La commande cluster GROUP montre ici que SRVWINFR1 est le nœud actif pour 4 groupes de ressources :

  • Le groupe MSDTC pour Microsoft Distribution Transaction Coordinator (installation non évoquée ici).
  • Le groupe Cluster Group pour le Quorum (installation non évoquée ici).
  • Le groupe Group 0 : groupe de ressources contenant 2 disques SAN (D:\ et E:\). Ce groupe sera utilisé pour installer MS SQL Server en failover
  • Le groupe Group 1: groupe de ressources contenant 2 disques SAN (G:\ et H:\). Ce groupe n'est pas utilisé ici.

cluster RES (options /priv, /prop, /listowners)

L'option RES liste plus finement les ressources du cluster

FRDCOR100 - C:\> cluster RES
Listing status for all available resources:
 
Resource             Group                Node            Status
-------------------- -------------------- --------------- ------
Adresse IP MS DTC    MSDTC                SRVWINFR1       Online
Nom réseau MS DTC    MSDTC                SRVWINFR1       Online
Disk M:              MSDTC                SRVWINFR1       Online
Ressource MSDTC      MSDTC                SRVWINFR1       Online
Cluster IP Address   Cluster Group        SRVWINFR1       Online
Cluster Name         Cluster Group        SRVWINFR1       Online
Disk Q:              Cluster Group        SRVWINFR1       Online
Disk D:              Group 0              SRVWINFR1       Online
Disk E:              Group 0              SRVWINFR1       Online
Disk G:              Group 1              SRVWINFR1       Online
Disk H:              Group 1              SRVWINFR1       Online

cluster RES est de loin la commande qui nous intéresse le plus.

Pour détailler les propriétés générales d'une ressource d'un groupe :

cluster res "nom de la ressource" /prop

FRDCOR100 - C:\> cluster RES "Cluster Name" /prop
Listing properties for 'Cluster Name':
 
T  Resource             Name                           Value
-- -------------------- ------------------------------ -----------------------
SR Cluster Name         Name                           Cluster Name
S  Cluster Name         Type                           Network Name
 ...
D  Cluster Name         LooksAlivePollInterval         5000 (0x1388)
D  Cluster Name         IsAlivePollInterval            60000 (0xea60)
D  Cluster Name         RestartAction                  2 (0x2)
D  Cluster Name         RestartThreshold               3 (0x3)
D  Cluster Name         RestartPeriod                  900000 (0xdbba0)
D  Cluster Name         RetryPeriodOnFailure           4294967295 (0xffffffff)
D  Cluster Name         PendingTimeout                 180000 (0x2bf20)
D  Cluster Name         LoadBalStartupInterval         300000 (0x493e0)
D  Cluster Name         LoadBalSampleInterval          10000 (0x2710)
D  Cluster Name         LoadBalAnalysisInterval        300000 (0x493e0)
D  Cluster Name         LoadBalMinProcessorUnits       0 (0x0)
D  Cluster Name         LoadBalMinMemoryUnits          0 (0x0)

Pour détailler les propriétés privées et spécifiques d'une ressource d'un groupe :

cluster res "nom de la ressource" /priv

FRDCOR100 - C:\> cluster RES "Cluster Name" /priv
Listing private properties for 'Cluster Name':
 
T  Resource             Name                           Value
-- -------------------- ------------------------------ -----------------------
 ...
S  Cluster Name         Name                           FRDCOR100 
 ...

Les options /prop et /priv permettent de retrouver toutes les informations indispensables sur les ressources (adresses IP, noms réseaux etc...).

Pour retrouver les nœuds possibles pour une ressource donnée :

cluster res "nom de la ressource" /listowners

FRDCOR100 - C:\> cluster RES "Ressource MSDTC" /listowners
Listing possible owners for resource 'Ressource MSDTC':
Possible Owner Nodes
--------------------
SRVWINFR1
SRVWINFR2

MSDTC

4 ressources pour le groupe MSDTC (Microsoft Distribution Transaction Coordinator).

  • Adresse IP MS DTC : 10.129.132.186
  • Nom réseau MS DTC : COREMSDTC
  • Disk M : disque sur lequel est installé MSDTC
  • Ressource MSDTC : Distributed Transaction Coordinator

Cluster Group - Quorum

3 ressources pour le groupe Cluster Group ou Quorum.

  • Cluster IP Address : 10.129.132.182
  • Cluster Name : FRDCOR100 (adresse logique réseau du Quorum)
  • Disk Q : disque sur lequel est installé le Quorum

Installation silencieuse du premier nœud en mode cluster FAILOVER (SRVWINFR1)

La distribution d'installation de MS SQL 2008 R2 est posée dans le répertoire SQL_2008_ENT_R2 du disque F:\ de la machine physique SRVWINFR1 (nœud actif).

Pour obtenir un fichier de configuration modèle de l'installation du premier nœud en mode FAILOVER, lancer setup.exe et suivre les étapes graphiques jusqu'à l'étape "Ready to Install". Finalement cliquer sur "Cancel" pour annuler l'installation effective.

Le fichier modèle ConfigurationFile.ini est généré dans C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\AAAAMMJJ_HHMMSS\ConfigurationFile.ini.

L'installation silencieuse du premier nœud est alors déclenchée avec la ligne de commande ci-dessous :

FRDCOR100 - F:\> start /wait SQL_2008_ENT_R2\setup.exe /configurationfile=ConfigurationFile.ini 
                /q 
                /IACCEPTSQLSERVERLICENSETERMS  
                /SAPWD="motdepasse" 
                /SQLSVCPASSWORD="motdepasse" 
                /AGTSVCPASSWORD="motdepasse" 
                /FTSVCPASSWORD="motdepasse"

Chaque installation génère les fichiers de logs dans un répertoire ayant pour nomenclature C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\AAAAMMJJ_HHMMSS\

Voici les éléments notables dans le fichier ini concernant l'installation du premier nœud :

ConfigurationFile.ini
;SQLSERVER2008 Configuration File
[SQLSERVER2008]
 
ACTION="InstallFailoverCluster"
FEATURES=SQLENGINE,REPLICATION,FULLTEXT
 
INSTANCEID="MSSQLSERVER"
INSTANCENAME="MSSQLSERVER"
 
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
 
FAILOVERCLUSTERDISKS="Disk D:" "Disk E:"
FAILOVERCLUSTERGROUP="Group 0"
FAILOVERCLUSTERNETWORKNAME="FRDCOR101"
FAILOVERCLUSTERIPADDRESSES="IPv4;10.129.132.183;LAN;255.255.255.0"
 
AGTSVCACCOUNT="domain\zzsqlserver"
AGTDOMAINGROUP="domain\ad.FR.Servers.CORE.ClusterServices"
 
FILESTREAMLEVEL="0"
 
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
 
SQLDOMAINGROUP="domain\ad.FR.Servers.CORE.ClusterServices"
SQLSVCACCOUNT="domain\zzsqlserver"
SQLSYSADMINACCOUNTS="domain\zzsqlserver"
 
SECURITYMODE="SQL"
 
INSTALLSQDATADIR="E:\\"
SQLBACKUPDIR="D:\MSSQL10_50.MSSQLSERVER\MSSQL\Backup"
SQLUSERDBLOGDIR="D:\MSSQL10_50.MSSQLSERVER\MSSQL\Data"
 
FTSVCACCOUNT="domain\zzsqlserver"

Paramètre Description
ACTION="InstallFailoverCluster" L'option InstallFailoverCluster indique l'installation d'un premier nœud en mode Failover.
FEATURES=SQLENGINE,REPLICATION,FULLTEXT L'interface graphique ne permet pas de désélectionner les fonctionnalités REPLICATION et FULLTEXT. Par précaution, ces fonctionnalités sont également installées, notamment la fonctionnalité FULLTEXT, les spécifications données par les éditeurs étant généralement pauvres et superficielles.
INSTANCEID="MSSQLSERVER" INSTANCENAME="MSSQLSERVER" INSTANCEID et INSTANCENAME ont pour valeur MSSQLSERVER dans le cas d'une instance par défaut. Dans le cas d'une instance nommée, INSTANCENAME est le nom de l'instance nommée. INSTANCEID permet de personnaliser l'identifiant de l'instance (clés de registres, répertoires d'installations...) afin d'écraser la valeur INSTANCENAME utilisée par défaut.
FAILOVERCLUSTERNETWORKNAME="FRDCOR101" Adresse logique réseau du cluster MS SQL Server avec laquelle les applications clientes se connecteront. Cette adresse sera ajoutée dans le DNS au cours de l'installation.
FAILOVERCLUSTERIPADDRESSES ="IPv4;10.129.132.183;LAN;255.255.255.0" Propriétés réseau de l'adresse logique FRDCOR101. Le format est :
<IP Type>;<adresse IP>;<network name>;<subnet mask>.
Les types d'IP supportés sont DHCP, IPv4 et IPv6. L'adresse IP mentionnée doit être une IP non utilisée. Elle sera réservée dans le DNS à l'issue de l'installation. ! Bug : Le paramètre FAILOVERCLUSTERIPADDRESSES n'est pas généré dans le fichier ConfigurationFile. Il doit être ajouté à la main.
FAILOVERCLUSTERGROUP="Group 0" Groupe de ressources dans le cluster à utiliser pour MS SQL Server. Ici c'est le groupe "Group 0" contenant les disques D et E qui est sélectionné.
! Interdiction d'utiliser les groupes de ressource utilisés pour MS DTC et le Quorum.
FAILOVERCLUSTERDISKS="Disk D:" "Disk E:" Disques à utiliser dans le groupe de cluster. Il est possible de définir finement les disques utilisables par MS SQL Server dans un groupe de ressources cluster contenant plusieurs disques.
SQLDOMAINGROUP ="domain\ad.FR.Servers.CORE.ClusterServices" AGTDOMAINGROUP ="domain\ad.FR.Servers.CORE.ClusterServices" Groupe dans le domaine préalablement créé par l'administrateur du domaine AD et contenant comme membres le(s) compte(s) de service du domaine AD démarrant les services SQL du cluster (MS SQL, SQL Agent, Analysis Services,...). Ce groupe est utilisé pour contrôler l'accès aux clés de registre, fichiers, objets SQL Server et autres ressources du cluster. Le compte de service domain\zzsqlserver démarrant SQL Server et l'agent SQL Server est dans le groupe domain\ad.FR.Servers.CORE.ClusterServices. Ce groupe ne doit pas être partagé par plusieurs applications et clusters. La spécification d'un groupe est spécifique à Windows Server 2003. Pour Windows Server 2008 : les services SIDs sont recommandés et par défaut (non abordé dans cet article).
INSTALLSQLDATADIR="E:\\" Répertoire racine par défaut d'installation du moteur SQL Server (bases systèmes etc...). ! Bug : Le fichier ini généré contient INSTALLSQLDATADIR="E:". Rajouter \\ sinon l'installation est en échec avec le message "E:MSSQL10_50.MSSQLSERVER\MSSQL\DATA is malformed or not absolute".

Ajout d'un nœud (SRVWINFR2)

L'ajout d'un nœud dans un système Cluster SQL Server est très simple.

Le cluster est constitué de 2 nœuds : SRVWINFR1 et SRVWINFR2 (cluster node). La machine SRVWINFR1 est installée pour MS SQL Server et dans l'état actuel, seule la machine SRVWINFR1 est le propriétaire possible de la ressource MS SQL Server.

Pour ajouter le nœud SRVWINFR2 comme un autre propriétaire possible de la ressource MS SQL Server, setup.exe est lancé sur SRVWINFR2 avec l'option /ACTION=addNode pour l'instance par défaut MSSQLSERVER créée précédemment.

La distribution d'installation de MS SQL 2008 R2 est posée dans le répertoire SQL_2008_ENT_R2 du disque F:\ de la machine physique SRVWINFR2 (nœud passif) et la ligne de commande ci-dessous suffit à ajouter SRVWINFR2 comme nœud :

SRVWINFR2 - F:\SQL_2008_ENT_R2> setup.exe /q /ACTION=AddNode
                      /IAcceptSQLServerLicenseTerms
                      /INSTANCENAME="MSSQLSERVER" 
                      /SQLSVCACCOUNT="domain\zzsqlserver" 
                      /SQLSVCPASSWORD="motdepasse" 
                      /AGTSVCACCOUNT="domain/zzsqlserver"
                      /AGTSVCPASSWORD="motdepasse"  
                      /FTSVCACCOUNT="domain/zzsqlserver" 
                      /FTSVCPASSWORD="motdepasse"

Seuls les comptes de service pour MS SQL Server (SQL), SQL Agent (AGT) et Full Text (FT) de l'instance par défaut MSSQLSERVER sont donnés avec leurs mots de passe. Le compte de service Full Text est optionnel si la fonctionnalité FULLTEXT n'a pas été sélectionnée dans l'installation.

Lorsqu'il s'agit d'une instance nommée, bien entendu, INSTANCENAME est le nom de l'instance nommée.

Les ressources créées dans le cluster après l'installation

Les nouvelles ressources pour MS SQL Server en mode failover créées dans le group "Group 0" du cluster sont les suivantes après l'installation :

FRDCOR100 - C:\> cluster RES
Listing status for all available resources:
 
Resource                          Group                Node            Status
--------------------              -------------------- --------------- ------
 ...
Disk D:                           Group 0              SRVWINFR1       Online
Disk E:                           Group 0              SRVWINFR1       Online
 ...
SQL Network Name (FRDCOR101)      Group 0              SRVWINFR1       Online
SQL IP Address 1 (FRDCOR101)      Group 0              SRVWINFR1       Online
SQL Server                        Group 0              SRVWINFR1       Online
SQL Server Agent                  Group 0              SRVWINFR1       Online

Les options /prop, /priv, /listowners etc... de la commande cluster res "Resource Name" permettent de retrouver les caractéristiques définies lors de l'installation.

Par exemple, les paramètres IP de FRDCOR101, adresse logique réseau de la ressource MS SQL Server :

FRDCOR100 - C:\> cluster res "SQL IP Address 1 (FRDCOR101)" /priv
Listing private properties for 'SQL IP Address 1 (FRDCOR101)':
 
T  Resource             Name                           Value
-- -------------------- ------------------------------ -----------------------
S  SQL IP Address 1 (FRDCOR101) Network                        LAN
S  SQL IP Address 1 (FRDCOR101) Address                        10.129.132.183
S  SQL IP Address 1 (FRDCOR101) SubnetMask                     255.255.255.0
 ...

Les noeuds comme propriétaires possibles pour une ressource SQL Server :

FRDCOR100 - C:\> cluster res "SQL IP Address 1 (FRDCOR101)" /listowners
Listing possible owners for resource 'SQL IP Address 1 (FRDCOR101)':
Possible Owner Nodes
--------------------
SRVWINFR1
SRVWINFR2

L'instance MS SQL Server créée est attaquée par les clients avec l'adresse logique réseau FRDCOR101 (FAILOVERCLUSTERNETWORKNAME). Bien entendu, la variable T-SQL @@servername est FRDCOR101, il ne s'agit jamais du nom physique de la machine qui héberge la ressource MS SQL Server (SRVWINFR1 ou SRVWINFR2).

sqlcmd -Usa -S FRDCOR101 -P<mot de passe>
1> select @@servername
2> go
FRDCOR101

Test de bascule, déplacement vers un nœud : cluster moveTo

La commande cluster avec l'option moveTo permet de vérifier le bon comportement de la bascule d'un nœud vers un autre nœud pour un groupe de ressources donné. Pour déplacer le group Group 0 contenant SQL Server du nœud SRVWINFR1 vers le nœud SRVWINFR2

FRDCOR100 - C:\> cluster group "Group 0" /MoveTo:SRVWINFR2 /wait:120

L'option /wait indique le "timeout" en secondes avant d'annuler bascule.

La commande cluster res doit montrer le nœud SRVWINFR2 à l'issue de la bascule :

FRDCOR100 - C:\> cluster res
Listing status for all available resources:
 
Resource                          Group                Node            Status
--------------------              -------------------- --------------- ------
 ...
Disk D:                           Group 0              SRVWINFR2       Online
Disk E:                           Group 0              SRVWINFR2       Online
 ...
SQL Network Name (FRDCOR101)      Group 0              SRVWINFR2       Online
SQL IP Address 1 (FRDCOR101)      Group 0              SRVWINFR2       Online
SQL Server                        Group 0              SRVWINFR2       Online
SQL Server Agent                  Group 0              SRVWINFR2       Online

La commande cluster avec l'option moveTo met le groupe "Group 0" offline et le met online sur l'autre nœud spécifié.

Suppression d'un nœud

La suppression d'un nœud est très simple en lignes de commande, elle est également réalisée avec le binaire setup et l'option /ACTION=RemoveNode. Par exemple pour supprimer le nœud SRVWINFR2 comme propriétaire possible de l'instance MSSQLSERVER :

SRVWINFR2 - F:\> start /wait SQL_2008_ENT_R2\setup.exe  
                      /q 
                      /ACTION=RemoveNode  
                      /INSTANCENAME="MSSQLSERVER"

Lorsqu'il s'agit d'une instance nommée, INSTANCENAME est le nom de l'instance nommée.

Pour désinstaller complètement une instance SQL Server 2008 en mode failover, l'action RemoveNode est exécutée sur chaque nœud.