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


1- 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 PAR1DB1-144 et PAR1DB1-145 est décrite. Les caractéristiques de l'installation sont les suivantes :

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 ?

2- Caractéristiques du cluster PARDCOR100, 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 PARDCOR100 avec RDP (Remote Desktop Protocol), la connexion est réalisée sur le nœud actif d'un cluster. Ici, PAR1DB1-144 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 :

PARDCOR100 - C:\> cluster /?

2-1- cluster /LIST

L'option /LIST permet de lister les clusters existants dans un domaine :

PARDCOR100 - C:\> cluster /LIST
Cluster Name
---------------
MCS-MOSS-MTE
PARAPRN101
PARAPRN302
PARDCOR100
PARDMOS104
PARDMOS301
PARDMOS304

2-2- cluster NODE

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

PARDCOR100 - C:\> cluster NODE
Listing status for all available nodes:
 
Node           Node ID Status
-------------- ------- ---------------------
PAR1DB1-144          1 Up
PAR1DB1-145          2 Up

Le cluster PARDCOR100 contient 2 nœuds PAR1DB1-144 et PAR1DB1-145 et chaque nœud est "up".

2-3- cluster GROUP

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

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

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

2-4- cluster RES (options /priv, /prop, /listowners)

L'option RES liste plus finement les ressources du cluster

PARDCOR100 - C:\> cluster RES
Listing status for all available resources:
 
Resource             Group                Node            Status
-------------------- -------------------- --------------- ------
Adresse IP MS DTC    MSDTC                PAR1DB1-144     Online
Nom réseau MS DTC    MSDTC                PAR1DB1-144     Online
Disk M:              MSDTC                PAR1DB1-144     Online
Ressource MSDTC      MSDTC                PAR1DB1-144     Online
Cluster IP Address   Cluster Group        PAR1DB1-144     Online
Cluster Name         Cluster Group        PAR1DB1-144     Online
Disk Q:              Cluster Group        PAR1DB1-144     Online
Disk D:              Group 0              PAR1DB1-144     Online
Disk E:              Group 0              PAR1DB1-144     Online
Disk G:              Group 1              PAR1DB1-144     Online
Disk H:              Group 1              PAR1DB1-144     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

PARDCOR100 - 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

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

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

PARDCOR100 - C:\> cluster RES "Ressource MSDTC" /listowners
Listing possible owners for resource 'Ressource MSDTC':
Possible Owner Nodes
--------------------
PAR1DB1-144
PAR1DB1-145

2-4-1- MSDTC

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

2-4-2- Cluster Group - Quorum

3 ressources pour le groupe Cluster Group ou Quorum.

3- Installation silencieuse du premier nœud en mode cluster FAILOVER (PAR1DB1-144)

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 PAR1DB1-144 (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 :

PARDCOR100 - 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 :

type 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="PARDCOR101"
FAILOVERCLUSTERIPADDRESSES="IPv4;10.128.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="PARDCOR101" 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.128.132.183;LAN;255.255.255.0"
Propriétés réseau de l'adresse logique PARDCOR101. 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".

4- Ajout d'un nœud (PAR1DB1-145)

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 : PAR1DB1-144 et PAR1DB1-145 (cluster node). La machine PAR1DB1-144 est installée pour MS SQL Server et dans l'état actuel, seule la machine PAR1DB1-144 est le propriétaire possible de la ressource MS SQL Server.

Pour ajouter le nœud PAR1DB1-145 comme un autre propriétaire possible de la ressource MS SQL Server, setup.exe est lancé sur PAR1DB1-145 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 PAR1DB1-145 (nœud passif) et la ligne de commande ci-dessous suffit à ajouter PAR1DB1-145 comme nœud :

PAR1DB1-145 - 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.

5- 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 :

PARDCOR100 - C:\> cluster RES
Listing status for all available resources:
 
Resource                          Group                Node            Status
--------------------              -------------------- --------------- ------
 ...
Disk D:                           Group 0              PAR1DB1-144     Online
Disk E:                           Group 0              PAR1DB1-144     Online
 ...
SQL Network Name (PARDCOR101)     Group 0              PAR1DB1-144     Online
SQL IP Address 1 (PARDCOR101)     Group 0              PAR1DB1-144     Online
SQL Server                        Group 0              PAR1DB1-144     Online
SQL Server Agent                  Group 0              PAR1DB1-144     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 PARDCOR101, adresse logique réseau de la ressource MS SQL Server :

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

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

PARDCOR100 - C:\> cluster res "SQL IP Address 1 (PARDCOR101)" /listowners
Listing possible owners for resource 'SQL IP Address 1 (PARDCOR101)':
Possible Owner Nodes
--------------------
PAR1DB1-144
PAR1DB1-145

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

D:> sqlcmd -Usa -SPARDCOR101 -P<mot de passe>
1> select @@servername
2> go
PARDCOR101

6- 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 PAR1DB1-144 vers le nœud PAR1DB1-145

PARDCOR100 - C:\> cluster group "Group 0" /MoveTo:PAR1DB1-145 /wait:120

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

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

PARDCOR100 - C:\> cluster res
Listing status for all available resources:
 
Resource                          Group                Node            Status
--------------------              -------------------- --------------- ------
 ...
Disk D:                           Group 0              PAR1DB1-145     Online
Disk E:                           Group 0              PAR1DB1-145     Online
 ...
SQL Network Name (PARDCOR101)     Group 0              PAR1DB1-145     Online
SQL IP Address 1 (PARDCOR101)     Group 0              PAR1DB1-145     Online
SQL Server                        Group 0              PAR1DB1-145     Online
SQL Server Agent                  Group 0              PAR1DB1-145     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é.

7- 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 PAR1DB1-145 comme propriétaire possible de l'instance MSSQLSERVER :

PAR1DB1-145 - 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.


Annexe

Historique

Version Date Commentaires
1.0 02/2011 Version initiale

Liens

Microsoft : SQL Server 2008 Failover Clustering Whitepaper
Microsoft MSDN : SQL Server 2005 - Domain Groups for Clustered Services