Networking Protocols and SQL Server 2005 Virtual Server

SQL Server running on Windows Cluster Service is called SQL Server Virtual Server or SQL Server Cluster. There are three related terminologies in SQL Server Virtual Server. It’s important not to confuse with each other.

  • Windows Server Name. This refers the physical nodes on which Windows Cluster Service and SQL Server run. SQL Server Virtual Server can fail from one node to another node. Each node has a name to identify itself, say Node1, Node2, etc.

  • Cluster Name. This identifies the Cluster and is used usually by Windows Cluster Administrator. Let’s say its name is MyClusterName. 

  • Virtual Server Name. This identifies the SQL Server Virtual Server, which is running on top of the Cluster Service and can fail over to any of the involved physical nodes. Say its name is MyVirtualServer. Note that multiple SQL Server Virtual Servers can be installed on one Cluster Service identified by the Cluster Name.

When a client connects to SQL Server Virtual Server, users should always use Virtual Server Name, You can think of the Virtual Server Name as the server name of a standalone SQL Server. If you try to connect your Virtual Server through the physical node names or the cluster name, you will typically see the following error message:

 

C: >osql -E -SMyClusterName
[SQL Native Client]Named Pipes Provider: Could not open a connection to SQL Server [53].
[SQL Native Client]Login timeout expired
[SQL Native Client]An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.

 

Among all network protocols provided by SQL Server 2005, Shared Memory is not supported on SQL Server 2005 Virtual Server. As we know, Shared Memory is only for local usage. If you connect SQL Server Virtual Server using Shared Memory from the physical node, you’ll see the following error message:

 

C: >osql -E -Slpc:Node1
[SQL Native Client]SQL Network Interfaces: Cannot open a Shared Memory connection to a remote SQL server [87].
[SQL Native Client]Login timeout expired
[SQL Native Client]An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.

 

So, you know that the system considers the SQL Server Virtual Server as another computer. If you happened to have a cluster resource which depends on the same "Network Name" resource that the SQL Server Cluster depends on, you will see the following message when your application tries to connect the SQL Server Cluster using Shared Memory:

 

C:>osql -E -Slpc:MyVirtualServer
[SQL Native Client]Shared Memory Provider: Shared Memory is not supported for clustered server connectivity [50].
[SQL Native Client]Client unable to establish connection
[SQL Native Client]Login timeout expired

 

Named Pipes is supported on SQL Server Virtual Server. The pipe name on virtual server is specially formed, but transparent to the clients, i.e. the clients should still use the standard form \MyVirtualServerpipesqlquery. If you have to configure your own pipe name for the SQL Server Cluster through SQL Server Configuration Manager, you should use the following form of strings as the pipe name: \.pipe$$MyVirtualServersqlquery. Windows Cluster Services automatically maps the pipe name (\MyVirtualServerpipesqlquery) on a virtual server to the pipe name ( \.pipe$$MyVirtualServersqlquery ) on the physical machine. The ‘$$’ is a hint to Windows to bind the pipe to a virtual server as opposed to the physical name.

 

SQL Server 2005 extends the supportability of TCP on Cluster and provides better usability for customers to configure/reconfigure IP addresses. In SQL Server 2000 Virtual Server, users configure IP addresses for the SQL server instance to listen on during installation. Once the server is installed, the user is not allowed to change/add/remove IP addresses. To reconfigure IP addresses, users may have to reinstall the SQL Server instance. This is not the case anymore in SQL Server 2005. SQL Server 2005 Virtual Server relies on Cluster Services to manage the IP addresses that the virtual server listens on. On Windows Cluster, everything is considered as resources. A SQL Server Virtual Server is a “SQL Server” resource. The “SQL Server” resource depends on a “Network Name” resource, which may depend on one or more “IP Address” resources. The name parameter of the “Network Name” resource is the name of the virtual server. To add an additional IP address your virtual server listens on, you can let your “Network Name” resource depend on an additional “IP Address” resource. You can also configure/update the IP address and its NIC card through Cluster Administrator. These IP addresses may belong to different networks. We recommend users use Cluster Administrator, rather than SQL Server Configuration Manager, to configure IP addresses of a SQL Server 20005 Virtual Server. Users can still use the SQL Server Configuration Manager to configure the TCP ports the virtual server listens on, though.

 

To enable VIA protocol, special hardware and drivers are required. For most users, VIA should be turned off, especially when you don’t know what it is. This blog does not cover the topic about VIA on Cluster. Please refer our future blogs for details.

Xinwei Hong, SQL Server Protocols
Disclaimer: This posting is provided "AS IS" with no warranties, and confers no rights