A simple SharePoint configuration of two servers is an ideal candidate for server virtualization. A setup of one Microsoft IIS Server system running SharePoint as the Web front end and one server running Microsoft SQL Server as the database back end, especially if you don't anticipate heavy usage, can be virtualized using Microsoft Virtual Server 2005 or VMware Server (both free products), or VMware ESX Server, and run on one physical server. Sound intriguing? Let's take a look at why you would want to do such thing, and then consider what you'll need to do to successfully implement server virtualization of your SharePoint setup.
Benefits of Virtualizing a SharePoint Server 2007 Farm
You'll find several benefits in virtualizing a simple Microsoft Office SharePoint Server 2007 server farm. These range from increased security, to better performance, to lower costs.
Increased security. Virtualizing servers can help increase security, especially if your SharePoint 2007 server is accessed from the Internet. As you know, SharePoint Server 2007 data is typically stored on a SQL Server back-end database. If both applications are installed on a single server, the database server is also exposed to the Internet. However, if the servers are virtualized, only the SharePoint Server 2007 front-end server is exposed to the Internet, protecting the database on a separate virtual server not exposed to the Internet.
No loss of fault tolerance. Running two virtual server guests on the host server won't reduce your fault tolerance. This is because the SharePoint Server 2007 server won't work without the database back end and vice versa. In other words, if you lose either the SharePoint Server 2007 front-end server or the back-end database server, the portal will go down. Easier bare-metal restores. The virtual server guest configuration and logical disks are stored as files on the virtual server host. Backing up these files is essentially the same as performing a bare-metal backup of the virtual server guests. Moving the virtual server guest to a different host simply means copying files to a different host and starting the virtual server guest on the host server. You can replicate virtual server guest files to a remote disaster recovery site by using third-party server replication applications such as Neverfail's products or by using Distributed File System Replication (DFSR), which is an integral part of Windows Server 2003 R2. This greatly simplifies the recovery of the SharePoint Server 2007 server farm.
Faster setup time. If you create a base image of the virtual server guest, you can significantly reduce the time it takes to bring up a new virtual server guest to 15 minutes or less, compared to two or more hours to bring up a new physical server.
Reduced costs. It's usually less expensive to purchase a large host server instead of two dedicated smaller servers. Hardware maintenance costs are also potentially reduced, and fewer servers means lower electric and cooling bills.
The 32- or 64-Bit Question
If you decide you'd like to try server virtualization, there's one thing you need to consider before you even select your virtualization software platform—you must decide whether to use the 32- or 64-bit versions of SharePoint Server 2007 and SQL Server 2005. If your hardware supports the x64 version of Windows Server 2003 R2 as a virtual server guest, I strongly suggest using the 64-bit versions of SharePoint Server 2007 and SQL Server 2005. SQL Server 2005 and SharePoint Server 2007's indexing functions are potentially intensive in terms of memory, disk, and processor use, and using the 64-bit version of these software applications can improve performance. One drawback of using the x64 version of SharePoint is the inability to run iFilters from third-party sources. For example the PDF iFilter doesn't work with the x64 version of Windows SharePoint Services 3.0 and SharePoint Server 2007.
Additionally, running the x64 versions of SharePoint Server 2007 and SQL Server 2005 in a virtual environment does limit your choice of virtual server software because only VMware Server and ESX Server are capable of running x64-based guest servers. Virtual Server 2005 supports 32-bit guests. If you use VMware Server, your server hardware must be capable of running both an x64 version of Windows 2003 as the host software and running x64 virtual server guests.
Even if your server supports x64 virtual server guests, for some processors, such as the Intel model, you'll probably have to enable the support for this feature by going into the server's BIOS, then restarting the host server. In my experience, most servers ship with support for x64 guests disabled by default. If you plan to use VMware Server, you'll need to see whether your server is capable of running x64 guests. (To do so, you can download the Processor Check Utility for 64-Bit Compatibility at http://www.vmware.com/download/server/drivers_tools.html.)
If you plan to use ESX Server, you'll need to go to the VMware site to make sure that your server (and SAN, if applicable) is listed as compatible. ESX Server recently added support for Intel's new quad-core processors. For the best performance of the virtual server guests, use ESX Server as the host OS, because it provides near-native hardware performance, requires less host memory, and can provide as much as 16GB of RAM for a virtual server guest. It's very Linux-like, however, so if you're not familiar with Linux or ESX Server, be prepared for a learning curve.
If you're new to virtualization and the portal won't be used too heavily, consider using VMware Server with Windows Server 2003 R2 x64 as the host OS, because VMware Server is free and you're probably already familiar with the Windows OS. VMware Server also has a wider range of virtual guest OS support than does Virtual Server 2005.
Server Host Configuration
Although you could get SharePoint Server 2007 up and running with virtual server guests on an older server, the performance is going to suffer; realistically, running virtual servers for SharePoint Server 2007 means purchasing a new server. The latest generation of servers is significantly faster than the previous generation, especially the servers with quad-core processors and SAS hard disks.
Even if you acquire new server hardware, you'll need to verify that you have adequate memory on your host server to support your virtual server guests. For a SharePoint Server 2007 production portal, you should typically configure the host server with 8GB of memory to start. This amount gives you room to run additional virtual server guests on the host, if necessary. If you use VMware Server with Windows 2003 as the host OS, ensure that the version of Windows 2003 can support the amount of memory installed in the server. Table 1 shows the different versions of Windows 2003 R2 and the maximum amount of memory each version supports.
I don't recommend using the 32-bit Standard version of Windows 2003 R2 as the host OS because its memory support is insufficient. You could use the 32-bit Enterprise version of Windows 2003 R2, but to take advantage of the new server hardware you really should consider running an x64 version of Windows 2003, whether the Standard or the Enterprise edition. The Enterprise version of the Windows 2003 license lets you run as many as four instances of the OS as virtual server guests on a single host, regardless of the virtual server software you use.
Install antivirus software on the host OS, but exclude all virtual server guest files from antivirus scanning to improve the performance of all the virtual servers running on the host. Also consider installing an antivirus/antispyware solution specific to SharePoint Server 2007, such as Microsoft Forefront Security for SharePoint or a third-party solution. In addition to the SharePoint Server 2007 antivirus/antispyware software, you should install file-level antivirus and antispyware software on all your virtual server guests.
SharePoint Server 2007 and Virtual Server Guests
To streamline the creation of a virtual server guest, install a base image of Windows 2003 R2, then copy the disk image to a different folder when you want to create a new virtual server guest. For the base image, install the OS, virtual server add-ons, and latest service packs and
hot fixes, then copy the amd64 and/or i386 setup files to the virtual server guest and leave the server in a workgroup. The x64 version has both the amd64 and i386 setup folders. The i386 setup files are used to run Windows on Windows (WOW) 32-bit programs on the x64 version of Windows 2003. When you need to set up a new virtual server guest, you can copy the hard disk file to a different folder and create a new virtual server, using the base image hard disk. When you start the server, rename it, set the IP address, and join the domain. By using this method to create a new virtual server, you can save at least an hour of setup time for each new virtual server guest.
How many virtual guest servers should you run? For SharePoint Server 2007, I typically set up just two: one virtual guest that will run SQL Server 2005 and one virtual guest that will run SharePoint Server 2007, including the IIS, Application, and Indexing services. You might have to run at least one 32-bit guest for backup or other server functions that won't run on the x64 version of Windows 2003 R2, because some programs don't support the installation of the backup software directly on an x64 server or have problems even if they do support x64. For example, although Symantec Backup Exec 11d supports an installation on a Windows x64 version, I found it buggy and therefore unreliable. Backup Exec 10d does support a remote backup of an x64 Windows server.
In a virtual environment, it really doesn't make sense to create separate guests on the virtual server host for a separate indexing server or other SharePoint Server 2007 services, because separate guests just create more overhead and potentially slow down the server. To create a portal that can support as many as 100 users, consider configuring the virtual server guests as follows:
- SharePoint Server front-end and application server: 2GB memory; 20GB C drive; 40GB D drive; one processor
- SQL Server 2005 server: 3.8GB memory (64-bit version of SQL Server) or more if you're running ESX Server; 3GB memory (32-bit version of SQL Server); 20GB C drive; 100GB D drive; one processor
The virtual server guest files are installed on the host server's RAID 5 or RAID 10 array or on a 4GBps Fibre Channel SAN. I haven't seen any performance increase from assigning more than a single processor to each virtual guest server. After the servers are up and running for a while, you can adjust these parameters as necessary. Probably the biggest adjustment to make will be the amount of memory you allocate to each virtual server guest. For the virtual server guest disk drives, I suggest not preallocating the space for these disks. Although it's true that you'll have better performance if you preallocate the space, the virtual disk files will be smaller on the host if you don't preallocate the space, which makes them easier to deal with, especially when you're performing backups. I found that in most SharePoint Server 2007 deployments, disk space gets used very slowly—typically less than a few MB per day. So I'd sacrifice performance for faster recovery of the virtual server guest files, less disk space usage on the host, and faster backup times.
Be sure to configure each guest to automatically start up when the host server boots; otherwise, you'll have to start each guest server manually whenever the host server is rebooted. Although the virtual servers' states are saved by default, it's always a good idea to shut down the virtual servers before restarting or shutting down the host server. Ensure that all network administrators are aware of the virtual server configuration and train them to shut down all virtual guests before shutting down the host server.
SharePoint Server 2007 Backup
One of the neat features of SharePoint Server 2007 is the addition of a Recycle Bin, which gives you a safety net in case your users accidentally delete items from the portal. As of this date, popular backup vendors such as Symantec and CA are still working on their agent support for SharePoint Server 2007. If you're running Virtual Server 2005 or VMware Server, one backup option is to shut down the virtual server guests and back up all the virtual server guest files on the host server. Doing so gives you an image backup of all the virtual server guests running on the host. The main disadvantage to this approach is that you can't perform a granular restore: You must restore the entire portal. If you're running ESX Server, you can back up the virtual server guest files by using software such as Vizioncore's esxRanger SE or VMware's Consolidated Backup while the virtual server is still running. You can also use SharePoint Server 2007 Central Administration Backup or the command utilities smigrate or stsadm to back up SharePoint Server 2007 to a file, then back up the file to tape or other offline media.
For full granular backup and restore support, you might try third-party solutions such as AvePoint's DocAve backup solution for SharePoint Server 2007, which requires a dedicated backup server and is positioned for enterprise deployments. The main advantage of this solution is the ability to back up and restore items at the document level.
Make Server Virtualization Work for You
Depending on your experience with server virtualization and SharePoint, you'll find there's a learning curve associated with server virtualization. Start slowly, either in a test environment or on servers that will have limited use, until you feel comfortable enough with the technology to use it in a production environment. You'll find the payoff worth the effort.