SQL Server 2005 Failover Cluster Setup hanging

Recently I was involved in a SQL Server 2005 Failover Cluster Installation and during the setup the process just hanged for the “passive” node. After a short troubleshooting a colleague of mine suggested the setup to be run with privileged account from the same domain as the nodes. It was strange, however, it worked just fine. Today it happened again in another environment and the issue was definitely a good candidate for a deeper investigation. As my colleague suggested, I will additionally post the symptoms, the workaround and share my thoughts on the root-cause. So…

  1. Symptoms

The SQL Server setup fails on the passive node. Additionally you get in the setup log messages like:

Running: LoadResourcesAction at: 2008/5/11 14:23:56
Complete: LoadResourcesAction at: 2008/5/11 14:23:56, returned true
Running: ParseBootstrapOptionsAction at: 2008/5/11 14:23:56

Complete: ParseBootstrapOptionsAction at: 2008/5/11 14:23:56, returned false
Error: Action “ParseBootstrapOptionsAction” failed during execution. Error information reported during run:
Could not parse command line due to datastore exception.
Source File Name: utillib\persisthelpers.cpp
Compiler Timestamp: Fri Jul 29 01:13:55 2005
Function Name: writeEncryptedString
Source Line Number: 124
———————————————————-
writeEncryptedString() failed
Source File Name: utillib\persisthelpers.cpp
Compiler Timestamp: Fri Jul 29 01:13:55 2005
Function Name: writeEncryptedString
Source Line Number: 123
———————————————————-
Error Code: 0x80070002 (2)
Windows Error Text: The system cannot find the file specified.
Source File Name: cryptohelper\cryptsameusersamemachine.cpp
Compiler Timestamp: Mon Jun 13 14:30:00 2005
Function Name: sqls::CryptSameUserSameMachine::ProtectData
Source Line Number: 50
2
Could not skip Component update due to datastore exception.
Source File Name: datastore\cachedpropertycollection.cpp
Compiler Timestamp: Fri Jul 29 01:13:49 2005
Function Name: CachedPropertyCollection::findProperty
Source Line Number: 130
———————————————————-
Failed to find property “InstallMediaPath” {“SetupBootstrapOptionsScope”, “”, “3680”} in cache
Source File Name: datastore\propertycollection.cpp
Compiler Timestamp: Fri Jul 29 01:13:50 2005
Function Name: SetupBootstrapOptionsScope.InstallMediaPath
Source Line Number: 44
———————————————————-
No collector registered for scope: “SetupBootstrapOptionsScope”
Running: ValidateWinNTAction at: 2008/5/11 14:23:56
Complete: ValidateWinNTAction at: 2008/5/11 14:23:56, returned true
Running: ValidateMinOSAction at: 2008/5/11 14:23:56
Complete: ValidateMinOSAction at: 2008/5/11 14:23:56, returned true
Running: PerformSCCAction at: 2008/5/11 14:23:56
Complete: PerformSCCAction at: 2008/5/11 14:23:56, returned true
Running: ActivateLoggingAction at: 2008/5/11 14:23:56
Error: Action “ActivateLoggingAction” threw an exception during execution. Error information reported during run:
Datastore exception while trying to write logging properties.
Source File Name: datastore\cachedpropertycollection.cpp
Compiler Timestamp: Fri Jul 29 01:13:49 2005
Function Name: CachedPropertyCollection::findProperty
Source Line Number: 130
———————————————————-
Failed to find property “primaryLogFiles” {“SetupStateScope”, “”, “”} in cache
Source File Name: datastore\propertycollection.cpp
Compiler Timestamp: Fri Jul 29 01:13:50 2005
Function Name: SetupStateScope.primaryLogFiles
Source Line Number: 44
———————————————————-
No collector registered for scope: “SetupStateScope”
00C7CFC8Unable to proceed with setup, there was a command line parsing error. : 2
Error Code: 0x80070002 (2)
Windows Error Text: The system cannot find the file specified.
Source File Name: datastore\propertycollection.cpp
Compiler Timestamp: Fri Jul 29 01:13:50 2005
Function Name: SetupBootstrapOptionsScope.InstallMediaPath
Source Line Number: 44
Class not registered.

2. Workaround

Run the setup with account that has administrative privileges on both nodes and is in the same domain as the nodes

3. “WHY” candidates

– one of the prerequisites for SQL Server Failover Cluster installation is the account you are installing with to be a local administrator with permission to log on as a service and to act as part of the operating system on all nodes in the failover cluster (reference: http://msdn.microsoft.com/en-us/library/ms189910(v=SQL.90).aspx – check paragraph Other Considerations)

So if we have a installation user from DomainA that is trying to install SQL server on nodes in DomainB I am not sure if something with those two privileges is not getting messed up.

– another prerequisite for the installation account is to have Write servicePrincipalName Access Control Settings permissions (this is usually a domain administrator on a local administrator to the server). (reference: http://www.ftpex.com/howtoinstallsqlcluster.html)

Again as the previous thought – something might be getting wrong during verification of permissions or something like that.

– the third hint is about SQL Server resource domain groups – the installation user must have necessary permissions in order to add the SQL Server (and not only) service account in the domain groups for the SQL

During setup if the user of the SQL Server Service, for example, is not already part of the domain group, the setup is trying to add it and as the setup of the passive node is first, it fails there.

 

So far those are the hints why this is happening. It would be interesting if the same behavior is noticed in SQL Server 2008 Failover Cluster installation but I guess there is only one way to understand that…

Leave a comment