If you would like to read the other parts in this article series please go to:
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 1)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 2)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 3)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 4)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 5)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 6)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 7)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 8)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 10)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 11)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 12)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 13)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 14)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 15)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 16)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 17)
Introduction
In the last part of this series we completed the work to prepare the surrounding environment for Exchange 2013, including upgrading third-party software, clients, prepared Active Directory and installed pre-requisites on our new Exchange Server. In this part of the series we’ll prepare the storage for Exchange, and configure storage subsystem testing ready to ensure it meets requirements.
Basic Storage Configuration
We’ve already configured storage for the Exchange Server’s operating system and Page File – it’s now time to configure the storage that will host the Exchange Databases and associated log files. These have already been configured on our virtual environment, back in part seven, so they’re just waiting for us to configure.
Preparing Disks
We’ll be following our plans in part 7 of this series and using mount points for the Exchange related volumes. Mount points can be used instead of drive letters and mean that a disk is exposed as a folder, for example C:\Disk2. Before we specify the mount point for the disk, we’ll need to create a folder for each mount point that will serve as the placeholder.
We’ve got a number of disks to be used, so as a quick refresher, these are the volumes and mount points we’re about to configure.
Database 1 Mount Point | C:\ExchangeDatabases\DB01 |
Database 2 Mount Point | C:\ExchangeDatabases\DB02 |
Database 3 Mount Point | C:\ExchangeDatabases\DB03 |
Database 4 Mount Point | C:\ExchangeDatabases\DB04 |
Database 1 Log Mount Point | C:\ExchangeDatabases\DB01_Log |
Database 2 Log Mount Point | C:\ExchangeDatabases\DB02_Log |
Database 3 Log Mount Point | C:\ExchangeDatabases\DB03_Log |
Database 4 Log Mount Point | C:\ExchangeDatabases\DB04Log |
Restore/Maintenance LUN Mount Point | C:\ExchangeDatabases\Restore |
Table 1
Using the above information, we can use an administrative command prompt to create each directory required:
Figure 1: Creating Mount Points for Exchange 2013
With our directories that will serve as mount points successfully created, we’ll then open Computer Management and navigate to Disk Management. In Windows Server 2012, you’ll find Computer Management within Server Manager, under the Tools menu.
For each disk that corresponds to the table and mount points above, we’ll perform a number of actions, following recommendations for Exchange 2013 on Microsoft’s TechNet site. First, we’ll select the disk, right click and choose Initialize Disk:
Figure 2: Initializing storage
When prompted, we’ll choose GPT (GUID Partition Table), then press OK:
Figure 3: Choosing the partition style for disks
With our disk initialized, right click the new disk and choose New Simple Volume, as shown below:
Figure 4: Creating volumes for Exchange
The New Simple Volume Wizard will display. First, choose Mount in the following empty NTFS folder and within the Browse for Drive Path window, select the corresponding folder:
Figure 5: Selecting the mount point for the new volume
As part of creating the new volume, we’ll also have the opportunity to format the new volume. Exchange has specific requirements; firstly that the volumes used for Exchange are aligned (all versions of Windows after Server 2008 do this by default, so you don’t need to worry about this) and that the allocation unit size is configured as 64KB.
Ensure you select the allocation unit size, as shown below, and optionally name the volume appropriately for easy identification:
Figure 6: Ensuring the NTFS allocation unit size is set correctly to 64KB
After performing the same steps for each disk, you should finally see the list of Exchange related volumes shown within Disk Management, similar to below – you’ll also see why it’s beneficial to give each volume a label:
Figure 7: Reviewing Disk Labels
Within Windows Explorer, we’ll also see indications that those folders we created earlier are no longer just folders – if we navigate to our ExchangeVolumes folder hosting each Database, Log and Restore volume we’ll see the folder icon has changed to a disk, and the volume size is shown alongside each:
Figure 8: Reviewing mount points in Windows Explorer
With our volumes configured, we’re ready to move onto testing our storage.
Storage Subsystem Testing
Before we begin this section, let’s take a quick moment to explain what we’re doing and why. Storage Subsystem Testing is really a fancy phrase for checking the performance of the disks is fine. We want to, as a minimum, make sure that before we actually put any users onto the system we’ve performed tests using Exchange 2013 tools to validate that our solution performs as expected.
About JetStress
The tool provided by the Microsoft Exchange Product Group, the team that write Exchange, is called JetStress. This tool does what it says on the tin – it puts as much strain on the underlying disks as it can using Exchange’s proprietary database. JetStress was first released for Exchange 2007, and subsequent releases of Exchange 2010 and 2013 have had corresponding JetStress releases paired to each version, each of which use the same ESE binaries you’ll install with Exchange.
Microsoft make available the excellent JetStress 2013 Field Guide which provides guidance on a range of scenarios and serves as the definitive guide for JetStress use complementing the product documentation; so ensure you read the guide as we’ll only cover usage of the tool here in a single-server scenario.
Installing JetStress 2013
We’ll first download JetStress 2013 from the Microsoft web site, and run the installer on the server that will run Exchange 2013. We’ll accept the defaults for the basic install:
Figure 9: Installing JetStress 2013
Configuring JetStress Pre-Requisites
After installation has completed, we’ve got another task to do before we launch JetStress. As mentioned above, we’ll need the same ESE binaries that our installation of Exchange will use. In particular, we need the following files:
- ese.dll
- eseperf.dll
- eseperf.hxx
- eseperf.ini
- eseperf.xml
We’ll find all these files within the Exchange 2013 CU2 install files we extracted earlier to C:\Exchange2013. The ese.dll file will be located within the setup\serverroles\common folder:
Figure 10: Copying the ESE.DLL from Exchange 2013 setup files
The remaining eseperf.dll, eseperf.hxx, eseperf.ini and eseperf.xml files will be within setup\serveroles\common\perf\amd64:
Figure 11: Copying additional requires eseperf.* from Exchange 2013 setup files
We will copy these files to the directory we’ve installed JetStress, in our case C:\Program Files\Exchange JetStress as shown below:
Figure 12: Ensuring JetStress pre-requisite files are copied to the JetStress installation folder
With our pre-requisites for running JetStress satisfied, we’ll launch JetStress 2013.
The first run will be used to allow JetStress to determine that the correct files are available and can be loaded. We’ll be able to do that by choosing Start new test:
Figure 13: Starting a new test to load pre-requisite performance counters
We’ll then see on the Checking Test System page indication that the correct files were found, and have been loaded:
Figure 14: Verifying performance counters are loaded and closing JetStress
Configuring JetStress ready for testing
Close and re-launch JetStress and then attempt to Start new test again. This time we’ll actually be able to set up and run our tests.
Figure 15: Beginning the actual JetStress test
JetStress will again check that the correct files are available and the components it needs have been registered. Verify that you see output similar to below, then press Next:
Figure 16: Displaying checks to verify all pre-requisites are available and registered
We’ll now need to create a configuration file that will contain the settings we’ll use for executing our test. In the example below, I’ve used the default JetStressConfig.xml file recommended by the tool, then pressed Next to continue:
Figure 17: Creating a new JetStress configuration file
The type of test we’ll perform is the Disk subsystem throughput test. This will allow us to verify that the underlying storage meets the requirements of the Exchange role requirements calculator:
Figure 18: Define the test scenario
On the Capacity and Throughput page, we’ll then change the size and IOPS capacity percentages to 100%. These values will allow us to use all the underlying storage allocated, which is very important as we must validate what we’ll expect the system to consume over it’s life.
If you’ve used the previous version of JetStress, then you’ll be familiar with the recommendation to supress auto-tuning and manually specify a thread count, then re-run the test with higher thread counts until the test fails. Due to improvements in the latest version, this is no longer necessary, so leave auto-tuning enabled:
Figure 19: Select capacity and throughput
On the Select Test Type page, choose Performance and then select Run background database maintenance and Continue the test despite encountering disk errors:
Figure 20: Select the test type
On the Define Test Run page, we’ll then specify a duration. Initially, we’ll specify a run of 2 hours to get a feeling for the performance available. As we’ll mention below, we’ll then re-visit this and run a full 24-hour test assuming the 2 hour test passes with flying colours:
Figure 21: Define the test run
Next, we’ll configure JetStress with the list of databases to use for our test configuration. It’s important to make sure that these match the disk locations of the actual Exchange databases and log folders we’ll use for production – we can’t just add a couple of databases; we’ll need to set up a matching configuration so the underlying storage subsystem sees the same kind of peak load we’ll expect in production.
For our example scenario, we’ll define four databases, and as we’ll not running a Database Availability Group, we’ll just specify the one copy per database:
Figure 22: Define the locations for Database and Log files
On the Select Database Source page, we’ll then choose to Create new databases. This option requests JetStress to make a minimum of one new database matching the size we’ll be testing for, which will then be duplicated across to total our four databases.
Figure 23: Select the Database Source
Summary
After choosing to create databases, we’re almost ready to go. We’ll continue with JetStress in the next part in this series, review the results of testing and if all looks well, remove our testing toolset and install Exchange Server 2013.
If you would like to read the other parts in this article series please go to:
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 1)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 2)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 3)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 4)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 5)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 6)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 7)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 8)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 10)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 11)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 12)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 13)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 14)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 15)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 16)
- Planning and migrating a small organization from Exchange 2007 to 2013 (Part 17)