Sql-server – Install new SQL Server cluster instance on existing cluster without downtime

clusteringsql server

I get this error when trying to install a new SQL Server instance on the passive node in an existing, classic cluster with shared storage, that has this configuration – Node A: active, Node B: passive.

There was a failure to call cluster code from a provider. Exception
message: Generic failure . Status code: 4098. Description: Not found

ErrorType = 2 Operation = GetObject
ParameterInfo = MSCluster_ResourceGroup.Name="SQL Server (ProductionSQL1)"
ProviderName = MS_CLUSTER_PROVIDER
StatusCode = 4098

At first I got the same error messages for the cluster groups "MSDTC" and "Cluster Group" (qourum and cluster IP), which I failed over, so that the current state was:

Node A: ProductionSQL1, ProductionSQL2
Node B: MSDTC, Cluster Group, Shared disk used for new instance

If my memory not fails me, it should be possible to install a new instance, on the secondary passive node (B), or do I have to install the new instance, e.g ProductionSQL3 on a node that hosts all cluster resources?

If so, will there be any downtime to the existing production instances, caused by the fact that SQL installation stops running SQL Server services, or something else?


Not sharing the complete log, since it's a production system. Some more details though:

 Overall summary:   
 Final result:                  Failed: see details below
 Exit code (Decimal):           -2032664562
 Exit facility code:            1752
 Exit error code:               14   
 Exit message:                  There was an error to lookup cluster groups
 Error: There was a failure to call cluster code from a provider.
 Exception message: Generic failure . Status code: 4098. Description: Not found
 Start time:                    2018-08-22 10:00:19
 End time:                      2018-08-22 10:00:46   
 Requested action: InstallFailoverCluster
 Exception help link:          
 http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=13.0.4001.0&EvtType=0xE8049925%400x42B4DED7&EvtType=0xE8049925%400x42B4DED7

          Exception summary:
          The following is an exception stack listing the exceptions in outermost to innermost order
          Inner exceptions are being indented

          Exception type: Microsoft.SqlServer.Configuration.Cluster.ClusterGroupsLookupException
              Message: 
                  There was an error to lookup cluster groups. Error: There was a failure to call cluster code from a provider. Exception
 message:
      Generic failure . Status code: 4098. Description: Not found
                  .
              HResult : 0x86d8000e
                  FacilityCode : 1752 (6d8)
                  ErrorCode : 14 (000e)
              Data: 
                errorMessage = There was a failure to call cluster code from a provider. Exception message: Generic failure . Status
 code: 4098.
      Description: Not found
          .
                WatsonData = Microsoft.SqlServer.Configuration.Cluster.ClusterGroupsLookupException@14
                DisableWatson = true
              Stack: 
                  at Microsoft.SqlServer.Configuration.Cluster.WindowsCluster.get_Groups()
                  at Microsoft.SqlServer.Configuration.ClusterConfiguration.ClusterGroupPublicConfigObject.Calculate()
                  at Microsoft.SqlServer.Chainer.Infrastructure.PublicConfigurationBridge.Calculate()
                  at Microsoft.SqlServer.Chainer.Infrastructure.InputSettingService.CalculateSettings(IEnumerable`1
      settingIds)
                  at Microsoft.SqlServer.Chainer.Infrastructure.InputSettingService.CalculateAllSettings(Boolean
      chainerSettingOnly)
                  at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String
      actionId, TextWriter errorStream)
                  at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<c__DisplayClasse.<ExecuteActionWithRetryHelperb__b()
                  at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker
      workerDelegate)
              Inner exception type: Microsoft.SqlServer.Configuration.Cluster.ClusterProviderDetailedException
                  Message: 
                          There was a failure to call cluster code from a provider. Exception message: Generic failure . Status code:
 4098.
      Description: Not found
                          .
                  HResult : 0x86d70002
                          FacilityCode : 1751 (6d7)
                          ErrorCode : 2 (0002)
                  Data: 
                    ExceptionMessage = Generic failure 
                    StatusCode = 4098
                    Description = Not found

                    WatsonData = Microsoft.SqlServer.Configuration.Cluster.ClusterProviderDetailedException@2
                  Stack: 
                          at Microsoft.SqlServer.Configuration.Cluster.WmiClusterGroup.get_Name()
                          at Microsoft.SqlServer.Configuration.Cluster.WindowsCluster.get_Groups()
                  Inner exception type: System.Management.ManagementException
                      Message: 
                                  Generic failure
                      HResult : 0x80131501
                      Data: 
                        WmiErrorCode = Failed
                        WatsonData = Failed@4098
                        Description = Not found

                        ErrorType = 2
                        Operation = GetObject
                        ParameterInfo = MSCluster_ResourceGroup.Name="ClusteredMSDTC"
                        ProviderName = MS_CLUSTER_PROVIDER
                        StatusCode = 4098
                      Stack: 
                                  at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus
      errorCode)
                                  at System.Management.ManagementObject.Initialize(Boolean getObject)
                                  at System.Management.ManagementBaseObject.get_Properties()
                                  at System.Management.ManagementBaseObject.GetPropertyValue(String
      propertyName)
                                  at Microsoft.SqlServer.Configuration.WMIInterop.ResourceGroup.get_Name()
                                  at Microsoft.SqlServer.Configuration.Cluster.WmiClusterGroup.get_Name()

Best Answer

I could see following in the logs

There was an error to lookup cluster groups Error: There was a failure to call cluster code from a provider. Exception message: Generic failure . Status code: 4098. Description: Not found

WatsonData = Microsoft.SqlServer.Configuration.Cluster.ClusterGroupsLookupException@14 DisableWatson = trueMicrosoft.SqlServer.Configuration.Cluster.WindowsCluster.get_Groups() at Microsoft.SqlServer.Configuration.ClusterConfiguration.ClusterGroupPublicConfigObject.Calculate()

Both of these messages suggest that the account which you are using to install the failover cluster does not have permission to perform "some of the action" in AD where computer name object would be created. There are 3 things you need to check.

  1. If you are using domain admin account to install failover cluster you do not need to give any permission and the installation would be seamless. This might not always be possible and normally people do give domain admins to normal users as the account is very powerful and can be misused. I would also suggest to avoid this

  2. If you are using account which is not domain admin make sure with help of AD team that

    • It is added as local administrator on both the nodes of cluster.
    • It has right to create computer name object.
    • It has Right to read all the properties.
  3. Make sure the both the nodes are patches to latest windows patches.