Its been a few days since the first post in this series, and I have learned a lot about clustering in Windows Server 2008 with SQL Server 2008. The first thing I learned over the last few days is that there are some significant changes in Windows 2008 Clustering that affect how you will roll out a cluster for testing purposes. A lot of the changes have to do with Windows 2008 clustering configuration and not necessarily with clustering SQL Server 2008 directly, but since clustering SQL Server is dependent first on successfully clustering Windows Server 2008, they are important to note.
The first problem that bit me in working on this project is that there are changes in Windows Server 2008 clustering that made my original attempts to use an OpenFiler iSCSI target for clustering inadequate. Primarily the problem has to do with the requirement for SCSI-3 Persistent Reservations.
This is not currently supported under any of the Linux open source iSCSI targets that are readily available online. (If you happen to know of one, send me a contact through here, I'm interested.) This meant that I had to first change my iSCSI target implementation out for SCSI-3 Persistent Reservation support. Luckily StarWind supports SCSI-3 as a part of their Express Edition, though it requires Windows to be running which requires more system resources than the comparable Linux implementation.
This being the first and only cluster I have setup from scratch, I have to say, that while somewhat aggravating at times, it wasn't overly complicated to actually get online and running. A majority of the problems that I encountered had to do with my lack of understanding the requirements for building a Windows 2008 Cluster, like SCSI-3 Persistent Reservations. Fortunately, I have experience installing and running SQL Server 2008 on Windows Server 2008. For a quick run down, here are more or less the steps that I followed along the way to building my first successful cluster:
- Install ESXi.
- Install Virutal Infrastructure Client on laptop
- Create Virtual Machine for Active Directory Domain Controller (DC01)
Create Virtual Machine for W2K3 iSCSI SAN (SAN)
- 1 vCPU 2GB RAM 20GB HardDisk
- Install Windows Server Enterprise onto DC01
- Configure Static IP for Networking
- Add the Active Directory Server Role
- Run Active Directory Configuration and create a new Domain and Forest.
- Add ports to firewall for DNS and AD.
- Create SQL Service User Account
Create Virtual Machines for Node 1 and 2 (W2K8-01/W2K8-02)
- 1 vCPU 2GB RAM 20GB HardDisk 60GB HardDisk
- Install Windows Server 2003
- Configure Static IP for Networking
- Add to Active Directory
- Install StarWind Express Edition
- Configure 3 iSCSI Targets
- 5GB Quorum Disk
- 5GB MSDTC Disk
- 20GB Data Disk
- Add ports to firewall for iSCSI
- 2 vCPU 4GB RAM 20GB HardDisk 2 Network Adapters
- Install Windows Server 2008 Enterprise onto W2K8-01/W2K8-02
- Configure Static IP for Networking Controller 1 on Public Network
- Configure Static IP for Networking Controller 2 on Private Network for Heartbeat.
- Join both servers to the Active Directory Domain.
- Configure iSCSI Initiator
- Target Portal = SAN IP Addresss
- Configure Quorum TargetID as Disk1, MSDTC as Disk2, and Data as Disk3
- Set all targets to "Automatically restore this connection when the computer starts."
- Add the Application Server Role
- Add Failover Clustering Feature
- Open Failover Cluster Manager and validate the configuration of both servers for Clustering.
- Create a new Failover Cluster named W2K8-CLUSTER on IP 192.168.100.210
- Add MSDTC to the Cluster from W2K8-01 named WIN2K8-MSDTC on IP 192.168.100.211
- Install .NET 3.5 onto both Cluster Nodes from SQL 2008 Installation Media.
- Run Setup for SQL Server 2008 on W2K8-01 and select "New SQL Server failover cluster installation"
- Name SQL Cluster SQL2K8CLUSTER
- Run Setup for SQL Server 2008 on W2K8-02 and select "Add Node to a SQL Server failover cluster"
If you can follow all of these steps, you should have a complete SQL Cluster. I had considered posting a step by step guide as a part of this process. However, one of the lessons that I learned during this process is that I could have saved a lot of time, and a lot of headache by doing a bit of research before diving in head first. There is already a really good write up in a four part series written by Edwin Sarmiento that uses StarWind and builds a very similar cluster to the one that I built.
I should know by now to follow the Latin statement nanos gigantum humeris insidentes, or standing on the shoulders of giants, meaning "One who develops future intellectual pursuits by understanding the research and works created by notable thinkers of the past". I should know at this point in my career to do my research up front, but I still tend to attempt to roll my own first and then find the
corrections directions later on. As a part of this process I ordered a new book:
Microsoft SQL Server 2008 Management and Administration by Ross Mistry
based on a posting I found while trying to figure out a problem I was having with MSDTC while on my second of three attempts at installing my cluster. While I haven't received the book yet, I did get a message from Ross pointing me to his book after purchasing it in response to a question that I posted on Twitter. If you haven't happened to jump on the social networking site yet, I'd highly recommend that you do and get involved in the SQL Community online. The amount of information you can get in a few seconds while working on a project such as this is simply phenomenal. Another member of the SQL Community who provided responses to my clustering questions and postings on Twitter was none other than clustering guru, Geoff Hiten, who I've met a few times personally, and I frequently send links to questions on clustering on the forums when I can't help with them.
So now that I have installed a functioning Windows Server 2008/SQL Server 2008, I am off to install a second cluster, but this time on Windows Server 2003 with SQL Server 2005 so I can play with performing upgrades. So much to learn, but so little time....