Planning and migrating a small organization from Exchange 2007 to 2013 (Part 9)

by [Published on 3 Oct. 2013 / Last Updated on 3 Oct. 2013]

In this part of the series we'll prepare the storage for Exchange, and configure storage subsystem testing ready to ensure it meets requirements.

If you would like to read the other parts in this article series please go to:

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:

Image
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:

Image
Figure 2: Initializing storage

When prompted, we'll choose GPT (GUID Partition Table), then press OK:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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.

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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:

Image
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.

Image
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:

Advertisement

Featured Links